pandas 下的 one hot encoder 及 pd.get_dummies() 與 sklearn.preprocessing 下的 OneHotEncoder 的區別
阿新 • • 發佈:2019-02-16
- sklearn.preprocessing 下除了提供 OneHotEncoder 還提供 LabelEncoder(簡單地將 categorical labels 轉換為不同的數字);
1. 簡單區別
sklearn.preprocessing 下的 OneHotEncoder 不可以直接處理 string,如果資料集中的某些特徵是 string 型別的話,需要首先將其轉換為 integers 型別;
- 在新版本中 sklearn 中,OneHotEncoder 例項的 fit 方法將不再接收 1 維陣列,而必須是顯式的二維形式;
encoder = OneHotEncoder() encoder.fit([[1, 2], [2, 1]]
pd.get_dummies(),則恰將 string 轉換為 integers 型別:
>> pd.get_dummies(['A', 'B', 'A']) A B 0 1 0 1 0 1 2 1 0
2. sklearn.feature_extraction 下的 DictVectorizer
將字典型別表示的屬性,轉換為向量型別:
>> measurements = [
{'city=Dubai': True, 'city=London': True, 'temperature': 33.},
{'city=London' : True, 'city=San Fransisco': True, 'temperature': 12.},
{'city': 'San Fransisco', 'temperature': 18.},
]
>> vec.feature_names
['city=Dubai', 'city=London', 'city=San Fransisco', 'temperature']
>> vec.fit_transform(measurements).toarray()
array([[ 1., 1., 0., 33.],
[ 0., 1., 1., 12.],
[ 0., 0., 1., 18.]] )