特征的名称和顺序对预测算法有影响吗

Does name and order of Features matter for prediction algorithm

我的 X_test 数据框的列的 names/order 是否必须与我用于拟合的 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 完全不同的变量。

是否predict假设var3var2相同,因为它是X_test中的第二列?

如果:

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

会预测知道重新排序 X 以正确排列它们吗?

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

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

您的模型不处理您的列的名称(因为只传入数字),因此它了解第一列、第二列和输出之间的关系 - 即 output = col_1 - col_2 .

无论你传入什么,你得到的结果都是你传入的第一件事减去你传入的第二件事。你可以命名你传入的第一件事和你传入的第二件事无论你想要什么,但在一天结束时你仍然会得到减法的结果。

为了更专业一点,模型内部发生的主要是一系列矩阵乘法。您传入输入矩阵,进行乘法运算,然后得到结果。训练模型只是 "tunes" 您的输入乘以矩阵中的值,目的是最大化这些乘法的输出与您的标签的接近程度。如果你传入的输入矩阵与它所训练的矩阵不同,乘法仍然会发生,但你几乎肯定会得到一个非常错误的输出。下面没有智能功能重新排列。

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

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

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

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

现在您想将以下个人归类到类中的任何一个。

Age Height Weight
10 120 34

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

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