Рассмотрим следующий пример таблицы, по которой я пытаюсь делать прогнозы.
Как видите, у меня есть сочетание числового (Число1 и Число2) и категориальных признаков (Категория 1 и Кат2) для прогнозирования значения, и для этого я использую регрессию случайного леса.
Прочитав файл, я конвертирую категориальные функции в числовые, используя 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, чтобы снова показать исходные категории, чтобы я мог экспортировать прогнозы обратно, например так
Я понимаю, что мне нужно использовать labelEncoder.inverse_transform, однако я не могу правильно понять синтаксис, чтобы вернуть текст категории для привязки к результатам.
Любая помощь приветствуется!






Быстрое решение, основанное на уже имеющемся коде:
# 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 для своих столбцов, а затем применить подгонку и инверсию столбцов сразу в начале и в конце.
Спасибо, у меня был вопрос об этой ссылке, которую вы разместили, метод, показанный там, кодирует ВСЕ переменные в моем фрейме данных. Как я могу выделить два столбца, которые мне нужны, и просто закодировать их с помощью метода?