使用sk-learn进行分类:在预测时处理缺少的分类特征

时间:2015-05-06 08:53:10

标签: python scikit-learn missing-features

我的项目是我培训BaggingClassifier。由于使用的数据包含分类功能,我使用pandas框架(get_dummies)对它们进行编码。在此之后,我训练分类器。

现在我想做一个预测。它返回了这个错误:

ValueError: Number of features of the model must match the input. Model n_features is 12 and input n_features is 6.

我明白为什么会收到此错误。 模型所需的功能:12

给出预测数据集内的特征:6

由于编码,在这种情况下,训练数据集扩展到12个特征。 我用于预测的编码数据只有6个特征,因为它只是一行数据,在编码过程中根本没有传播。

此示例显示了问题:

原始训练数据集

Age| Color  
35 |'Orange'
55 |'Black' 
75 |'Red' 

pandas get_dummies:

X                              
Age| Orange | Black| Red       
35 | 1      | 0    | 0         
55 | 0      | 1    | 0         
75 | 0      | 0    | 1         

预测数据集

X
Age| Orange|       
35 | 1     |

预测的功能集并不适合模型所需的设置,因为它错过了功能" black"和"红色"。我想不出如何解决这个问题的好方法。

这是错误做法的错误吗?

1 个答案:

答案 0 :(得分:0)

对于此应用程序,您应该尝试sklearn.preprocessing.OneHotEncoder。它基本上与pandas中的虚拟变量相同,但是当您在训练数据上调用fit时,它会记住哪些值在哪里以及哪些列对应。如果您然后transform您的测试数据,它将创建一个具有相同数量的训练数据功能的数组。