Машинное обучение вики
(очень многа, лень писать)
Метки: Визуальный редактор apiedit
Метки: Визуальный редактор apiedit
Строка 15: Строка 15:
   
 
Для реализации такого алгоритма осталось определить что будет являться важностью признака. Обычно выбирают следующие метрики важности:
 
Для реализации такого алгоритма осталось определить что будет являться важностью признака. Обычно выбирают следующие метрики важности:
  +
* [[ Метрики "важности" признаков (Importances)#Корреляция|Корреляция]]
* Корреляция
 
 
* Условная энтропия
 
* Условная энтропия
  +
* [[ Метрики "важности" признаков (Importances)#Взаимная информация|Взаимная информация]]
* Расстояние Кульбака-Лейблера
 
* Взаимная информация
 
 
* Расстояние между плотностью распределений
 
* Расстояние между плотностью распределений
* Relief - критерий (Да простит меня Воронцов, но я не хочу это переводить как рельеф и тем более как облегчение).
+
* [[ Метрики "важности" признаков (Importances)#Relief критерий|Relief критерий]] (Да простит меня Воронцов, но я не хочу это переводить как рельеф и тем более как облегчение).
 
Все метрики вынесены в отдельную статью и доступны по ссылкам (нет).
 
Все метрики вынесены в отдельную статью и доступны по ссылкам (нет).
   

Версия от 13:26, 22 июня 2017

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

Пусть есть куча признаков: , их очень много, хотим уменьшить их число. Можем применять два метода -- отбор признаков (selection): , где -- набор индексов наиболее оптимальных признаков. Второй метод -- выделение признаков (extraction): , где -- новые признаки полученные на основе старых. В обоих случаях считаем . Далее про первый метод.

Релевантность

Пусть далее -- набор признаков, - целевая переменная. , ( -- фиксировали). Тогда признак является:

  • Сильно релевантным: если , т.е. отсутствие признака изменяет распределение целевой переменной.
  • Слабо релевантным: если , но , т.е. он не является сильно релевантным, но если из \widetilde{F} повыкидывать еще каких нибудь признаков, то наличие нашего признака изменяет распределение целевой переменной (например сам по себе признак важный но в наборе находится еще один или несколько, сильно с ним коррелирующих).
  • Нерелевантным: если . т.е. он не является ни сильно ни слабо релевантным, или что то же самое, для любого несодержащего его подмножества признаков, его добавление к такому подмножеству не влияет на распределение целевой переменной.

Отбор признаков заключается в том чтобы отбросить все нерелевантные и некоторые слабо релевантные признаки, так чтобы в новом множестве все признаки были сильно релевантными (в идеале, на практике это очень сложно).

Алгоритм отбора по важности признаков

Пусть -- важность (importance) -го признака, -- метрика точности (score) получаемая при обучении и валидации на наборе признаков . Отсортируем признаки по величине важности: . Теперь можно отбирать признаки следующим образом:

  • , где

Первый способ выбирает ровно m признаков, второй оптимизирует число признаков.

Для реализации такого алгоритма осталось определить что будет являться важностью признака. Обычно выбирают следующие метрики важности:

Все метрики вынесены в отдельную статью и доступны по ссылкам (нет).

Продвинутые алгоритмы

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

  • Алгоритм последовательного отбора признаков
  • Генетический алгоритм.

Они также вынесены в отдельную статью и также доступны по ссылкам (также нет).

Необходимость

Собственно, зачем все это нужно:

  • Увеличить точность классификации (некоторые признаки только ухудшают ситуацию).
  • Убрать похожие признаки (иначе они работают как один признак с большим весом).
  • Увеличить скорость обучения/прогнозирования.
  • Отобрать только реально необходимые признаки для сбора данных в дальнейшем (уменьшает стоимость сбора данных, увеличивает скорость набора объектов для дальнейшего обучения).
  • Сделать классификатор и признаки более интерпретируемыми (чтобы мамин датасаентист посмотрел на графички и сразу понял в чем интуиция).

Когда это не нужно:

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