这是我的代码

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)


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

希望这可以帮助

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

10-12 21:14