如何预测特征数量与测试集可用特征数量不匹配的情况? [重复]

我使用 pandas 的 get_dummies 函数将分类变量转换为虚拟/指示变量,这会在数据集中引入新的特征。然后我们将这个数据集拟合/训练到模型中。

由于 X_trainX_test 的维度保持相同,当我们对测试数据进行预测时,它可以很好地处理测试数据 X_test

现在假设我们有另一份 csv 文件中的测试数据(具有未知输出)。当我们使用 get_dummies 转换这组测试数据时,生成的数据集可能没有与我们训练模型时相同的特征数量。后来当我们用这个数据集使用我们的模型时,它会失败,因为测试集中的特征数量与模型的特征数量不匹配。

有什么办法可以处理这种情况吗?

代码:

import pandas as pdfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.model_selection import train_test_split# 加载数据集in_file = 'train.csv'full_data = pd.read_csv(in_file)outcomes = full_data['Survived']features_raw = full_data.drop('Survived', axis = 1)features = pd.get_dummies(features_raw)features = features.fillna(0.0)X_train, X_test, y_train, y_test = train_test_split(features, outcomes, test_size=0.2, random_state=42)model = DecisionTreeClassifier(max_depth=50,min_samples_leaf=6,min_samples_split=2)model.fit(X_train,y_train)y_train_pred = model.predict(X_train)#print (X_train.shape)y_test_pred = model.predict(X_test)from sklearn.metrics import accuracy_scoretrain_accuracy = accuracy_score(y_train, y_train_pred)test_accuracy = accuracy_score(y_test, y_test_pred)print('训练准确率为', train_accuracy)print('测试准确率为', test_accuracy)# 再次进行以测试另一组数据test_data = 'test.csv'test_data1 = pd.read_csv(test_data)test_data2 = pd.get_dummies(test_data1)test_data3 = test_data2.fillna(0.0)print(test_data2.shape)print (model.predict(test_data3))

回答:

似乎之前已经有人问过类似的问题,但最有效/最简单的方法是按照 Thibault Clement这里 描述的方法进行操作

# 获取训练测试中缺失的列missing_cols = set( X_train.columns ) - set( X_test.columns )# 在测试集中添加缺失的列,默认值设为0for c in missing_cols:    X_test[c] = 0# 确保测试集中的列顺序与训练集中的列顺序相同X_test = X_test[X_train.columns]

还值得注意的是,您的模型只能使用它训练时使用的特征,因此如果 X_test 相对于 X_train 有多余的列而不是少列,那么在预测之前必须删除这些多余的列。

Related Posts

为什么我们在K-means聚类方法中使用kmeans.fit函数?

我在一个视频中使用K-means聚类技术,但我不明白为…

如何获取Keras中ImageDataGenerator的.flow_from_directory函数扫描的类名?

我想制作一个用户友好的GUI图像分类器,用户只需指向数…

如何查看每个词的tf-idf得分

我试图了解文档中每个词的tf-idf得分。然而,它只返…

如何修复 ‘ValueError: Found input variables with inconsistent numbers of samples: [32979, 21602]’?

我在制作一个用于情感分析的逻辑回归模型时遇到了这个问题…

如何向神经网络输入两个不同大小的输入?

我想向神经网络输入两个数据集。第一个数据集(元素)具有…

逻辑回归与机器学习有何关联

我们正在开会讨论聘请一位我们信任的顾问来做机器学习。一…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注