这是我的代码
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/