machine-learning - NaN 在 scikit-learn 的 OneHotEncoder 中给出 ValueError

标签 machine-learning scikit-learn

这是我的代码

import pandas as pd
import numpy as np
from sklearn.preprocessing import OneHotEncoder

train = pd.DataFrame({
        'users':['John Johnson','John Smith','Mary Williams']
})
test = pd.DataFrame({
        'users':[None,np.nan,'John Smith','Mary Williams']
})

ohe = OneHotEncoder(sparse=False,handle_unknown='ignore')
ohe.fit(train)
train_transformed = ohe.fit_transform(train)

test_transformed = ohe.transform(test)
print(test_transformed)

我希望 OneHotEncoder 能够处理测试数据集中的 np.nan,因为

handle_unknown='ignore'

但它给出了 ValueError。但它能够处理 None 值。为什么它失败了?我该如何解决它(除了 Imputer 之外)?

来自文档 ( https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html ) 看来这就是handle_unknown 的用途。

最佳答案

当测试集在训练集中具有看不见的分类值时,此选项提供了解决方案。如果您将“steve stevenson”放入测试集中,它不会返回错误,它会返回全零的列。

    train = pd.DataFrame({
        'users':['John Johnson','John Smith','Mary Williams']
})
test = pd.DataFrame({
        'users':['John Smith','Mary Williams', 'Steve Stevenson']
})

ohe = OneHotEncoder(sparse=False, handle_unknown = 'ignore')
ohe.fit(train)

test_transformed = ohe.transform(test)
print(test_transformed)

“None”问题的解决方案是将“None”值替换为某些类别,例如“未知”。

希望这有帮助

关于machine-learning - NaN 在 scikit-learn 的 OneHotEncoder 中给出 ValueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58222008/

相关文章:

python - sklearn 管道在应用于测试集时不记得其状态

python - cross_val_score 和 StratifiedKFold 给出不同的结果

python - sklearn LogisticRegression 和更改分类的默认阈值

python - scikit-learn 的 BallTree 出现类型错误

machine-learning - 开源神经网络库

algorithm - 相似矩阵 -> 特征向量算法?

python - 使用机器学习对大文本进行分类

python - sklearn 估计器管道的参数无效

machine-learning - 流水线生产 oneHotEncoding

machine-learning - 与教育有关的机器学习数据集