Указание порядка кодирования в Ordinal Encoder - PullRequest
0 голосов
/ 14 ноября 2018

Я использую OrdinalEncoder и не могу найти способ указать порядок кодирования.Я имею в виду, что у меня есть такие категории, как «плохой», «средний», «хороший», которые, естественно, имеют порядок.Но я хочу указать этот порядок, так как кодировщик не может сам знать значение категорий.Действительно, при использовании категории = 'auto' некоторые категории кодируются в неправильном направлении относительно других, и я не хочу этого, потому что я знаю, по крайней мере для некоторых из них, является ли корреляция положительной или отрицательной.

Но указание категорий приводит к ошибке во время подгонки:

Объект 'OrdinalEncoder' не имеет атрибута handle_unknown.

Если я не указываю категории,процесс подгонки идет хорошо, и я не понимаю, почему (после подгонки атрибут "Categories_" показывает мне те же категории, которые я ввожу вручную, когда пытаюсь их указать).

Я указываю категории в виде списка списков.Вот что происходит без указания категорий.

import pandas as pd
from sklearn.preprocessing import OrdinalEncoder

df = pd.DataFrame(np.array([['a','a','a'], ['b','c','c']]).transpose())
oE = OrdinalEncoder(categories='auto')
oE.fit(df)

print(oE.categories_)

В результате: [array(['a'], dtype=object), array(['b', 'c'], dtype=object)]

Явное указание категорий:

df = pd.DataFrame(np.array([['a','a','a'], ['b','c','c']]).transpose())
oE = OrdinalEncoder(categories=[['a'], ['b', 'c']])
oE.fit(df)

В результате возникает эта ошибка:

Трассировка (последний последний вызов):

Файл "", строка 3, в oE.fit (df)

Файл "/ home/alessio/anaconda3/lib/python3.6/site-packages/sklearn/preprocessing/_encoders.py ", строка 774, в нужном состоянии ._fit (X)

File" / home / alessio / anaconda3 /lib / python3.6 / site-packages / sklearn / preprocessing / _encoders.py ", строка 85, в _fit if self.handle_unknown == 'error':

AttributeError: 'Объект OrdinalEncoder' не имеет атрибута 'handle_unknown '

1 Ответ

0 голосов
/ 14 ноября 2018

У меня была такая же проблема. Это ошибка в scikit-learn, уже исправленная и добавленная в версию 0.20.1, которая до сих пор не выпущена. https://github.com/scikit-learn/scikit-learn/issues/12365

Я решил это временно, скопировав исправленный _encoders.py в мой проект и используя.

from _encoders import OrdinalEncoder
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...