1. 程式人生 > >獨熱編碼OneHotEncoder簡介

獨熱編碼OneHotEncoder簡介

eat 不能 出現 使用 都是 print 就是 有效 即使

在分類和聚類運算中我們經常計算兩個個體之間的距離,對於連續的數字(Numric)這一點不成問題,但是對於名詞性(Norminal)的類別,計算距離很難。即使將類別與數字對應,例如{‘A’,‘B’,‘C’}與[0,1,2]對應,我們也不能認為A與B,B與C距離為1,而A與C距離為2。獨熱編碼正是為了處理這種距離的度量,該方法認為每個類別之間的距離是一樣的。該方法將類別與向量對應,例如{‘A’,‘B’,‘C’}分別與[1,0,0],[0,1,0],[0,0,1]對應,註意現在各個類別之間的歐式距離是相同的。

現在我們說明OneHotEncoder函數的使用

1 data=np.array([[1,0,3.25],
2 [0,0,5.2], 3 [2,1,3.6]]) 4 enc=OneHotEncoder(categorical_features=np.array([0,1]),n_values=[3,2]) 5 enc.fit(data) 6 data=enc.transform(data).toarray() 7 print(data)

運行結果為

[[ 0.    1.    0.    1.    0.    3.25]
 [ 1.    0.    0.    1.    0.    5.2 ]
 [ 0.    0.    1.    0.    1.    3.6 ]]

  categorical_features是需要獨熱編碼的列索引,n_values是對應categorical_features中各列下類別的數目,也就是原來的列拓展出新的列數。註意這裏兩個值可以不指定,直接使用fit_transform函數也可以,程序將統計各列中類別的多少。但是只對整數有效,對浮點數會轉換為整數之後再統計,也就是對於3.5和3.6默認都是3,也就是同一類。如果指定了這兩個參數,就要對未轉換的數據提出要求,各列必須是以{0,1,2,3,4......}來編碼,而不能以{1,10,100,200.........}這種隨意的方式來編碼。否則會出現數組越界的錯誤

  

獨熱編碼OneHotEncoder簡介