Оптимизация анализа данных с помощью SelectKBest Feature Selection

Оглавление:

Что такое выбор признаков?

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

Раньше я находил оценку MI (взаимной информации) между функцией и целевой переменной отдельно, а затем выбирал первые N переменных на следующем шаге для контролируемых моделей.

#using mutual_info_classif for classification problem MI
from sklearn.feature_selection import mutual_info_classif

mi_scores = mutual_info_classif(X, y)
mi_scores = pd.Series(mi_scores, name="MI Scores", index=X.columns)
mi_scores = mi_scores.sort_values(ascending=False)

mi_scores # show a few features with their MI scores

#picking up top 7 features after seeing the score
#assigning the features under a list

features=['thall','caa','cp','oldpeak','exng','chol','thalachh']
X= df[features]

Я обнаружил, что этот метод отнимает много времени, затем начал искать другие варианты, а затем обнаружил, что SelectKBest отлично справляется с этой задачей!

Что такое SelectKBest?

SelectKBest — один из наиболее часто используемых методов выбора объектов.

SelectKBest — это тип метода выбора признаков на основе фильтров в машинном обучении.

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

SelectKBest использует статистические тесты, такие как критерий хи-квадрат, F-критерий ANOVA или показатель взаимной информации, для оценки и ранжирования функций на основе их связи с выходной переменной. Затем он выбирает K функций с наивысшими оценками, которые будут включены в окончательное подмножество функций.

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

from sklearn.feature_selection import SelectKBest, mutual_info_regression

# Using mutual_info_regression as score_func and selecting top 5 features
selector = SelectKBest(score_func=mutual_info_regression, k=5)
selector.fit(X, y)

SelectKBest имеет два параметра: функцию оценки и k.

Функция оценки используется для оценки важности функции. У нас есть различные типы функций оценки.

Некоторые из часто используемых функций score_func в SelectKBest:

  1. f_regression: используется для задач линейной регрессии и вычисляет F-значение между функцией и целью.
  2. mutual_info_regression: Он используется для задач регрессии и вычисляет взаимную информацию между двумя случайными величинами.
  3. f_classif: Он используется для задач классификации и вычисляет F-значение ANOVA между функцией и целью.
  4. mutual_info_classif: Он используется для задач классификации и вычисляет взаимную информацию между двумя дискретными переменными.
  5. chi2: Он используется для задач классификации и вычисляет статистику хи-квадрат между каждой функцией и целью.
  6. SelectPercentile: используется для выбора X% самых высоких функций на основе score_func.

K — это числовое значение, которое представляет наибольшее количество функций, которые необходимо выбрать. В приведенном выше примере мы выбираем 5 лучших

Как выбрать правильный score_func?

Здесь возникает вопрос, как подобрать правильный score_func для данной модели прогнозирования? Он выбирается на основе типов переменных в данных, которые классифицируются как входные и целевые переменные. Переменные могут быть числовыми или категориальными.

Регрессия

f_regression и mutual_info_regressionможно использовать для задач регрессии.

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

Если вы работаете с числовыми данными и хотите решить задачу регрессии, то f_regression может быть хорошим выбором. Эта функция оценки вычисляет F-значение между каждой функцией и целью, где высокая оценка указывает на сильную связь между функцией и целью.

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

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

from sklearn.feature_selection import SelectKBest, f_regression, mutual_info_regression

# Using f_regression
selector = SelectKBest(score_func=f_regression, k=5)
selector.fit(X, y)
print(selector)


# Using mutual_info_regression
selector = SelectKBest(score_func=mutual_info_regression, k=5)
selector.fit(X, y)
print(selector)

Классификация

Для классификации наиболее часто используемой функцией оценки является chi_2,mutual_info_classif и f_classif.

  1. chi_2: используется для проверки независимости между двумя категориальными переменными. При выборе функций он вычисляет статистику хи-квадрат между каждой функцией и целевой переменной. Характеристики, которые сильно коррелируют с целевой переменной, будут иметь более высокие оценки.
  2. mutual_info_classif: Он основан на концепции взаимной информации, которая измеряет количество информации, разделяемой между двумя переменными. Он вычисляет взаимную информацию между каждой функцией и целевой переменной. Признаки, обладающие высокой информативностью по отношению к целевой переменной, будут иметь высокие оценки.
  3. f_classif: Он основан на ANOVA (дисперсионном анализе). Он вычисляет F-значение между каждой функцией и целевой переменной, которая измеряет линейную зависимость между двумя переменными. Функции, сильно зависящие от целевой переменной, будут иметь высокие оценки.

Как правило, вам следует выбирать функцию оценки в зависимости от характера ваших данных и типа проблемы, которую вы пытаетесь решить.

Если ваши данные состоят только из категориальных переменных, «chi2» будет хорошим выбором. Если ваши данные состоят как из категориальных, так и из числовых переменных, лучше выбрать mutual_info_classif. Если у вас есть числовые переменные и вы ищете линейную зависимость между функциями и целевой переменной, хорошим выбором будет f_classif.

from sklearn.feature_selection import SelectKBest, chi2, mutual_info_classif, f_classif

# select top 2 features using chi2
selector = SelectKBest(chi2, k=2)
X_new = selector.fit_transform(X, y)
print(X_new)

# select top 2 features using mutual_info_classif
selector = SelectKBest(mutual_info_classif, k=2)
X_new = selector.fit_transform(X, y)
print(X_new)

# select top 2 features using f_classif
selector = SelectKBest(f_classif, k=2)
X_new = selector.fit_transform(X, y)
print(X_new)

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

Краткое содержание

  1. SelectKBest — это основанные на фитинге методы выбора функций, используемые в контролируемых моделях.
  2. Реализация SelectKBest
  3. Если вы работаете с числовыми данными и хотите решить задачу регрессии, то f_regression может быть хорошим выбором.
  4. Если вы работаете с категориальными или смешанными данными и хотите решить задачу регрессии, то mutual_info_regression может быть лучшим выбором.
  5. Если ваши данные состоят только из категориальных переменных и вы хотите выполнить задачу классификации, «chi2» будет хорошим выбором.
  6. Если ваши данные состоят как из категориальных, так и из числовых переменных и вы хотите выполнить задачу классификации, лучше выбрать mutual_info_classif.
  7. Если у вас есть числовые переменные, и вы ищете линейную связь между функциями и целевой переменной и хотите выполнить задачу классификации, «f_classif» будет хорошим выбором.

Чему еще научиться

  1. Опробовать другие методы отбора, такие как методы на основе оболочки, встроенные методы, методы на основе регуляризации, анализ основных компонентов (PCA) и получение информации.
  2. Попробуйте другие методы фильтрации, такие как показатель Фишера и коэффициент корреляции.

Рекомендации

Спасибо! Счастливого обучения :)