數據處理中有時要用到onehot編碼,如果使用pandas自帶的get_dummies方法,訓練集產生的onehot編碼特徵會跟測試集、預測集不一樣,正確的方式是使用sklearn自帶的OneHotEncoder。
代碼
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(handle_unknown='ignore')
data_train=pd.DataFrame({'職業':['數據挖掘工程師','數據庫開發工程師','數據分析師','數據分析師'],
'籍貫':['福州','廈門','泉州','龍巖']})
ohe.fit(data_train)#訓練規則
feature_names=ohe.get_feature_names(data_train.columns)#獲取編碼後的特徵名
data_train_onehot=pd.DataFrame(ohe.transform(data_train).toarray(),columns=feature_names)#應用規則在訓練集上
data_new=pd.DataFrame({'職業':['數據挖掘工程師','jave工程師'],
'籍貫':['福州','莆田']})
data_new_onehot=pd.DataFrame(ohe.transform(data_new).toarray(),columns=feature_names)#應用規則在預測集上