Sklearn拟合与预测,列顺序重要吗?

Bar*_*ich 5 python machine-learning scikit-learn

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

此外,同样的问题,但如果X1X2和numpy的阵列?

sac*_*cuL 11

是的,我相信这很重要,因为sklearn它将pandasDataFrame 转换为值数组(本质上是X1.values),而不是注意列名。但是,这很容易解决。只需使用:

X2 = X2[X1.columns]
Run Code Online (Sandbox Code Playgroud)

并将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
Run Code Online (Sandbox Code Playgroud)

该模型适用于X1.values

array([[1, 5],
       [2, 6],
       [3, 7]])
Run Code Online (Sandbox Code Playgroud)

您可以预测X2.values

>>> X2.values
array([[5, 3],
       [4, 2],
       [6, 1]])
Run Code Online (Sandbox Code Playgroud)

模型无法知道列是否已切换。因此,请手动切换它们:

X2 = X2[X1.columns]

>>> X2
   a  b
0  3  5
1  2  4
2  1  6
Run Code Online (Sandbox Code Playgroud)

  • 救了我去bezerk :D (2认同)