Оптимизация анализа данных с помощью SelectKBest Feature Selection
Оглавление:
- Что такое выбор функций?
- Что такое SelectKBest?
- Как правильно выбрать score_func?
- Регрессия
- Классификация
- Сводка
- Что еще нужно узнать
- Ссылки
Что такое выбор признаков?
Выбор признаков — это метод, используемый в машинном обучении для выявления наиболее релевантных признаков из большого набора признаков в наборе данных. Уменьшая количество функций, используемых в алгоритме машинного обучения, мы можем повысить его производительность и избежать переобучения.
Раньше я находил оценку 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
:
f_regression
: используется для задач линейной регрессии и вычисляет F-значение между функцией и целью.mutual_info_regression
: Он используется для задач регрессии и вычисляет взаимную информацию между двумя случайными величинами.f_classif
: Он используется для задач классификации и вычисляет F-значение ANOVA между функцией и целью.mutual_info_classif
: Он используется для задач классификации и вычисляет взаимную информацию между двумя дискретными переменными.chi2
: Он используется для задач классификации и вычисляет статистику хи-квадрат между каждой функцией и целью.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
.
chi_2
: используется для проверки независимости между двумя категориальными переменными. При выборе функций он вычисляет статистику хи-квадрат между каждой функцией и целевой переменной. Характеристики, которые сильно коррелируют с целевой переменной, будут иметь более высокие оценки.mutual_info_classif
: Он основан на концепции взаимной информации, которая измеряет количество информации, разделяемой между двумя переменными. Он вычисляет взаимную информацию между каждой функцией и целевой переменной. Признаки, обладающие высокой информативностью по отношению к целевой переменной, будут иметь высокие оценки.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)
Одна важная вещь, которую следует учитывать при использовании категориальных переменных при выборе функций, — это кодировать функции, прежде чем применять их к методам выбора функций. Мы можем использовать одну горячую кодировку или манекены панд для кодирования категориальных переменных в числовые переменные.
Краткое содержание
- SelectKBest — это основанные на фитинге методы выбора функций, используемые в контролируемых моделях.
- Реализация SelectKBest
- Если вы работаете с числовыми данными и хотите решить задачу регрессии, то
f_regression
может быть хорошим выбором. - Если вы работаете с категориальными или смешанными данными и хотите решить задачу регрессии, то
mutual_info_regression
может быть лучшим выбором. - Если ваши данные состоят только из категориальных переменных и вы хотите выполнить задачу классификации, «chi2» будет хорошим выбором.
- Если ваши данные состоят как из категориальных, так и из числовых переменных и вы хотите выполнить задачу классификации, лучше выбрать mutual_info_classif.
- Если у вас есть числовые переменные, и вы ищете линейную связь между функциями и целевой переменной и хотите выполнить задачу классификации, «f_classif» будет хорошим выбором.
Чему еще научиться
- Опробовать другие методы отбора, такие как методы на основе оболочки, встроенные методы, методы на основе регуляризации, анализ основных компонентов (PCA) и получение информации.
- Попробуйте другие методы фильтрации, такие как показатель Фишера и коэффициент корреляции.
Рекомендации
- https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectKBest.html#
- https://www.datatechnotes.com/2021/02/seleckbest-feature-selection-example-in-python.html
- https://www.kaggle.com/code/jepsds/feature-selection-using-selectkbest/notebook
- https://machinelearningmastery.com/feature-selection-with-real-and-categorical-data/
- analyticsvidhya.com/blog/2020/10/feature-selection-techniques-in-machine-learning/
- Чат GPT- https://openai.com/
Спасибо! Счастливого обучения :)