【问题标题】:NaN giving ValueError in OneHotEncoder in scikit-learnNaN 在 scikit-learn 的 OneHotEncoder 中给出 ValueError
【发布时间】:2020-02-01 22:37:29
【问题描述】:

这是我的代码

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 的用途。

【问题讨论】:

标签: machine-learning scikit-learn


【解决方案1】:

当测试集在训练集中有看不见的分类值时,此选项提供了一个解决方案。如果您将“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)

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

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2018-11-01
    • 2016-12-28
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 2020-10-06
    • 2020-02-25
    相关资源
    最近更新 更多