特徵提取之pd.get_dummies()用法

背景:

在拿到的數據裏,經常有分類型變量的存在,如下:
球鞋品牌:Nike、adidas、 Vans、PUMA、CONVERSE
性別:男、女
顏色:紅、黃、藍、綠
However,sklearn大佬不能直接分析這類變量呀。在迴歸,分類,聚類等機器學習算法中,特徵之間距離的計算或相似度的計算是算法關鍵部分,而常用的距離或相似度的計算都是在歐式空間的相似度計算,計算餘弦相似性,基於的就是歐式空間。於是,我們要對這些分類變量進行啞變量處理,又或者叫虛擬變量。
缺點:
當類別的數量很多時,特徵空間會變得非常大。在這種情況下,一般可以用PCA來減少維度。而且one hot encoding+PCA這種組合在實際中也非常有用。有些基於樹的算法在處理變量時,並不是基於向量空間度量,數值只是個類別符號,即沒有偏序關係,所以不用進行獨熱編碼。Tree Model不太需要one-hot編碼: 對於決策樹來說,one-hot的本質是增加樹的深度。
In summary,要是one hot encoding的類別數目不太多,可優先考慮。

一.pd.get_dummies()簡單&粗暴

pandas.get_dummies(data, prefix=None, prefix_sep='_', 
			dummy_na=False, columns=None, 
			sparse=False, drop_first=False, dtype=None)

官網文檔:
http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.get_dummies.html

輸入:array-like, Series, or DataFrame
輸出:DataFrame

主要參數說明:

data : array-like, Series, or DataFrame
prefix : 給輸出的列添加前綴,如prefix="A",輸出的列會顯示類似
prefix_sep : 設置前綴跟分類的分隔符sepration,默認是下劃線"_"

一般,我們輸入data就夠了。如果要專門關注Nan這類東東,可設置dummy_na=True,專門生成一列數據。
見下面的栗子:(簡直不要太容易)

import numpy as np
import pandas as pd
data = pd.DataFrame({"學號":[1001,1002,1003,1004],
                    "性別":["男","女","女","男"],
                    "學歷":["本科","碩士","專科","本科"]})
data

學歷 學號 性別
0 本科 1001 男
1 碩士 1002 女
2 專科 1003 女
3 本科 1004 男

pd.get_dummies(data)

學號 學歷_專科 學歷_本科 學歷_碩士 性別_女 性別_男
0 1001 0 1 0 0 1
1 1002 0 0 1 1 0
2 1003 1 0 0 1 0
3 1004 0 1 0 0 1

pd.get_dummies(data,prefix="A")

學號 A_專科 A_本科 A_碩士 A_女 A_男
0 1001 0 1 0 0 1
1 1002 0 0 1 1 0
2 1003 1 0 0 1 0
3 1004 0 1 0 0 1

pd.get_dummies(data,prefix=["A","B"],prefix_sep="+")

學號 A+專科 A+本科 A+碩士 B+女 B+男
0 1001 0 1 0 0 1
1 1002 0 0 1 1 0
2 1003 1 0 0 1 0
3 1004 0 1 0 0 1

二.

將指定列進行get_dummies 後合併到元數據中

data = data.join(pd.get_dummies(data.性別))
發佈了276 篇原創文章 · 獲贊 163 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章