[英]Sklearn fit vs predict, order of columns matters?
假设X1
和X2
是具有相同列的2个pandas数据帧,但可能以不同的顺序排列。 假设模型是某种sklearn
模型,如LassoCV。 假设我做model.fit(X1, y)
,然后是model.predict(X2)
。 事实上列是不同的顺序是一个问题,还是模型保存权重我的列名?
另外,同样的问题,但是如果X1
和X2
以及numpy数组呢?
是的,我相信这很重要,因为sklearn
会将pandas
DataFrame转换为值数组(本质上是调用X1.values
),而不是注意列名。 但是,这很容易解决。 只需使用:
X2 = X2[X1.columns]
它会将X2
的列重新排序为与X1
相同的顺序
当然, numpy
数组的情况也是如此,因为它会使列中的模型适合于X1
,因此当您在X2
预测时,它只会根据X1
列的顺序进行预测。
示例 :
拿这两个数据帧:
>>> X1
a b
0 1 5
1 2 6
2 3 7
>>> X2
b a
0 5 3
1 4 2
2 6 1
该模型适用于X1.values
:
array([[1, 5],
[2, 6],
[3, 7]])
你预测X2.values
:
>>> X2.values
array([[5, 3],
[4, 2],
[6, 1]])
模型无法知道列已切换。 所以手动切换它们:
X2 = X2[X1.columns]
>>> X2
a b
0 3 5
1 2 4
2 1 6
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.