假设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