對於分類問題,電腦模型裡面有一種稱 OneHot Encoding的編碼方式。
其實這只是電腦工具的使用,對於數據處理的流程沒有直接關係。
但是畢竟我們還是要使用工具,還是要學習工具使用上的適應工作。
數字來區分
在人類的世界裡,固定範圍的資料我們可以用數字加以區隔。
比方說性別有男生和女生,用數字來區隔可以用 男生就是1、女生就是0。
銷往歐洲的三個國家有法國、德國和英國,我們也可以用 2代表法國、 1代表德國、0代表英國。
但是在電腦的世界裡,相關的資料會當作一個項目來看待。
男生和女生都屬於性別,因此性別中 [1,0] 是男生, [0,1] 是女生。
但是在電腦的世界裡,相關的資料會當作一個項目來看待。
男生和女生都屬於性別,因此性別中 [1,0] 是男生, [0,1] 是女生。
法國、德國和英國都屬於銷售國家,[1,0,0] 是法國、[0,1,0] 是德國、[0,0,1] 是英國。
像這種相同類別以0和1的方式來轉換的編碼方式,稱為 OneHot Encoding
程式的寫作
1. 參考程式庫
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
2. 使用 ColumnTransformer class
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(),[0])], remainder='passthrough')
這裡利用 ColumnTransformer class 產生一個物件 ct,
輸入的第一個參數 transformers 是一個串列形式
第一個是 encoder、第二個是 OneHotEncoder() 要使用 One-Hot encoder
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
2. 使用 ColumnTransformer class
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(),[0])], remainder='passthrough')
這裡利用 ColumnTransformer class 產生一個物件 ct,
輸入的第一個參數 transformers 是一個串列形式
第一個是 encoder、第二個是 OneHotEncoder() 要使用 One-Hot encoder
、第三個是 要修改的 Column index
後面的參數 remainder='passthrough' 是其他未受 encoder 修改的欄位仍要留在矩陣裡面
以我們的圖來看:
如果我們想要改 Country 欄位,在這個矩陣裡就是 第 0 行 ,就放 [0]。
3. 符合目標陣列
矩陣 X 是我們要修改的目標,我們要用另一個函式去符合目標:.fit_transform()
符合目標後,還要在修改回原來的 矩陣 X
X=np.array(ct.fit_transform(X))
修改前的結果
修改後的結果
修改後可以看到, France 換成了 1,0,0 ,Spain 換成了 0,0,1,
Germanyn 換成了 0,1,0 ,就是 One Hot encoding。
文章標籤
全站熱搜
