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

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

Необходимость выбора функций:

Методы выбора признаков

Существует три основных метода выбора признаков:

  1. Метод фильтрации
  2. Метод обертки
  3. Встроенный метод

Метод обертки

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

Методы оболочки для выбора функций можно разделить на три категории:

  • Выбор функции шага вперед:
    Выбор функции шага вперед начинается с оценки каждой отдельной функции и выбирает ту, которая приводит к наилучшей эффективности выбранной модели алгоритма.
    →Лучшее полностью зависит от определенных критериев оценки (AUC, точность предсказания, RMSE и т. д.).
    → Прямой выбор — это итеративный метод, в котором мы начинаем с отсутствия признаков в модели.
    → На каждой итерации , мы продолжаем добавлять функцию, которая лучше всего улучшает нашу модель, пока добавление новой переменной не улучшит производительность модели.
    * На первом этапе производительность классификатора оценивается в отношении каждой функции в отдельности. , и из всех функций выбирается функция с наилучшей производительностью.
    * На втором этапе первая функция, выбранная для модели, пробуется в сочетании со всеми остальными функциями и комбинацией двух функций, которые дают результат. наилучшая производительность алгоритма выбрано.
    * Этот процесс оценки и выбора наиболее эффективного метода из различных комбинаций функций повторяется до тех пор, пока не будет выбрано определенное количество функций.
from mlxtend.feature_selection import SequentialFeatureSelector
from sklearn.linear_model import LinearRegression,LogisticRegression
#FOR REGRESSION MODEL
feature_select = SequentialFeatureSelector(LinearRegression(),
                                           k_features=,
                                           forward=True,
                                           floating=False,
                                           scoring='r2',
                                           cv=)
feature_select.fit(x,y)
feature_select.k_feature_names_

#FOR CLASSIFICATION MODEL
feature_select = SequentialFeatureSelector(LogisticRegression(),
                                           k_features=,
                                           forward=True,
                                           floating=False,
                                           scoring='roc_auc',
                                           cv=)
feature_select.fit(x,y)
feature_select.k_feature_names_

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

  • Пошаговый выбор функций назад:
    →Пошаговый выбор функций назад
    является обратным пошаговому выбору функций вперед и, как вы могли догадаться, начинается со всего набора функций и работает в обратном направлении, удаляя функции, чтобы найти оптимальное подмножество предопределенного размера.
    * На первом этапе удаляется одна функция. Это удаление выполняется путем удаления одной функции и расчета производительности модели. В основном функции удаляются в циклическом режиме. таким образом.
    * Этот процесс продолжается до тех пор, пока не останется заданное количество функций.
from mlxtend.feature_selection import SequentialFeatureSelector
from sklearn.linear_model import LinearRegression,LogisticRegression
#FOR REGRESSION MODEL
feature_select = SequentialFeatureSelector(LinearRegression(),
                                           k_features=,
                                           forward=False,
                                           floating=False,
                                           scoring='r2',
                                           cv=)
feature_select.fit(x,y)
feature_select.k_feature_names_

#FOR CLASSIFICATION MODEL
feature_select = SequentialFeatureSelector(LogisticRegression(),
                                           k_features=,
                                           forward=False,
                                           floating=False,
                                           scoring='roc_auc',
                                           cv=)
feature_select.fit(x,y)
feature_select.k_feature_names_

Просто принимая Forward в функции как false, вы получаете выбор назад

  • Исчерпывающий выбор функций:
    Это самый жадный алгоритм, целью которого является поиск наиболее эффективного подмножества функций.
    → Он постоянно создает модели и отбрасывает лучшие или худшие функции на каждой итерации.
    →Производительность алгоритма оценивается по всем возможным комбинациям признаков в наборе данных.
    →Затем он ранжирует функции в порядке их исключения.
    →Поскольку он проверяет все возможные комбинации, он очень затратен в вычислительном отношении, и с ним в основном избегают работать.
from mlxtend.feature_selection import ExhaustiveFeatureSelector
from sklearn.linear_model import LinearRegression,LogisticRegression
#FOR REGRESSION MODELS
feature_select = ExhaustiveFeatureSelector(LinearRegression(),             
                                           min_features=,
                                           max_features=,
                                           scoring='R2',
                                           print_progress=True,
                                           cv=5)
feature_select = feature_select.fit(X, y)
print('Best accuracy score: %.2f' %feature_select.best_score_) 
print('Best subset (indices):', feature_select.best_idx_) 
print('Best subset (name):', feature_select.best_feature_names_)
#FOR CLASSIFICATION MODELS
feature_select = ExhaustiveFeatureSelector(LogisticRegression(),             
                                           min_features=,
                                           max_features=,
                                           scoring='roc_auc',
                                           print_progress=True,
                                           cv=5)
feature_select = feature_select.fit(X, y)
print('Best accuracy score: %.2f' %feature_select.best_score_) 
print('Best subset (indices):', feature_select.best_idx_) 
print('Best subset (name):', feature_select.best_feature_names_)

Методы-оболочки вычислительно очень дороги, потому что функции передаются циклическим способом.

Чтобы выполнить метод оболочки, убедитесь, что вы закодировали все категориальные функции.

На следующей неделе появится ВСТРОЕННЫЙ МЕТОД выбора функций.
УДАЧНОГО ОБУЧЕНИЯ!!!!

Нравится моя статья? Похлопайте мне и поделитесь им, так как это повысит мою уверенность. Кроме того, я публикую новые статьи каждое воскресенье, так что следите за будущими статьями из серии «Основы науки о данных и машинного обучения».

Кроме того, свяжитесь со мной в LinkedIn.