【发布时间】:2022-02-10 02:43:43
【问题描述】:
我正在处理一个带有非常稀疏标记数据的机器学习项目。有几个分类特征,导致特征之间大约有一百个不同的类别。
例如:
0 red
1 blue
2 <missing>
color_cat = pd.DataFrame(['red', 'blue', np.NAN])
color_enc = OneHotEncoder(sparse=True, handle_unknown='ignore')
color_one_hot = color_enc.fit_transform(color_cat)
在我通过 scikit 的OneHotEncoder 输入这些数据后,我希望丢失的数据被编码为00,因为文档指出handle_unknown='ignore' 导致编码器返回一个全零数组。用 [SimpleImputer][1] 替换其他值对我来说不是一个选项。
我的期望:
0 10
1 01
2 00
相反,OneHotEncoder 将缺失值视为另一个类别。
我得到了什么:
0 100
1 010
2 001
我看过相关问题:How to handle missing values (NaN) in categorical data when using scikit-learn OneHotEncoder? 但是解决方案对我不起作用。我明确要求一个零向量。
【问题讨论】:
-
只需将 nan 替换为 'unknown' 然后 labelencoder fit_transform 您的数据框类别列或使用 pd.get_dummies
-
另请参阅
OneHotEncoder的category_encoders包版本,它可以选择handle_missing='value'来做你想做的事。 contrib.scikit-learn.org/category_encoders/onehot.html -
也是一个有趣的解决方案,但我不想只为一个功能安装另一个库。但注意未来!谢谢你,本。
标签: python pandas machine-learning scikit-learn data-science