Обратное кодирование метки дает ошибку

Я закодировал свои категориальные данные в числовые данные с помощью кодировщика меток.

data['Resi'] = LabelEncoder().fit_transform(data['Resi'])

Но я, когда пытаюсь найти, как они отображаются внутри, используя

list(LabelEncoder.inverse_transform(data['Resi']))

Я получаю ошибку ниже


TypeError                                 Traceback (most recent call last)
<ipython-input-67-419ab6db89e2> in <module>()
----> 1 list(LabelEncoder.inverse_transform(data['Resi']))

TypeError: inverse_transform() missing 1 required positional argument: 'y'

Как это исправить

Пример данных

Resi
IP
IP
IP
IP
IP
IE
IP
IP
IP
IP
IP
IPD
IE
IE
IP
IE
IP
IP
IP

person NgBrandon    schedule 02.11.2017    source источник
comment
Не могли бы вы поделиться некоторыми данными? Что показывает LabelEncoder.classes_?   -  person Vivek Kumar    schedule 02.11.2017
comment
@VivekKumar, обновил рассматриваемые образцы данных   -  person NgBrandon    schedule 02.11.2017


Ответы (3)


Вы можете проверить кодировку метки:

>>> from sklearn import preprocessing
>>> le = preprocessing.LabelEncoder()
>>> le.fit([1, 2, 2, 6])
LabelEncoder()
>>> le.classes_
array([1, 2, 6])
>>> le.transform([1, 1, 2, 6])
array([0, 0, 1, 2])
>>> le.inverse_transform([0, 0, 1, 2])
array([1, 1, 2, 6])

И для вашего решения:

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder().fit(data['Resi'])
data['Resi'] = le.transform(data['Resi'])
print (data.tail())
    Resi
14     1
15     0
16     1
17     1
18     1

L = list(le.inverse_transform(data['Resi']))
print (L)
['IP', 'IP', 'IP', 'IP', 'IP', 'IE', 'IP', 'IP', 'IP', 
 'IP', 'IP', 'IPD', 'IE', 'IE', 'IP', 'IE', 'IP', 'IP', 'IP']

РЕДАКТИРОВАТЬ:

d = dict(zip(le.classes_, le.transform(le.classes_)))
print (d)
{'IE': 0, 'IPD': 2, 'IP': 1}
person jezrael    schedule 02.11.2017
comment
@jezral, как узнать, какая метка соответствует какой категории. То есть IP = 0, IPD = 1 и т. д. - person NgBrandon; 02.11.2017

Вы нигде не храните объект LabelEncoder(). Вам нужно сохранить его следующим образом:

le = LabelEncoder()

А затем позвоните fit() или transform().

import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder

ls = ['IP', 'IP', 'IP', 'IP', 'IP', 'IE', 'IP', 'IP', 'IP', 'IP', 'IP', 'IPD', 'IE', 'IE', 'IP', 'IE', 'IP', 'IP', 'IP']

data = pd.DataFrame(np.array(ls).reshape(-1,1), columns=['Resi'])

le = LabelEncoder()
data['Resi'] = le.fit_transform(data['Resi'])

df['resi'] = LabelEncoder().fit_transform(df['resi'])
list(le.inverse_transform(data['Resi']))

Out: 
['IP',
 'IP',
 'IP',
 'IP',
 'IP',
 'IE',
 'IP',
 'IP',
 'IP',
 'IP',
 'IP',
 'IPD',
 'IE',
 'IE',
 'IP',
 'IE',
 'IP',
 'IP',
 'IP']
person Vivek Kumar    schedule 02.11.2017
comment
Как я могу найти, какая метка соответствует какой категории - person NgBrandon; 02.11.2017

person    schedule
comment
Пожалуйста, всегда помещайте свой ответ в контекст, а не просто вставляйте код. Подробнее см. здесь. - person gehbiszumeis; 05.06.2020