1. 程式人生 > >OneHot編碼

OneHot編碼

 

 

 

 

 1 b=pd.get_dummies(testdata_01,columns=['pet'],drop_first=True)#dummy encoding  

onehot編碼
Dummy Encoding VS One-Hot Encoding
二者都可以對Categorical Variable做處理,定性特徵轉換為定量特徵,
轉換為定量特徵其實就是將原來每個特徵的類別拿出來作為一個新的特徵(Dummy Variable)了,
如性別——男,女,定量特徵即將男作為一個特徵,女作為一個特徵,如果資料中的Categorical Variable很多,且每個Variable種類比較多,那麼轉換後的資料可能會非常稀疏。
兩者本身存在差別:
difference

:一個定性特徵或者成為Categorical Variable,其有n個值,
Dummy Encoding 會將這個Categorical Variable轉換為n-1個特徵變數,
OneHot Encoding會轉換為n個特徵變數。
其中,這種轉換在經濟學或者回歸模型中會存在一個Dummy Variable Trap的問題,
使用Dummy Encoder可以避免這個問題,
對於Dummy Variable Trap問題下面未做介紹。
由於我這裡面對的是分類問題,沒有過多的調研。

1 #方法一(使用pandas.get_dummies進行onehot編碼)
2 import pandas as pd
3 testdata_01= pd.read_csv('D:/suning/learning/testdata.csv') # 讀取資料 4 a=pd.get_dummies(testdata_02,columns=['pet'])#onehot encoding

 1 b=pd.get_dummies(testdata_01,columns=['pet'],drop_first=True)#dummy encoding 

 1 c=pd.get_dummies(testdata_01,columns=['is_has_car'])#onehot encoding

 

 1 d=pd.get_dummies(testdata_01,columns=['is_has_car'],drop_first=True)#onehot encoding 

 1 e=pd.get_dummies(testdata_01) #onehot encoding

2 f=pd.get_dummies(testdata_01,drop_first=True) 

 

 

 1 #方法二(使用sklearn.preprocessing進行onehotcoder)
 2 ##sklearn中的OneHotEncoder提供fit(X),transform(X),fit_transform(X),
 3 ##其中X是一個二維陣列,且陣列型別為int,不能直接處理字串型別的Categorical Varibale
 4 ##先把字串型別定性特徵轉變為連續的數值型變數,再用OneHotEncoder二值化。 
 5 import pandas as pd
 6 import numpy as np
 7 from sklearn.preprocessing import LabelEncoder,OneHotEncoder
 8 a=LabelEncoder().fit_transform(testdata_01['pet'])#把字串型別定性特徵轉變為連續的數值型變數
 9 aaa=OneHotEncoder(sparse=False).fit_transform(np.array(a).reshape(-1,1))#OneHotEncoder二值化
10 
11 #結論:pandas.get_dummies可以很方便的對定性特徵定量化,且可以批量處理。第二種方法無法批量的對定性特徵進行定量化。
12 #建議使用第一種方法。