Sklearn 的 OneHotEncoder 說明與簡單範例

Sklearn 是 Python 機器學習 ( Machine Learning ) 或資料分析中一個好用的工具,其中 OneHotEncoder 是可以將特徵扁平化的工具,配合  LabelEncoder 使用效果更好,這邊做一個簡單的用法說明教學

例如有以下資料 :

data = [ ['cat', 1], ['cat', 2], ['dog', 3], ['cat', 2], ['fish', 0] ]

第一步就是先用 LabelEncoder 將 cat,dog,fish 變成 0,1,2 來方便後續資料處理

( 別忘記先轉成 numpy array 比較好處理,   ndata = np.array(data) )

# 將 cat, dog, fish 分類, 成 0, 1, 2
ndata[:, 0] = LabelEncoder().fit_transform(ndata[:, 0])
"""
        type
array([['0', '1'],
       ['0', '2'],
       ['1', '3'],
       ['0', '2'],
       ['2', '3']],
      dtype='<U4')
"""

 

接下來用 enc = OneHotEncoder().fit(ndata) 來取得一個 OneHotEncoder 編碼器 ( enc )

 

然後以下是 OneHotEncoder 的 n_values_ 的說明

enc.n_values_
# array([3, 4])
"""
表示 ndata[0] 有 3 種特徵值
ndata[1] 有 4 種特徵值,分別為 0,1,2,3
"""

 

OneHotEncoder 的 feature_indices_ 的說明
enc.feature_indices_
# array([0, 3, 7])
"""
表示特徵的範圍,例如
0-3 為 ndata[0],
3-7 為 ndata[1]
"""

 

OneHotEncoder 的 transform 的應用範例
# 將 ndata 放入做測試
enc.transform(ndata).toarray()
"""     
        cat | dog |fish| 0 | 1 | 2 |  3 
array([[ 1.,  0.,  0.,  0.,  1.,  0.,  0.],
       [ 1.,  0.,  0.,  0.,  0.,  1.,  0.],
       [ 0.,  1.,  0.,  0.,  0.,  0.,  1.],
       [ 1.,  0.,  0.,  0.,  0.,  1.,  0.],
       [ 0.,  0.,  1.,  1.,  0.,  0.,  0.]])
"""

 

以下是完整範例:

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
import numpy as np

data = [ ['cat', 1], ['cat', 2], ['dog', 3], ['cat', 2], ['fish', 0] ]

ndata = np.array(data)

# 將 cat, dog, fish 分類, 成 0, 1, 2
ndata[:, 0] = LabelEncoder().fit_transform(ndata[:, 0])
"""
        type
array([['0', '1'],
       ['0', '2'],
       ['1', '3'],
       ['0', '2'],
       ['2', '3']],
      dtype='<U4')
"""

enc = OneHotEncoder().fit(ndata)
enc.n_values_
# array([3, 4])
"""
表示 ndata[0] 有 3 種特徵值
ndata[1] 有 4 種特徵值,分別為 0,1,2,3
"""

enc.feature_indices_
# array([0, 3, 7])
"""
表示特徵的範圍,例如
0-3 為 ndata[0],
3-7 為 ndata[1]
"""

# 將 ndata 放入做測試
print(enc.transform(ndata).toarray())
"""     
        cat | dog |fish| 0 | 1 | 2 |  3 
array([[ 1.,  0.,  0.,  0.,  1.,  0.,  0.],
       [ 1.,  0.,  0.,  0.,  0.,  1.,  0.],
       [ 0.,  1.,  0.,  0.,  0.,  0.,  1.],
       [ 1.,  0.,  0.,  0.,  0.,  1.,  0.],
       [ 0.,  0.,  1.,  1.,  0.,  0.,  0.]])
"""

 

得到這些結果,其實就可以與 ANN 做 Machine Learning 的數據處理了

 

Leave a Reply

Your email address will not be published. Required fields are marked *