Я получаю следующую ошибку при вызове inverse_transform LabelEncoder:
Traceback (most recent call last):
File "Test.py", line 31, in <module>
inverted = label_encoder.inverse_transform(integer_encoded['DEST'])
File "...\Python\Python36\lib\site-packages\sklearn\preprocessing\label.py", line 283, in inverse_transform
return self.classes_[y]
TypeError: only integer scalar arrays can be converted to a scalar index
Код, который генерирует эту ошибку, следующий:
import pandas as pd
import numpy as np
from collections import defaultdict
from sklearn import preprocessing
import bisect
data_cat = {'ORG': ['A', 'B', 'C', 'D'],
'DEST': ['A', 'E', 'F', 'G'],
'OP': ['F1', 'F1', 'F1', 'F2']}
data_cat = pd.DataFrame(data_cat)
#retain all columns LabelEncoder as dictionary.
label_encoder_dict = defaultdict(preprocessing.LabelEncoder)
integer_encoded = data_cat.apply(lambda x: label_encoder_dict[x.name].fit_transform(x))
print("Integer encoded: ")
print(integer_encoded)
#add a UNK class that will be used for the unseen values from the test dataset
for key, le in label_encoder_dict.items():
le_classes = np.array(le.classes_).tolist()
bisect.insort_left(le_classes, 'UNK')
le.classes_ = le_classes
label_encoder = label_encoder_dict['DEST']
print(label_encoder.classes_)
print(integer_encoded['DEST'])
print(type (integer_encoded['DEST']))
inverted = label_encoder.inverse_transform(integer_encoded['DEST'])
print(inverted)
Если я удаляю цикл forэто добавляет класс UNK к каждому LabelEncoder, все работает нормально.Я не понимаю, почему добавление нового класса влияет на вызов inverse_transform.
Спасибо за любую помощь или руководство.