2018年3月1日 星期四

機器學習_ML_OneHotEncoder_獨熱編碼

機器學習_ML_OneHotEncoder_獨熱編碼

說明

官方文件
在另篇中我們說明了標籤轉置,用於label(目標類別)的時候是萬無一失,但是用於特徵呢?
很遺憾的,即使是0,1,2,3…對於整個模型的計算還是會有影響,這時候我們就必需改透過獨熱編碼來處理,一起來看sklearn怎麼幫我們達成。

IMPORT

from sklearn.preprocessing import OneHotEncoder

範例

資料集如下:
類別 身高 體重 性別 年紀
175 70 35
160 50 31
175 27
180 80
180 100 18
#  載入需求lib
import numpy as np
import pandas as pd
#  獨熱編碼套件
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import LabelEncoder

#  手動寫入資料集,資料假裝透過插補完成了
ds = [
    ('胖',175,70,'男',35),
    ('瘦',160,50,'女',31),
    ('瘦',175,75,'男',27),
    ('胖',180,80,'女',27.5),
    ('胖',180,100,'男',18)]

columns = ['label','high','weight','sex','years']

#  假裝一下資料載入pandas,比較有fu
df = pd.DataFrame.from_records(ds,columns=columns)

#  確認資料是否載入pandas
df
#  資料拆分
X = df.iloc[:,1:].values
y = df.iloc[:,0].values
#  確認y的狀態
y
>>>array(['胖', '瘦', '瘦', '胖', '胖'], dtype=object)
#  標籤轉換
y_labelencoder = LabelEncoder()
y = y_labelencoder.fit_transform(y)
>>>array([1, 0, 0, 1, 1], dtype=int64)

X_labelencoder = LabelEncoder()
X[:,2] = X_labelencoder.fit_transform(X[:,2])
>>>array([1, 0, 1, 0, 1], dtype=int64)
#  獨熱編碼
#  需利用categorical_features來指定預執行獨熱編碼的index
onehotencoder = OneHotEncoder(categorical_features=[2])
X_hot = onehotencoder.fit_transform(X).toarray()
#  檢核X_hot
X_hot

使用Pandas

事實上,在轉獨熱編碼的時候,我還是習慣使用pandas。
pd.get_dummies(df[['high', 'weight', 'sex', 'years']])

沒有留言:

張貼留言