OneHotEncoding 训练数据和测试数据之间的映射问题

Posted

技术标签:

【中文标题】OneHotEncoding 训练数据和测试数据之间的映射问题【英文标题】:OneHotEncoding mapping issue between training data and test data 【发布时间】:2017-08-27 19:36:19 【问题描述】:

我已经通过 sklearn OneHotEncoding 方法转换了训练和测试数据集。但是,转换后的结果具有不同的类型形状。所以不可能应用于逻辑回归等其他算法。

如何根据训练数据集的形状重塑测试数据?

最好的,克里斯

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) 

【问题讨论】:

你确定压痕吗?我看到你对这篇文章做了很多修改。 我完成了这篇文章.. 您正在拟合 OneHotEncoder() 和 LabelEncoder() 两次:一次用于data,另一次用于data_test。这就是为什么你的形状不匹配。这些编码器在训练数据上只能是fit(),在测试数据上只能称为transform() 非常感谢,维韦克!为了您的帮助,我已经解决了这个问题。 【参考方案1】:

非常感谢你,维韦克!由于您的帮助,我已经解决了这个问题。

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)

【讨论】:

以上是关于OneHotEncoding 训练数据和测试数据之间的映射问题的主要内容,如果未能解决你的问题,请参考以下文章

在我的索引数据集上遇到 OneHotEncoding 错误

机器学习100天:005 数据预处理之划分训练集

机器学习100天:005 数据预处理之划分训练集

随机拆分训练和测试数据

OneHotEncoding 丢失了 Lasso 回归的列标识

机器学习(ML)七之模型选择欠拟合和过拟合