首页 > 解决方案 > Sklearn fit vs predict,列的顺序很重要吗?

问题描述

说是 2X1X2具有相同列的熊猫数据框,但顺序可能不同。假设模型是某种sklearn模型,例如 LassoCV。说我做model.fit(X1, y),然后model.predict(X2)。列的顺序不同是一个问题,还是模型保存了我的列名?

另外,同样的问题,但是如果X1X2和 numpy 数组呢?

标签: pythonmachine-learningscikit-learn

解决方案


是的,我相信这很重要,sklearnpandasDataFrame 转换为值数组(本质上是调用X1.values),而不是注意列名。但是,这是一个简单的解决方法。只需使用:

X2 = X2[X1.columns]

它会将X2's 列重新排序为相同的顺序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

推荐阅读