在sklearn中使用DataFrame的一些问题(训练集与测试集列顺序问题)

来源:互联网 发布:python 全文搜索引擎 编辑:程序博客网 时间:2024/06/08 19:22

问题1 DataFrame能直接做训练集和测试集吗?


猜想

最近使用sklearn的模型的时候发现训练集可以直接传入pandas的DataFrame进行训练,而且进行预测的时候也可以直接传入DataFrame,我以为sklearn可以直接识别DataFrame中数据列的顺序,即使列的顺序是乱的也可以直接进行预测,于是做了个测试。

测试

这里训练集的x_train,测试集是x_test:


这个时候顺序是一样的,这个时候预测结果是2.6+:


然后把测试集的顺序乱一下:


这里把测试集中的列a和列c调换了一下位置,得出的结果是3.8+:


其实如果把列名乱填的话


结果也是3.8+:


所以说之前的想法是错误的

结论

如果想要往sklearn的模型中传入DataFrame的话,列名的顺序必须是一样的,应该是传入的时候调用的as_matrix()方法,直接传入的矩阵,列什么的sklearn并不会关心。



问题2 训练集和测试集列数一样但是顺序不同怎么办?


但是如果我的训练集和测试集都是DataFrame格式的,列数一样但是顺序不一样,想要放进sklearn里进行训练和预测,那该怎么办呢?


这个时候使用:

[python] view plain
  1. x_test[x_train.columns]  





问题3 训练集的列数和测试集不一样怎么办?


还有一种情况是训练集的列数和测试集的不一样

像下面这个例子,训练集缺失了good_d,更多的的情况是缺很多列


训练集和测试集分别处理哑变量的情况下会出现这种问题,不知道大家是怎么解决的?

如果训练集中没有测试集中的列,是不是应该把测试集中对应的列删掉;

如果测试集中没有训练集中的列,通常这种情况是要把缺失的列补上并且填充一个0,那么怎么做呢?

我目前的解决方法是这样的,和解决问题2的方法类似。总感觉有点笨,不知道还有没有好的解决方案。



其他


DataFrame的filter方法是个选择特征列好方法,可以用正则表达式匹配需要选择的列,很好用。


0 0
原创粉丝点击