1. 程式人生 > >pandas 下的 one hot encoder 及 pd.get_dummies() 與 sklearn.preprocessing 下的 OneHotEncoder 的區別

pandas 下的 one hot encoder 及 pd.get_dummies() 與 sklearn.preprocessing 下的 OneHotEncoder 的區別

  • 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.]]
)