如何使用 scikit learn 确保测试集和训练集具有相同的功能?

Posted

技术标签:

【中文标题】如何使用 scikit learn 确保测试集和训练集具有相同的功能?【英文标题】:How to ensure that both test and train sets have the same features using scikit learn? 【发布时间】:2020-05-28 09:29:28 【问题描述】:

我正在尝试预测再次出现的票证的看不见的数据?我有很多分类变量。这些变量可以相同或重复。我如何确保功能相同?功能可能会因传入的数量而异?

y=predict_pi.P_I
X=predict_pi.drop('P_I',1)
X=pd.get_dummies(X)
print(X)
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42)

logReg=LogisticRegression()
logReg.fit(X_train,y_train)
pred_pi=logReg.predict(X_test)
print(pred_pi)
print(accuracy_score(y_test,pred_pi))
test=pd.get_dummies(test)
print(test)
pred_test=logReg.predict(test)

I get the error: ValueError: X has 159 features per sample; expecting 161

这两列是具有分类值的列,特征取决于它们。功能可能会增加或减少。

AUDITOR REASON_CODE 

任何建议都会有所帮助。

训练和测试数据集中的行数和列数如下。

train - (599939, 9) test - (130314, 8)

训练数据为 6 个月,测试数据为上个月。 问候, 任。

【问题讨论】:

【参考方案1】:

您可以在开始回归之前将这些列添加到测试和训练中,并将它们的值分配为0

extra_cols_train = [i for i in list(test) if i not in list(X)]
extra_cols_test = [i for i in list(X) if i not in list(test)]

X = X.reindex(columns=X.columns.tolist() + extra_cols_train)
X[extra_cols_train] = 0

test = test.reindex(columns=test.columns.tolist() + extra_cols_test)
test[extra_cols_test] = 0

【讨论】:

以上是关于如何使用 scikit learn 确保测试集和训练集具有相同的功能?的主要内容,如果未能解决你的问题,请参考以下文章

多处理 scikit-learn

在 Scikit-Learn 分类器上使用交叉验证

如何获取 Scikit-learn 的 svm 中的训练误差?

在 scikit-learn 中使用啥估算器?

使用 Pandas 为 Scikit-Learn 准备 CSV 文件数据?

python机器学习工具包scikit-learn