NaN предоставляя ValueError в OneHotEncoder в scikit-learn - PullRequest
0 голосов
/ 03 октября 2019

Вот мой код

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 / generate / sklearn.preprocessing.OneHotEncoder. html ) казалось, что для этого предназначен handle_unknown.

1 Ответ

0 голосов
/ 03 октября 2019

Эта опция дает решение, когда тестовый набор имеет невиданное категориальное значение в наборе поездов. Если вы добавите «Стив Стивенсон» в набор тестов, он не вернет ошибку, он вернет столбец со всеми нулями.

    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 на некоторую категорию,как «неизвестно».

Надеюсь, это поможет

...