代码之家  ›  专栏  ›  技术社区  ›  Baron Yugovich

Sklearn fit vs predict,列的顺序很重要?

  •  3
  • Baron Yugovich  · 技术社区  · 6 年前

    X1 X2 是具有相同列但可能顺序不同的两个pandas数据帧。假设模型是 sklearn 模特,就像拉索夫。说我愿意 model.fit(X1, y) ,然后 model.predict(X2) . 列的顺序不同是问题,还是model save weights我的列名?

    同样的问题,但是如果 X1个 X2个 还有numpy阵列?

    1 回复  |  直到 6 年前
        1
  •  10
  •   sacuL    6 年前

    是的,我相信这很重要,因为 sklearn 将转换 pandas 数据帧到值数组(本质上是调用 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.数值 :

    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