关于one_hot编码方法导致的在训练数据和测试数据上生成的数据维度不等时的处理方法

来源:1-1 什么是机器学习

怀瑜

2018-07-17

老师,您好。最近再做一个kaggle入门项目遇到了一个问题,想请教您。在使用机器学习算法之前,对于非数值型特征,如果采用one_hot编码的方式,可以将其转换为数值型特征。可是我遇到的问题就是,在某一个维度取值存在多个离散值的情况下,在训练数据和测试数据中,测试数据中存在有训练数据所没有的取值,也就是说,采用one-hot编码之后,测试和训练数据的X的维度都不相同了,请问这里应该怎么做?或者说老师有推荐的博客和书籍吗?谢谢老师了

写回答

2回答

怀瑜

提问者

2018-07-23

解决这个问题的办法是:

将训练数据和测试数据合并,再进行one-hot编码,然后进行后续的特征处理就可以了。


0
0

liuyubobobo

2018-07-17

测试数据应该按照训练数据的方式走!比如训练数据的featurX有A, B, C三种可能,使用one_hot相当于得到了A,B,C三个特征替换原有的featureX。那么在测试数据集中,即使featureX只有A,B两种可能,也应该使用A,B,C三个特征替换featureX。


这其实和我们在这个课程中所讲解的所有数据与处理阶段做的事情是一致的。比如在StandardScaler中,我们标准化数据,求出训练数据集的均值和标准差。那么来了测试数据集,我们要用测试数据减去训练数据的均值;除以训练数据的标准差!而不是再求一套测试数据集的均值和标准差。同理,PCA的过程也是如此。


另外,如果测试数据集中没有这个特征的某一类别,并且你在数据探索阶段,如果发现这个类别很重要的话,那么这不是一个好的训练数据测试数据集的划分。对于重要的特征分布,在训练数据集和测试数据集中最好分布均匀。尤其是样本量并不大的话,可能需要手写一些split的策略:)


关于kaggle竞赛更多的内容,可以参考我的这个问答:)

https://coding.imooc.com/learn/questiondetail/47909.html


加油!

0
3
怀瑜
回复
liuyubobobo
谢谢老师,我知道怎么做了。我也觉得更多的是数据集划分不合适,使得在测试数据中出现了没有学习的特征。谢谢老师解答
2018-07-17
共3条回复

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5839 学习 · 2437 问题

查看课程