【发布时间】:2020-10-06 02:37:33
【问题描述】:
我最近开始学习 Python,以便使用机器学习方法为研究项目开发预测模型。我有一个由数字和分类数据组成的大型数据集。数据集有很多缺失值。我目前正在尝试使用 OneHotEncoder 对分类特征进行编码。当我阅读 OneHotEncoder 时,我的理解是对于缺失值 (NaN),OneHotEncoder 会将 0 分配给所有特征的类别,如下所示:
0 Male
1 Female
2 NaN
应用 OneHotEncoder 后:
0 10
1 01
2 00
但是,当运行以下代码时:
# Encoding categorical data
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer([('encoder', OneHotEncoder(handle_unknown='ignore'), [1])],
remainder='passthrough')
obj_df = np.array(ct.fit_transform(obj_df))
print(obj_df)
我收到错误 ValueError: Input contains NaN
所以我猜我之前对 OneHotEncoder 如何处理缺失值的理解是错误的。 有没有办法让我获得上述功能?我知道在编码之前插补缺失值可以解决这个问题,但我不愿意这样做,因为我正在处理医学数据,并且担心插补可能会降低模型的预测准确性。
我发现这个question 是相似的,但答案没有提供关于如何处理 NaN 值的足够详细的解决方案。
请告诉我你的想法,谢谢。
【问题讨论】:
-
谢谢@BenReiniger,很高兴知道开发人员同意 OneHotEncoder 应该处理缺失值! :)
标签: python machine-learning scikit-learn