- PVSM.RU - https://www.pvsm.ru -
Правильный отбор признаков для анализа данных позволяет:
Оценка важности признаков необходима для интерпретации результатов модели.
Мы рассмотрим существующие методы отбора признаков для задач обучения с учителем и без. Каждый метод проиллюстрирован open source-реализацией на Python, чтобы вы могли быстро протестировать предложенные алгоритмы. Однако это не полная подборка: за последние 20 лет было создано множество алгоритмов, и здесь вы найдёте самые основные из них. Для более глубокого исследования ознакомьтесь с этим обзором [1].
Есть алгоритмы отбора с учителем, которые позволяют определить подходящие признаки для лучшего качества работы задач обучения с учителем (например, в задачах классификации и регрессии). Этим алгоритмам нужен доступ к размеченным данным. Для неразмеченных данных также существует ряд методов отбора признаков, которые оценивают все признаки на основе различных критериев: дисперсии, энтропии, способности сохранять локальную схожесть, и т.д. Релевантные признаки, обнаруженные с помощью эвристических методов без учителя, также могут применяться в моделях с учителем, потому что позволяют обнаруживать в данных иные паттерны, помимо корреляции признаков с целевой переменной.
Методы отбора признаков обычно делят на 4 категории: фильтры, обёртки, встроенные и гибридные.
При таком подходе мы оцениваем эффективность подмножества признаков, учитывая финальный результат примененного алгоритма обучения (например, каков прирост точности при решении задачи классификации). В этой комбинации поисковой стратегии и моделирования может использоваться любой алгоритм обучения.
Существующие стратегии отбора:
Реализация: эти алгоритмы реализованы в пакете mlxtend [2], вот пример [3] использования.
Реализация: scikit-learn [4]
К этой группе относятся алгоритмы, которые одновременно обучают модель и отбирают признаки. Обычно это реализуют с помощью l1-регуляризатора (sparsity regularizer) или условия, которое ограничивает некоторые признаки.
Реализация: SMLR [5]
ARD обнуляет вес некоторых признаков, тем самым помогая идентифицировать релевантные размерности.
Реализация: scikit-learn [6]
Другие примеры алгоритмов регуляризации: Lasso [7] (реализует l1-регуляризацию), гребневая регрессия [8] (реализует l2-регуляризацию), Elastic Net [9] (реализует l1 — и l2-регуляризацию). Если изобразить эти способы графически, то видно, что регрессия Lasso ограничивает коэффициенты площадью квадрата, гребневая регрессия очерчивает круг, а Elastic Net занимает промежуточное положение.
https://scikit-learn.org/stable/auto_examples/linear_model/plot_sgd_penalties.html [10]
Здесь [11] представлено исчерпывающее описание этих алгоритмов.
При таком подходе мы оцениваем важность признаков только на основе свойственных им характеристикам, без привлечения алгоритмов обучения. Эти методы работают быстрее и требуют меньше вычислительных ресурсов по сравнению с методами «обертками». Если для моделирования статистической корреляции между признаками не хватает объема данных, тогда фильтры могут давать результаты хуже, чем обёртки. В отличие от обёрток, такие методы менее склонны к переобучению. Они широко используются для работы с данными высокой размерности, когда методы обертки требуют слишком больших вычислительных мощностей.
Вес признака уменьшается, если его значение отличается для ближайших объектов одного и того же класса больше, чем для ближайших объектов из разных классов; в противном случае вес увеличивается.
Расширенный алгоритм ReliefF использует взвешивание признаков и ищет по большему количеству ближайших соседей.
Реализация: scikit-rebate [12], ReliefF [13]
Реализация: scikit-feature [14], пример [15] использования.
Критерий независимости хи-квадрат.
Чтобы корректно применять критерий хи-квадрат для проверки связи между разными признаками из датасета и целевой переменной, необходимо соблюсти условия: переменные должны быть категориальными, независимыми и должны иметь ожидаемую частоту больше 5. Последнее условие гарантирует, что CDF (cumulative density function) статистического критерия (test statistic) может быть аппроксимирован с помощью распределения хи-квадрат. Подробнее рассказано здесь [16].
Признаки релевантны, если их значения систематически меняются в зависимости от принадлежности к той или иной категории.
Таким образом, хорошее подмножество признаков содержит такие признаки, которые высоко коррелируют с целевой переменной, и при этом не коррелируют друг с другом. Оценка подмножества из k признаков вычисляется так [20]:
Здесь — это среднее значение всех корреляций между признаком и классом, а — среднее значение всех корреляций между признаками. Критерий CFS определяется так:
Реализация: scikit-feature [14], пример [15] использования.
Реализация: skfeature [22], https://github.com/shiralkarprashant/FCBF [23]
Реализациия: Variance Threshold [24]
Более высокие значения, как правило, имеют более высокую предсказательную силу.
Поскольку , если и только если соблюдается равенство , тогда:
Реализация: scikit-feature [14]
Реализация: https://github.com/danilkolikov/fsfc [28]
Другой способ реализации отбора признаков представляет собой гибрид из фильтров и обёрток, объединённых в двухфазный процесс: сначала признаки фильтруются по статистическим свойствам, а затем применяются методы обертки.
Написано очень много литературы, в которой рассматривается проблема отбора признаков, и здесь мы лишь слегка коснулись всего массива научно-исследовательских работ.
Полный список [30] других алгоритмов отбора признаков, о которых я не упомянул, был реализован в пакете scikit-feature [14].
Определять релевантные признаки можно также с помощью PLS (Partial least squares, частично наименьшие квадраты), как рассказывается в этой статье [31], или с помощью методов линейного уменьшения размерности, как показано здесь [32].
Перевели «Инфосистемы Джет»
Автор: JetHabr
Источник [33]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/algoritmy/332455
Ссылки в тексте:
[1] обзором: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.295.8115&rep=rep1&type=pdf
[2] mlxtend: https://rasbt.github.io/mlxtend/#examples
[3] пример: https://stackabuse.com/applying-wrapper-methods-in-python-for-feature-selection/
[4] scikit-learn: https://scikit-learn.org/stable/modules/feature_selection.html#recursive-feature-elimination
[5] SMLR: https://github.com/KamitaniLab/smlr
[6] scikit-learn: https://scikit-learn.org/stable/auto_examples/linear_model/plot_ard.html
[7] Lasso: https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Lasso.html
[8] гребневая регрессия: https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Ridge.html
[9] Elastic Net: https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.ElasticNet.html
[10] https://scikit-learn.org/stable/auto_examples/linear_model/plot_sgd_penalties.html: https://scikit-learn.org/stable/auto_examples/linear_model/plot_sgd_penalties.html
[11] Здесь: http://enhancedatascience.com/2017/07/04/machine-learning-explained-regularization/
[12] scikit-rebate: https://github.com/EpistasisLab/scikit-rebate
[13] ReliefF: https://pypi.org/project/ReliefF/
[14] scikit-feature: https://github.com/jundongl/scikit-feature
[15] пример: http://featureselection.asu.edu/tutorial.php
[16] здесь: https://sites.google.com/a/lakeheadu.ca/bweaver/Home/statistics/notes/chisqr_assumptions
[17] sklearn: https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.chi2.html
[18] scipy: https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.chisquare.html
[19] CFS: https://www.cs.waikato.ac.nz/~mhall/thesis.pdf
[20] вычисляется так: https://en.wikipedia.org/wiki/Feature_selection#Correlation_feature_selection
[21] FCBF: http://www.public.asu.edu/~huanliu/papers/icml03.pdf
[22] skfeature: https://github.com/jundongl/scikit-feature/blob/master/skfeature/function/information_theoretical_based/FCBF.py
[23] https://github.com/shiralkarprashant/FCBF: https://github.com/shiralkarprashant/FCBF
[24] Variance Threshold: https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.VarianceThreshold.html
[25] реализация: https://github.com/ciortanmadalina/high_noise_clustering/blob/master/Unsupervised%20feature%20selection.ipynb
[26] Соотношение дисперсий: https://www.sciencedirect.com/science/article/abs/pii/S0167865512001870
[27] работе: https://dl.acm.org/citation.cfm?id=1835848
[28] https://github.com/danilkolikov/fsfc: https://github.com/danilkolikov/fsfc
[29] здесь: https://pdfs.semanticscholar.org/f116/7e2e1fa07cdf432c10beb373e07efd6a5e58.pdf
[30] список: http://featureselection.asu.edu/algorithms.php
[31] статье: https://www.idtools.com.au/variable-selection-method-pls-python/
[32] здесь: https://jotterbach.github.io/2016/03/24/Principal_Component_Analysis/
[33] Источник: https://habr.com/ru/post/470622/?utm_source=habrahabr&utm_medium=rss&utm_campaign=470622
Нажмите здесь для печати.