Функции обратного кодирования меток в Python - PullRequest
0 голосов
/ 18 апреля 2019

Рассмотрим следующую таблицу примеров, в которой я пытаюсь делать прогнозы на

enter image description here

Как вы можете видеть, у меня есть сочетание числовых (Num1 & Num2) и категориальных функций (Cat1 & Cat2) для прогнозирования значения, и я использую Random Лесная регрессия для этого

После прочтения файла я преобразую категориальные функции в числовые, используя LabelEncoder , например,

category_col =['Cat1', 'Cat2'] 
labelEncoder = preprocessing.LabelEncoder()

# creating a map of all the numerical values of each categorical labels.
mapping_dict={}
for col in category_col:
    df[col] = labelEncoder.fit_transform(df[col])
    le_name_mapping = dict(zip(labelEncoder.classes_, labelEncoder.transform(labelEncoder.classes_)))
    mapping_dict[col]=le_name_mapping

После преобразования я делю свой фрейм данных на набор для обучения и тестирования и делаю прогнозы, например

train_features, test_features, train_labels, test_labels = train_test_split(df, labels, test_size = 0.30)

rf = RandomForestRegressor(n_estimators = 1000)
rf.fit(train_features, train_labels)
predictions = rf.predict(test_features)

У меня вопрос, как мне изменить числовые номера Cat1 и Cat2, чтобы снова отобразить исходные категории, чтобы я мог экспортировать прогнозы обратно, например,

enter image description here

Я понимаю, что мне нужно использовать labelEncoder.inverse_transform , однако, я не могу получить правильный синтаксис для возврата текста категории, чтобы связать его с результатами.

Любая помощь приветствуется!

1 Ответ

1 голос
/ 19 апреля 2019

Быстрое решение на основе кода, который у вас уже есть:

# Invert the mapping dictionary you created
inv_mapping_dict = {cat: {v: k for k, v in map_dict.items()} for cat, map_dict in mapping_dict.items()}

# Assuming `predictions` is your resulting dataframe.
# Replace the predictions with the inverted mapping dictionary.
predictions.replace(inv_mapping_dict)

Для немного более приятного способа сделать это, вы также можете учесть ответ здесь при создании исходного словаря сопоставления:

Кодировка метки в нескольких столбцах в scikit-learn

Вместо того, чтобы использовать цикл for для столбцов вашей категории для создания словаря сопоставления, вы можете создать словарь LabelEncoders для ваших столбцов, а затем применить подгонку и инверсию столбцов сразу в начале и в конце.

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