【问题标题】:Classification with sk-learn: handle missing categorical features at prediction使用 sk-learn 进行分类:在预测时处理缺失的分类特征
【发布时间】:2015-05-06 08:53:09
【问题描述】:

在我的项目中,我训练了一个 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     |

预测的特征集不符合模型所需的特征集,因为它缺少“黑色”和“红色”特征。我想不出一个很好的方法来解决这个问题。

这是错误方法造成的错误吗?

【问题讨论】:

    标签: python scikit-learn missing-features


    【解决方案1】:

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

    【讨论】:

    • 抱歉回复晚了。问题是,我挑选了经过训练的模型供以后使用。使用 OneHotEncode,我需要挑选另一个对象来保存信息。这意味着当我进行预测时,我需要从文件系统中引导两个数据,这是在时间非常关键的情况下,并且可能会在多达 1000 个其他预测之后运行。真正好的是,如果您可以直接获得模型的特征列表,无论如何都必须将其保存在那里。但这似乎没有办法
    • 不,特征列表没有保存在模型中。模型如何知道你输入了哪些特征? OneHotEncoder 应该很小,你可以把它放在同一个泡菜文件中。这实际上不应该产生任何开销。
    猜你喜欢
    • 2015-01-12
    • 2014-02-17
    • 2021-03-26
    • 2021-01-12
    • 2017-09-19
    • 2022-01-17
    • 2015-05-24
    • 2015-12-13
    • 2015-11-25
    相关资源
    最近更新 更多