假设X1和X2是两个拥有相同列但列顺序可能不同的pandas数据框。假设model是某种sklearn模型,比如LassoCV。如果我执行model.fit(X1, y),然后执行model.predict(X2),列顺序不同是否会造成问题?还是说模型会根据列名保存权重?
同样的问题,如果X1和X2是numpy数组呢?
回答:
是的,我认为这会产生影响,因为sklearn会将pandas数据框转换为值的数组(基本上是调用X1.values),而不会关注列名。不过,这很容易解决。只需使用:
X2 = X2[X1.columns]
这样就可以将X2的列重新排序为与X1相同的顺序。
当然,对于numpy数组也是如此,因为模型会根据X1中的列顺序进行拟合,所以当你对X2进行预测时,它将基于X1中的列顺序进行预测。
示例:
以这两个数据框为例:
>>> X1 a b0 1 51 2 62 3 7>>> X2 b a0 5 31 4 22 6 1
模型是在X1.values上拟合的:
array([[1, 5], [2, 6], [3, 7]])
然后你在X2.values上进行预测:
>>> X2.valuesarray([[5, 3], [4, 2], [6, 1]])
模型无法知道列是交换过的。因此需要手动交换它们:
X2 = X2[X1.columns]>>> X2 a b0 3 51 2 42 1 6