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

В этой статье мы рассмотрим некоторые популярные алгоритмы машинного обучения, такие как рекурсивное устранение признаков (RFE), прямой выбор признаков и обратное устранение признаков. Поскольку эта статья является продолжением нашей предыдущей статьи о методах Выбор признаков на основе фильтров, мы будем использовать тот же пример набора данных Рак молочной железы, штат Висконсин (диагностический), доступный в репозитории машинного обучения UCI, для тестирования наших моделей.

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

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

Рекурсивное устранение признаков (RFE)

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

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

Шаги, связанные с RFE

Ниже приводится краткое описание процесса RFE:

  1. Инициализируйте количество сохраняемых функций (например, 10 лучших функций).
  2. Обучите модель всем доступным функциям.
  3. Оцените значимость каждого признака, используя коэффициенты или значения признаков из модели.
  4. Удалите функцию с самым низким приоритетом.
  5. Переобучите модель на уменьшенном наборе функций.
  6. Повторяйте шаги с 3 по 5, пока не будет накоплено необходимое количество признаков.
  7. Выберите окончательный набор функций.

RFE — это простой и эффективный метод, который можно применять к многочисленным типам моделей машинного обучения, таким как линейная регрессия, деревья решений и машины опорных векторов (SVM).

Выполнение

Давайте посмотрим на реализацию RFE в наборе данных рака молочной железы из репозитория машинного обучения UCI.

import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

# Load the breast cancer dataset
data = load_breast_cancer()
X = data.data
y = data.target

# Create a Logistic Regression model
model = LogisticRegression()

# Initialize RFE with the desired number of features
rfe = RFE(model, n_features_to_select=10)

# Fit the RFE model to the data
rfe = rfe.fit(X, y)

# Print the selected features
print("Selected features:", data.feature_names[rfe.support_])

В этом коде мы сначала загружаем набор данных о раке молочной железы из репозитория машинного обучения UCI, используя функцию load_breast_cancer из модуля sklearn.datasets. Затем мы создаем модель логистической регрессии и инициализируем RFE с желаемым количеством сохраняемых функций. Мы подгоняем модель RFE к данным и, наконец, печатаем выбранные функции. Из наших экспериментов мы обнаружили, что следующие десять признаков являются наиболее важными: «средний радиус», «средняя компактность», «средняя вогнутость», «ошибка текстуры», «наихудший радиус», «наихудшая гладкость». , "наихудшая компактность", "наихудшая вогнутость", "наихудшая вогнутость", "наихудшая симметрия"

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

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

Прямой выбор функций (FFS)

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

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

Шаги, связанные с FFS

Ниже приводится краткое описание процесса FFS:

  1. Инициализируйте пустой набор функций.
  2. Обучите модель, используя текущий набор функций, а также рассматриваемую функцию для каждой функции в полном наборе функций.
  3. Оцените производительность модели, используя статистические данные, такие как точность, AUC или показатель F1.
  4. Выберите функцию, которая дает наибольшее повышение производительности.
  5. Добавьте выбранную функцию в текущую коллекцию функций.
  6. Повторяйте шаги со 2 по 5, пока не будут учтены все особенности или не будет выполнено требование остановки.
  7. Выберите окончательный набор функций.

Выполнение

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

import pandas as pd
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# Load the breast cancer dataset
data = load_breast_cancer()
X = data.data
y = data.target

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# Scale the training features
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# Create an empty feature set
selected_features = []

# Create a full feature set
full_features = list(range(X.shape[1]))

# Initialize the best performance to be 0
best_performance = 0

# Repeat the forward selection process until all features have been considered
while len(full_features) > 0:
    # Create a dictionary to store the performance of each feature
    feature_performance = {}
    
    # Iterate over each feature
    for feature in full_features:
        # Add the feature to the current feature set
        current_features = selected_features + [feature]
        
        # Train a logistic regression model using the current feature set
        model = LogisticRegression(max_iter=1000, solver='saga')
        model.fit(X_train[:, current_features], y_train)
        
        # Evaluate the model performance on the testing set
        y_pred = model.predict(X_test[:, current_features])
        performance = accuracy_score(y_test, y_pred)
        
        # Store the performance of the feature
        feature_performance[feature] = performance
    
    # Find the feature that results in the best performance
    best_feature = max(feature_performance, key=feature_performance.get)
    
    # Update the best performance
    best_performance = feature_performance[best_feature]
    
    # Add the best feature to the selected features
    selected_features.append(best_feature)
    
    # Remove the best feature from the full feature set
    full_features.remove(best_feature)

# Print the selected features
print("Selected features:", [data.feature_names[i] for i in selected_features])

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

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

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

Устранение обратных функций (BFE)

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

Шаги, связанные с BFE

Процесс устранения обратной функции можно выразить следующим образом:

  1. Установите модель со всеми ее функциями.
  2. Используйте статистику производительности, такую ​​​​как точность, точность, полнота, оценка F1 или R-квадрат, чтобы оценить производительность модели.
  3. Следует исключить признак с наименьшим коэффициентом (т. е. признак с самой слабой связью с целевой переменной).
  4. Вставьте оставшиеся функции в модель.
  5. Повторяйте шаги со 2 по 4, пока не будут удалены все функции или пока не будет достигнуто необходимое количество функций.
  6. Окончательная комбинация характеристик обеспечивает высочайшую производительность модели.

Выполнение

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

from sklearn.datasets import load_breast_cancer
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

# Load breast cancer dataset
data = load_breast_cancer()
X, y = data.data, data.target

# Create logistic regression object
logreg = LogisticRegression(solver='sag', max_iter=10000)

# Create recursive feature eliminator object
rfe = RFE(logreg, n_features_to_select=1)

# Fit RFE to the data
fit = rfe.fit(X, y)

# Get the ranking of features
ranking = fit.ranking_

# Sort the ranking in ascending order
sorted_ranking = sorted(enumerate(ranking), key=lambda x: x[1])

# Print the sorted ranking
print("Features sorted by their rank:")
for i, rank in sorted_ranking:
    print("Feature %d: rank %d" % (i+1, rank))

В этом коде мы сначала загружаем набор данных о раке молочной железы и разбиваем его на переменные-предикторы X и целевую переменную y. Затем мы используем модель логистической регрессии в качестве оценки. Затем мы используем класс RFE из модуля feature_selection scikit-learn для устранения обратных функций. Мы указываем n_features_to_select=1, чтобы указать, что мы хотим сохранить только самую важную функцию. Функция rfe.fit соответствует модели RFE для данных. Наконец, мы используем атрибут rfe.ranking_ для ранжирования функций, где 1 — самая важная функция, а X.shape[1] — наименее важная функция. Затем цикл for печатает ранжирование функций.

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

Заключение

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

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

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

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

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

Если вы сочтете эту статью полезной, подпишитесь на меня, чтобы получать больше подобного контента, где я часто публикую статьи о науке о данных, машинном обучении и искусственном интеллекте.