對於分類問題,電腦模型裡面有一種稱 OneHot Encoding的編碼方式。
其實這只是電腦工具的使用,對於數據處理的流程沒有直接關係。
但是畢竟我們還是要使用工具,還是要學習工具使用上的適應工作。

 

數字來區分

    在人類的世界裡,固定範圍的資料我們可以用數字加以區隔。
比方說性別有男生和女生,用數字來區隔可以用 男生就是1、女生就是0。
銷往歐洲的三個國家有法國、德國和英國,我們也可以用 2代表法國、 1代表德國、0代表英國。

    但是在電腦的世界裡,相關的資料會當作一個項目來看待。
男生和女生都屬於性別,因此性別中 [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
、第三個是 要修改的 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。

文章標籤
全站熱搜
創作者介紹
創作者 小木屋 的頭像
小木屋

小木屋

小木屋 發表在 痞客邦 留言(0) 人氣(30)