python - 特征的名称和顺序对预测算法是否重要
问题描述
我的 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']
wherevar3
可能是与 完全不同的变量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
.
不管你传入什么,你都会得到你传入的第一件事减去你传入的第二件事的结果。你可以将你传入的第一件事和你传入的第二件事命名为你想要的任何东西,但是在一天结束时,您仍然会得到减法的结果。
为了获得更多技术性,模型内部发生的主要是一系列矩阵乘法。你传入输入矩阵,乘法发生,你得到结果。训练模型只是“调整”您的输入乘以矩阵中的值,目的是最大化这些乘法的输出与您的标签的接近程度。如果你传入的输入矩阵与它所训练的矩阵不同,乘法仍然会发生,但你几乎肯定会得到一个非常错误的输出。下面没有智能功能重新排列。
推荐阅读
- python - Tensorflow:使用减法门自定义 LSTM 单元
- ios - 如何检查主机服务器是否支持 ResumeData
- ios - NotificationCenter中如何使用Struct作为观察者
- flutter - 如何在 Flutter 中创建登录墙视图
- node.js - NodeJS Lambda函数不会正常循环记录
- rust - 为什么我的自定义格式化程序实现忽略了宽度?
- laravel - SQLSTATE[HY000]:一般错误:1215无法在laravel中添加外键约束
- android - 设置进度条位置
- java - 为什么 Android 应用程序因 UnsatisfiedLinkError 而崩溃?
- javascript - 更改 Vuetify v-card 图像的高度?