2017-04-03 21 views
0

我已經通過sklearn OneHotEncoding方法轉換了訓練和測試數據集。但是,轉換後的結果具有不同的類型形狀。所以它不可能適用於邏輯迴歸等其他算法。訓練數據和測試數據之間的一次編碼映射問題

如何根據訓練數據集的形狀重塑測試數據?

最佳Regardings,克里斯

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

def data_transformation(data, dummy): 
    le = LabelEncoder() 

    # Encoding the columns with multiple categorical levels 
    for col1 in dummy: 
     le.fit(data[col1]) 
     data[col1] = le.transform(data[col1]) 

    dummy_data = np.array(data[dummy]) 
    enc = OneHotEncoder() 
    enc.fit(dummy_data) 

    dummy_data = enc.transform(dummy_data).toarray() 

if __name__ == '__main__': 
    data = pd.read_csv('train.data', delimiter=',') 
    data_test = pd.read_csv('test.data', delimiter=',') 

    dummy_columns = ['Column1', 'Column2'] 
    data = data_transformation(data, dummy_columns) 
    data_test = data_transformation(data_test, dummy_columns) 

# result 
# data shape : (200000, 71) 
# data_test shape : (15000, 32) 
+0

你確定壓痕嗎?我看到你正在對這篇文章進行大量編輯。 –

+0

我完成了這篇文章.. –

+1

你正在適應OneHotEncoder()和LabelEncoder()兩次:一個用於'data',另一個用於'data_test'。這就是爲什麼你的形狀不匹配。這些編碼器應該只是對train數據進行'fit()',並且只對測試數據調用'transform()'。 –

回答

0

太感謝你了,維韋克!由於你的幫助,我解決了這個問題。

def data_transformation2(data, data_test, dummy): 
    le = LabelEncoder() 

    # Encoding the columns with multiple categorical levels 
    for col in dummy: 
     le.fit(data[col]) 
     data[col] = le.transform(data[col]) 

    for col in dummy: 
     le.fit(data_test[col]) 
     data_test[col] = le.transform(data_test[col]) 

    enc = OneHotEncoder() 
    dummy_data = np.array(data[dummy]) 
    dummy_data_test = np.array(data_test[dummy]) 

    enc.fit(dummy_data) 

    dummy_data = enc.transform(dummy_data).toarray() 
    dummy_data_test = enc.transform(dummy_data_test).toarray() 

    print(dummy_data.shape) 
    print(dummy_data_test.shape)