特征的名称和顺序对预测算法有影响吗
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
假设var3
与var2
相同,因为它是X_test
中的第二列?
如果:
X_live
定义为:X_live=data['var2','var1']
会预测知道重新排序 X 以正确排列它们吗?
列的名称无关紧要,但顺序很重要。您需要确保顺序与您的训练和测试数据一致。如果您在训练数据中传入两列,您的模型将假定任何未来的输入都是按该顺序排列的那些特征。
只是一个非常简单的思想实验。想象一下,您训练了一个减去两个数字的模型。特征是 (n_1, n_2),你的输出将是 n_1 - n_2。
您的模型不处理您的列的名称(因为只传入数字),因此它了解第一列、第二列和输出之间的关系 - 即 output = col_1 - col_2
.
无论你传入什么,你得到的结果都是你传入的第一件事减去你传入的第二件事。你可以命名你传入的第一件事和你传入的第二件事无论你想要什么,但在一天结束时你仍然会得到减法的结果。
为了更专业一点,模型内部发生的主要是一系列矩阵乘法。您传入输入矩阵,进行乘法运算,然后得到结果。训练模型只是 "tunes" 您的输入乘以矩阵中的值,目的是最大化这些乘法的输出与您的标签的接近程度。如果你传入的输入矩阵与它所训练的矩阵不同,乘法仍然会发生,但你几乎肯定会得到一个非常错误的输出。下面没有智能功能重新排列。
首先回答你的问题“预测是否假设var3
与var2
相同,因为它是X_test
中的第二列?”
否;任何机器学习模型都没有任何这样的假设
您传递给拟合函数或预测的数据
功能。模型简单地看到的是一个数组,让它
是一个高阶的多维数组。它完全在
用户关注的功能。
让我们来看一个简单的分类问题,其中有 2 个组:
- 第一个是一群孩子,身高矮,体重也轻,
- 第二组是成熟的成年人,年龄、身高和体重都更高。
现在您想将以下个人归类到类中的任何一个。
Age
Height
Weight
10
120
34
任何训练有素的分类器都可以轻松地将此数据点分类为儿童组,因为年龄和体重都很小。模型现在要考虑的向量是 [ 10, 120, 34 ]
。
但是现在让我们按照以下方式对特征列重新排序 - [ 120, 10, 34 ]
。但是你知道120这个数字,你要指的是个人的身高而不是年龄!但是可以肯定的是,模型不会理解你所知道的或期望的,它必然会将点分类到成人组。
希望这能回答您的两个问题。
我的 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
假设var3
与var2
相同,因为它是X_test
中的第二列?
如果:
X_live
定义为:X_live=data['var2','var1']
会预测知道重新排序 X 以正确排列它们吗?
列的名称无关紧要,但顺序很重要。您需要确保顺序与您的训练和测试数据一致。如果您在训练数据中传入两列,您的模型将假定任何未来的输入都是按该顺序排列的那些特征。
只是一个非常简单的思想实验。想象一下,您训练了一个减去两个数字的模型。特征是 (n_1, n_2),你的输出将是 n_1 - n_2。
您的模型不处理您的列的名称(因为只传入数字),因此它了解第一列、第二列和输出之间的关系 - 即 output = col_1 - col_2
.
无论你传入什么,你得到的结果都是你传入的第一件事减去你传入的第二件事。你可以命名你传入的第一件事和你传入的第二件事无论你想要什么,但在一天结束时你仍然会得到减法的结果。
为了更专业一点,模型内部发生的主要是一系列矩阵乘法。您传入输入矩阵,进行乘法运算,然后得到结果。训练模型只是 "tunes" 您的输入乘以矩阵中的值,目的是最大化这些乘法的输出与您的标签的接近程度。如果你传入的输入矩阵与它所训练的矩阵不同,乘法仍然会发生,但你几乎肯定会得到一个非常错误的输出。下面没有智能功能重新排列。
首先回答你的问题“预测是否假设var3
与var2
相同,因为它是X_test
中的第二列?”
否;任何机器学习模型都没有任何这样的假设 您传递给拟合函数或预测的数据 功能。模型简单地看到的是一个数组,让它 是一个高阶的多维数组。它完全在 用户关注的功能。
让我们来看一个简单的分类问题,其中有 2 个组:
- 第一个是一群孩子,身高矮,体重也轻,
- 第二组是成熟的成年人,年龄、身高和体重都更高。
现在您想将以下个人归类到类中的任何一个。
Age | Height | Weight |
---|---|---|
10 | 120 | 34 |
任何训练有素的分类器都可以轻松地将此数据点分类为儿童组,因为年龄和体重都很小。模型现在要考虑的向量是 [ 10, 120, 34 ]
。
但是现在让我们按照以下方式对特征列重新排序 - [ 120, 10, 34 ]
。但是你知道120这个数字,你要指的是个人的身高而不是年龄!但是可以肯定的是,模型不会理解你所知道的或期望的,它必然会将点分类到成人组。
希望这能回答您的两个问题。