Kst179 (обсуждение | вклад) (очень многа, лень писать) Метки: Визуальный редактор apiedit |
Kst179 (обсуждение | вклад) (→Алгоритм отбора по важности признаков:
добавил ссылки) Метки: Визуальный редактор apiedit |
||
Строка 15: | Строка 15: | ||
Для реализации такого алгоритма осталось определить что будет являться важностью признака. Обычно выбирают следующие метрики важности: |
Для реализации такого алгоритма осталось определить что будет являться важностью признака. Обычно выбирают следующие метрики важности: |
||
+ | * [[ Метрики "важности" признаков (Importances)#Корреляция|Корреляция]] |
||
− | * Корреляция |
||
* Условная энтропия |
* Условная энтропия |
||
+ | * [[ Метрики "важности" признаков (Importances)#Взаимная информация|Взаимная информация]] |
||
− | * Расстояние Кульбака-Лейблера |
||
− | * Взаимная информация |
||
* Расстояние между плотностью распределений |
* Расстояние между плотностью распределений |
||
− | * Relief |
+ | * [[ Метрики "важности" признаков (Importances)#Relief критерий|Relief критерий]] (Да простит меня Воронцов, но я не хочу это переводить как рельеф и тем более как облегчение). |
Все метрики вынесены в отдельную статью и доступны по ссылкам (нет). |
Все метрики вынесены в отдельную статью и доступны по ссылкам (нет). |
||
Версия от 13:26, 22 июня 2017
Как только вы называете признаки фичами, знайте что все многолетние труды российских ученых в области машинного обучения прошли зря. © К. В. Воронцов
Пусть есть куча признаков: , их очень много, хотим уменьшить их число. Можем применять два метода -- отбор признаков (selection): , где -- набор индексов наиболее оптимальных признаков. Второй метод -- выделение признаков (extraction): , где -- новые признаки полученные на основе старых. В обоих случаях считаем . Далее про первый метод.
Релевантность
Пусть далее -- набор признаков, - целевая переменная. , ( -- фиксировали). Тогда признак является:
- Сильно релевантным: если , т.е. отсутствие признака изменяет распределение целевой переменной.
- Слабо релевантным: если , но , т.е. он не является сильно релевантным, но если из \widetilde{F} повыкидывать еще каких нибудь признаков, то наличие нашего признака изменяет распределение целевой переменной (например сам по себе признак важный но в наборе находится еще один или несколько, сильно с ним коррелирующих).
- Нерелевантным: если . т.е. он не является ни сильно ни слабо релевантным, или что то же самое, для любого несодержащего его подмножества признаков, его добавление к такому подмножеству не влияет на распределение целевой переменной.
Отбор признаков заключается в том чтобы отбросить все нерелевантные и некоторые слабо релевантные признаки, так чтобы в новом множестве все признаки были сильно релевантными (в идеале, на практике это очень сложно).
Алгоритм отбора по важности признаков
Пусть -- важность (importance) -го признака, -- метрика точности (score) получаемая при обучении и валидации на наборе признаков . Отсортируем признаки по величине важности: . Теперь можно отбирать признаки следующим образом:
- , где
Первый способ выбирает ровно m признаков, второй оптимизирует число признаков.
Для реализации такого алгоритма осталось определить что будет являться важностью признака. Обычно выбирают следующие метрики важности:
- Корреляция
- Условная энтропия
- Взаимная информация
- Расстояние между плотностью распределений
- Relief критерий (Да простит меня Воронцов, но я не хочу это переводить как рельеф и тем более как облегчение).
Все метрики вынесены в отдельную статью и доступны по ссылкам (нет).
Продвинутые алгоритмы
У вышеописанного метода есть проблема того что два слабо релевантных признака которые сильно коррелируют друг с другом оба имеют высокую важность и могут попасть в подмножество отобранных признаков, мы же хотим немного признаков которые по максимуму отличаются разнообразием. Для чтобы обойти эту проблему используются следующие методы:
- Алгоритм последовательного отбора признаков
- Генетический алгоритм.
Они также вынесены в отдельную статью и также доступны по ссылкам (также нет).
Необходимость
Собственно, зачем все это нужно:
- Увеличить точность классификации (некоторые признаки только ухудшают ситуацию).
- Убрать похожие признаки (иначе они работают как один признак с большим весом).
- Увеличить скорость обучения/прогнозирования.
- Отобрать только реально необходимые признаки для сбора данных в дальнейшем (уменьшает стоимость сбора данных, увеличивает скорость набора объектов для дальнейшего обучения).
- Сделать классификатор и признаки более интерпретируемыми (чтобы
маминдатасаентист посмотрел на графички и сразу понял в чем интуиция).
Когда это не нужно:
- Если метод обучения основан на деревьях, так как они отбирают признаки непосредственно при обучении (деревья, рандомный лес, бустинг и т.д.).
- Если метод обучения использует L1 регуляризацию, так как она также заточена на отбор признаков и минимизацию их количества.
- Если признаки непоказательные и их очень много (например пиксели полноразмерного изображения) а обучаемся например на нейросети, то отбор признаков не имеет особого смысла, и следует перейти к выделению признаков (собственно им и занимается нейросеть),