gpt4 book ai didi

python - 使用 scikit-learn OneHotEncoder 时如何处理分类数据中的缺失值 (NaN)?

转载 作者:行者123 更新时间:2023-12-04 11:22:32 25 4
gpt4 key购买 nike

我最近开始学习 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)


我收到错误 值错误:输入包含 NaN

所以我猜我之前对 OneHotEncoder 如何处理缺失值的理解是错误的。
有没有办法让我获得上述功能?我知道在编码之前插补缺失值将解决这个问题,但我不愿意这样做,因为我正在处理医疗数据,并担心插补可能会降低我的模型的预测准确性。

我找到了这个 question这是相似的,但答案没有提供关于如何处理 NaN 值的足够详细的解决方案。

让我知道你的想法,谢谢。

最佳答案

您需要先估算缺失值。您可以定义一个 Pipeline 使用 SimpleImputer 进行插补步骤设置 most_frequent例如,在 OneHot 编码之前的策略:

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
from sklearn.impute import SimpleImputer
from sklearn.pipeline import Pipeline

categorical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
('encoder', OneHotEncoder(handle_unknown='ignore'))])

preprocessor = ColumnTransformer(
transformers=[
('cat', categorical_transformer, [0])
])
df = pd.DataFrame(['Male', 'Female', np.nan])
preprocessor.fit_transform(df)
array([[0., 1.],
[1., 0.],
[1., 0.]])

关于python - 使用 scikit-learn OneHotEncoder 时如何处理分类数据中的缺失值 (NaN)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62409303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com