采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,您好。最近再做一个kaggle入门项目遇到了一个问题,想请教您。在使用机器学习算法之前,对于非数值型特征,如果采用one_hot编码的方式,可以将其转换为数值型特征。可是我遇到的问题就是,在某一个维度取值存在多个离散值的情况下,在训练数据和测试数据中,测试数据中存在有训练数据所没有的取值,也就是说,采用one-hot编码之后,测试和训练数据的X的维度都不相同了,请问这里应该怎么做?或者说老师有推荐的博客和书籍吗?谢谢老师了
解决这个问题的办法是:
将训练数据和测试数据合并,再进行one-hot编码,然后进行后续的特征处理就可以了。
测试数据应该按照训练数据的方式走!比如训练数据的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
加油!
不好意思,可能刚刚我表述引起了歧义,现在是测试数据集中出现了训练数据集中没有出现的离散值,应该如何处理?此时是否还适合用one-hot编码?请老师解答,谢谢老师,比心0.0
也应该按照训练数据集处理,测试数据集中只有A, B, C三项。但比如某个测试数据的featureX是D,那么这个测试数据的A, B, C三项都为0!道理上,出现这种情况,更说明了你的训练数据集划分的不好,有一些原本数据中的情况不在训练数据集中,model也就看不见这些情况:)
谢谢老师,我知道怎么做了。我也觉得更多的是数据集划分不合适,使得在测试数据中出现了没有学习的特征。谢谢老师解答
登录后可查看更多问答,登录/注册
Python3+sklearn,兼顾原理、算法底层实现和框架使用。
2.5k 19
3.5k 17
2.9k 15
1.6k 15
1.4k 14