Процесс естественного отбора для определения оптимального набора характеристик.

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

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

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

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

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

Генетический алгоритм

В этом сообщении используется пакет «sklearn-генетический»:



Этот пакет совместим с существующими моделями sklearn и предоставляет множество функций и возможностей для генетического отбора.

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

Выбор функции

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

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

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

  1. Производится начальная популяция.
  2. Оценка прикрепляется к членам населения.
  3. Подмножество отбирается для воспроизведения с турниром.
  4. Выберите генетический материал для передачи.
  5. Применяйте мутации.
  6. Повторяйте через несколько поколений.

Алгоритм выполняется за заданное количество поколений (итераций). После этого оптимальный член популяции - это отобранные черты лица.

Эксперименты

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

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

from sklearn.datasets import load_breast_cancer
from genetic_selection import GeneticSelectionCV
from sklearn.tree import DecisionTreeClassifier
import pandas as pd
import numpy as np
data = load_breast_cancer()
df = pd.DataFrame(data.data, columns=data.feature_names)
df['target'] = data.target
X = df.drop(['target'], axis=1)
y = df['target'].astype(float)
estimator = DecisionTreeClassifier()
model = GeneticSelectionCV(
    estimator, cv=5, verbose=0,
    scoring="accuracy", max_features=5,
    n_population=100, crossover_proba=0.5,
    mutation_proba=0.2, n_generations=50,
    crossover_independent_proba=0.5,
    mutation_independent_proba=0.04,
    tournament_size=3, n_gen_no_change=10,
    caching=True, n_jobs=-1)
model = model.fit(X, y)
print('Features:', X.columns[model.support_])

GeneticSelectionCV

Первоначальная популяция (размером «n_population») генерируется случайным образом из выборочного пространства наборов функций. Эти наборы ограничены в объеме параметром «max_features», который устанавливает максимальный размер каждого подмножества функций.

Для каждого члена исходной популяции оценка измеряется с помощью целевой метрики. Это измерение является производительностью указанного средства оценки.

Выбор турнира выполняется, чтобы определить, какие участники перейдут к следующему поколению. Количество участников в турнире устанавливается с помощью «турнирного_размера». Размер турнира - это выбор нескольких участников из совокупности, которые соревнуются друг с другом на основе показателя оценки. Победитель турнира выбирается в качестве родителя для следующего поколения.

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

Естественный отбор

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

Важнейшим аспектом эволюции является мутация. Мутация снижает риск того, что поиск попадает в локальный оптимум и застревает. В каждом поколении, помимо кроссовера, добавляется случайная мутация. Вероятность того, что произойдет мутация, задается параметром mutation_prob. Этот параметр сочетается с «mutation_independent_proba», который представляет собой шанс добавления функции к набору функций.

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

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

Результаты

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

Хотя эти результаты ни в коем случае не являются окончательными, они показывают преимущества генетического алгоритма. Характеристики модели основаны на подмножестве признаков из генетического алгоритма, которые постоянно превосходят как базовую модель, так и подмножество признаков хи-квадрат. За единственным исключением была модель логистической регрессии, где результаты все еще были сопоставимы.

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

Вывод

Генетические алгоритмы невероятно универсальны и применимы к широкому спектру сценариев.

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

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

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

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

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

Https://zjwarnes.medium.com/membership