sklearn.preprocessing.OneHotEncoder: использование drop и handle_unknown = 'ignore' - PullRequest
1 голос
/ 31 января 2020

У меня есть некоторые pandas.Series - s, ниже - которые я хочу горячим кодированием. В ходе исследований я обнаружил, что уровень 'b' не важен для моей задачи прогнозного моделирования. Я могу исключить его из своего анализа следующим образом:

import pandas as pd
from sklearn.preprocessing import OneHotEncoder

s = pd.Series(['a', 'b', 'c']).values.reshape(-1, 1)

enc = OneHotEncoder(drop=['b'], sparse=False, handle_unknown='error')
enc.fit_transform(s)
# array([[1., 0.],
#        [0., 0.],
#        [0., 1.]])
enc.get_feature_names()
# array(['x0_a', 'x0_c'], dtype=object)

Но когда я go преобразую новую серию, содержащую как 'b', так и новый уровень, 'd', я получаю ошибку :

new_s = pd.Series(['a', 'b', 'c', 'd']).values.reshape(-1, 1)
enc.transform(new_s)

Traceback (последний вызов был последним): файл "", строка 1, в файле "/ Пользователи / пользователь / Документы / активы / envs / data-science / venv / lib / python3 .7 / site-packages / sklearn / preprocessing / _encoders.py ", строка 390, в преобразовании X_int, X_mask = self._transform (X, файл handle_unknown = self.handle_unknown)" / Users / пользователь / Documents / assets /envs/data-science/venv/lib/python3.7/site-packages/sklearn/preprocessing/_encoders.py ", строка 124, в _transform повысить ValueError (msg) ValueError: найдены неизвестные категории ['d'] в столбце 0 во время преобразования

Этого следовало ожидать, поскольку я установил handle_unknown='error' выше. Тем не менее, я хотел бы полностью игнорировать все классы, кроме ['a', 'c'], как на этапе подгонки, так и на последующих этапах преобразования. Я попробовал это:

enc = OneHotEncoder(drop=['b'], sparse=False, handle_unknown='ignore')
enc.fit_transform(s)
enc.transform(new_s)

Traceback (последний вызов был последним): файл "", строка 1, в файле "/ Пользователи / пользователь / Документы / активы / envs / data-science / venv /lib/python3.7/site-packages/sklearn/preprocessing/_encoders.py ", строка 371, в файле fit_transform self._validate_keywords ()" / Users / пользователь / Documents / assets / envs / data-science / venv /lib/python3.7/site-packages/sklearn/preprocessing/_encoders.py ", строка 289, в _validate_keywords" handle_unknown должно быть 'error', если параметр сброса равен "ValueError: handle_unknown должно быть" error ', когда задан параметр drop, так как обе будут создавать все категории, которые равны нулю.

Кажется, этот шаблон не поддерживается в scikit-learn. Кто-нибудь знает шаблон, совместимый с scikit-learn, для выполнения sh этой задачи?

...