特征的名称和顺序对预测算法重要吗

时间:2019-02-10 00:02:35

标签: python predict data-fitting

我的X_test数据框的列名/顺序是否必须与我用于拟合的X_train相同?

下面是一个示例:

我正在用以下方法训练模型:

model.fit(X_train,y)

其中X_train=data['var1','var2']

但是在预测期间,当我使用时:

model.predict(X_test)

X_test定义为:

`X_test = data ['var1','var3']

其中var3可能是与var2完全不同的变量。由于predictvar3中的第二列,因此是否假设var2X_test相同?

如果:

X_live定义为:'X_live = data ['var2','var1']

会预测知道重新排列X以便正确排列吗?

2 个答案:

答案 0 :(得分:2)

首先回答您的问题“预测是否假设 var3var2 相同,因为它是 X_test 中的第二列?”

没有;任何机器学习模型都没有任何这样的假设 您传递给拟合函数或预测的数据 功能。模型只看到一个数字数组,让它 是一个高阶多维数组。它完全在 用户关心的功能。

让我们考虑一个简单的分类问题,其中有 2 个组:

  • 第一个是一群孩子,他们个子矮,因此体重更轻,
  • 第二组是成熟的成年人,年龄、身高和体重都较高。

现在您想将以下个体归入任一类。

<头>
年龄 高度 重量
10 120 34

任何训练有素的分类器都可以轻松地将此数据点分类到儿童组,因为年龄和体重都很小。模型现在要考虑的向量是 [ 10, 120, 34 ]。 但是现在让我们按照以下方式重新排列特征列 - [ 120, 10, 34 ]。但是你知道120这个数字,你要指的是身高如果是个人而不是年龄!但是可以肯定的是,该模型不会理解您所知道或期望的内容,并且必然会将点归类到成人组。

希望能回答您的两个问题。

答案 1 :(得分:1)

列的名称无关紧要,但顺序无关紧要。您需要确保训练和测试数据中的顺序一致。如果您在训练数据中输入两列,则模型将假定任何将来的输入都是该顺序中的那些特征。

只是一个非常简单的思想实验。想象一下,您训练了一个减去两个数字的模型。功能为(n_1,n_2),您的输出将为n_1-n_2。

您的模型不处理列名(因为仅传递数字),因此它学习第一列,第二列和输出之间的关系,即output = col_1 - col_2。 / p>

无论传递什么内容,您都将获得传递的第一件事减去第二传递的结果。您可以命名传递的第一件事,并将传递的第二件事命名为任何东西想要,但最终还是会得到减法的结果。

要获得更多的技术知识,模型内部发生的事情主要是一系列矩阵乘法。您传入输入矩阵,发生乘法,然后得到结果。训练模型只是“调整”输入乘以的矩阵中的值,以最大程度地提高这些乘积的输出与标签的接近程度。如果您输入的输入矩阵与经过训练的矩阵不同,那么乘法仍然会发生,但是几乎可以肯定会得到非常错误的输出。下方没有重新排列的智能功能。