2017-04-03 2 views
0

J'ai transformé l'ensemble de données d'apprentissage et de test par la méthode sklearn OneHotEncoding. Cependant, les résultats trnsformés ont une forme de type différente. Il est donc impossible de l'appliquer à d'autres algorithmes comme la régression logistique.Problème de mappage OneHotEncoding entre les données d'apprentissage et les données de test

Comment remodeler les données de test en fonction de la forme du jeu de données d'apprentissage?

Meilleur Regardings, Chris

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

Etes-vous sûr des indentations? Je vois que vous faites beaucoup de modifications à ce poste. –

+0

J'ai terminé ce post .. –

+1

Vous allez ajuster deux fois OneHotEncoder() et LabelEncoder(): un pour 'data' et un autre pour' data_test'. C'est pourquoi vous obtenez la discordance dans la forme. Ces encodeurs ne devraient être 'fit()' que sur les données de train, et seulement appelés 'transform()' pour les données de test. –

Répondre

0

Merci beaucoup, Vivek! J'ai résolu ce problème grâce à votre aide.

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)