Корреляция с целевой переменной для регрессионной задачи

Вопрос или проблема

Учитывая следующий датафрейм

   age       job  salary
0    1    Doctor     100
1    2  Engineer     200
2    3    Lawyer     300    
...

с age как числовым, job как категориальным, я хочу протестировать корреляцию со зарплатой, с целью выбора признаков (возраст и/или работа) для предсказания зарплаты (регрессионная задача). Могу ли я использовать следующий API из sklearn (или другой API)

sklearn.feature_selection.f_regression
sklearn.feature_selection.mutual_info_regression

для этого тестирования? Если да, то какой правильный метод и синтаксис для проверки корреляции?

Следующий код набора данных

df=pd.DataFrame({"age":[1,2,3],"job":["Doctor","Engineer","Lawyer"],"salary":[100,200,300]})

Вы можете использовать mutual_info_regression как для непрерывных, так и для дискретных признаков. Но сначала закодируйте вашу job вручную или с использованием LabelEncoder. Затем получите оценку MI, указав индекс job (здесь, $1$):

X, y = df.drop(columns="salary"), df['salary']
X['job'] =  # закодируйте этот признак
mutual_info_regression(X, y, discrete_features=[1])

Ответ или решение

Чтобы определить корреляцию между признаками (в данном случае возраст и работа) и целевой переменной (зарплатой) в задаче регрессии, можно использовать функции из модуля sklearnmutual_info_regression и f_regression. Однако важно учитывать, что работа (job) является категориальным признаком, который нужно сначала преобразовать в числовой формат.

Пошаговое руководство

  1. Предобработка данных:

    • Прежде всего, необходимо закодировать категориальный признак «работа». Для этого можно воспользоваться LabelEncoder из библиотеки sklearn. Это преобразует категориальные данные в числовые, что позволит корректно использовать метод mutual_info_regression.
  2. Регрессионные методы:

    • Используем mutual_info_regression, так как он подходит как для дискретных, так и для непрерывных переменных.
    • Метод f_regression можно также использовать, но он больше ориентирован на линейную зависимость, в то время как mutual_info_regression позволяет выявлять и нелинейные связи.

Пример кода

import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.feature_selection import mutual_info_regression

# Создание DataFrame
df = pd.DataFrame({
    "age": [1, 2, 3],
    "job": ["Doctor", "Engineer", "Lawyer"],
    "salary": [100, 200, 300]
})

# Предобработка данных - кодирование категориального признака
le = LabelEncoder()
df['job'] = le.fit_transform(df['job'])

# Разделение данных на признаки и целевую переменную
X = df.drop(columns="salary")
y = df['salary']

# Расчет взаимной информации
mi_scores = mutual_info_regression(X, y, discrete_features=[1])  # 1 - это индекс колонки 'job'
print("Scores of Mutual Information:", mi_scores)

Пояснения:

  • LabelEncoder преобразует категориальный признак в числовой формат. Это важно, так как модели машинного обучения не могут обрабатывать строковые данные напрямую.
  • mutual_info_regression позволяет оценить взаимную информацию между признаками и целевой переменной. В данном случае, мы явно указываем, что job — это дискретный признак, передавая discrete_features=[1], где 1 — это индекс столбца с работой.

Заключение

Методы mutual_info_regression и f_regression предоставляют полезные инструменты для оценки корреляции между признаками и целевой переменной в задачах регрессии. Однако mutual_info_regression более универсален, так как может обрабатывать как непрерывные, так и дискретные переменные. Следуя приведенным шагам, вы сможете эффективно определить значимость каждого из признаков для предсказания зарплаты.

Оцените материал
Добавить комментарий

Капча загружается...