Функции обратного кодировщика меток в Python

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

Функции обратного кодировщика меток в Python

Как видите, у меня есть сочетание числового (Число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, чтобы снова показать исходные категории, чтобы я мог экспортировать прогнозы обратно, например так

Функции обратного кодировщика меток в Python

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

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
1 261
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Быстрое решение, основанное на уже имеющемся коде:

# 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 для своих столбцов, а затем применить подгонку и инверсию столбцов сразу в начале и в конце.

Спасибо, у меня был вопрос об этой ссылке, которую вы разместили, метод, показанный там, кодирует ВСЕ переменные в моем фрейме данных. Как я могу выделить два столбца, которые мне нужны, и просто закодировать их с помощью метода?

ThatRiddimGuy 19.04.2019 02:40

Другие вопросы по теме