Должен ли выбор функций выполняться только для данных обучения (или всех данных)?

10

Должен ли выбор функций выполняться только для данных обучения (или всех данных)? Я прошел через некоторые обсуждения и документы, такие как Guyon (2003) и Singhi and Liu (2006) , но все еще не был уверен в правильном ответе.

Моя экспериментальная установка выглядит следующим образом:

  • Набор данных: 50 здоровых контрольных пациентов и 50 больных (около 200 признаков, которые могут иметь отношение к прогнозированию заболевания).
  • Задача - диагностировать заболевание на основе доступных функций.

Что я делаю

  1. Возьмите весь набор данных и выполните выбор объекта (FS). Я сохраняю только выбранные функции для дальнейшей обработки
  2. Разделите для тестирования и обучения, обучите классификатор, используя данные поезда и выбранные функции. Затем примените классификатор для проверки данных (снова используя только выбранные функции). Проверка по принципу «один-один-выход» используется.
  3. получить точность классификации
  4. Усреднение: повторите 1) -3) N раз. (100).N=50

Я бы согласился, что выполнение FS для всего набора данных может привести к некоторому смещению, но я считаю, что оно «усредняется» во время усреднения (шаг 4). Это верно? (Точность отклонения )<2%

1 Гайон, И. (2003) «Введение в переменную и выбор функций», Журнал исследований машинного обучения, Vol. 3, с. 1157-1182
2 Сингхи, С. К. и Лю, Х. (2006) «Смещение выбора подмножества функций для обучения по классификации», Материалы ICML '06 Материалы 23-й международной конференции по машинному обучению, с. 849-856

pedro29
источник

Ответы:

12

Процедура, которую вы используете, приведет к оптимистически смещенным оценкам производительности, потому что вы используете данные из набора тестов, использованного в шагах 2 и 3, чтобы решить, какие функции используются в шаге 1. Повторение упражнения уменьшает дисперсию оценки производительности, а не смещение, поэтому смещение не будет усредненным. Чтобы получить объективную оценку производительности, данные теста никоим образом не должны использоваться для выбора модели, включая выбор характеристик.

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

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

Для получения дополнительной информации см. Амбруаза и МакЛахлана и мой ответ на этот вопрос .

Дикран Сумчатый
источник
Спасибо за ответ. На самом деле меня интересует и то, и другое, чтобы найти соответствующие функции и улучшить прогнозную производительность. В моих экспериментах (SVM для классификации) выбор признаков значительно улучшил точность прогноза (однако, как вы заметили, это может быть результатом чрезмерного соответствия данных). Я предполагаю, что под регрессией гребня вы подразумеваете нечто, известное также как регуляризация Тихонова?
pedro29
да, регрессия гребня - это просто нормальная линейная регрессия с штрафным слагаемым, основанным на квадрате нормы весов. Для большинства задач он работает так же хорошо, как и SVM, но его легче реализовать (и вы можете обработать ошибку перекрестной проверки без изменений, по существу, бесплатно, что можно использовать для настройки гиперпараметров).
Дикран Marsupial
Кстати, в чем разница между регуляризацией гребня и выбором функции? Я имею в виду, что в конце дня оба указывают «лучшее подмножество» предикторов из данного набора предикторов.
pedro29
Риджная регрессия не идентифицирует подмножество признаков, как это делает форма наказания LASSO или LARS. Это был бы мой выбор метода выбора признаков, так как он менее подвержен переобучению, поскольку штрафной термин налагает упорядочение на элементы, входящие в модель и покидающие ее, поэтому существует меньше степеней свободы, чем просто исчерпывающий поиск лучшего набора функции.
Дикран Сумчатый
3

Как дополнение к ответам здесь, у меня есть две ссылки, которые действительно помогли мне понять, почему это не очень хорошая процедура:

Изменить: по запросу, краткое объяснение содержания ссылок:

Предположим, я тренируюсь по классификатору, и у меня есть набор данных из 1000 выборок, по 1 миллиону объектов в каждом. Я не могу обработать их все, поэтому мне нужно меньше функций (скажем, я могу вычислить 300 функций). У меня также есть тестовый набор из 100 образцов для точной оценки моей реальной точности.

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

Согласно приведенным выше ссылкам, правильный способ сделать это - разделить мой набор данных на обучающий набор и набор перекрестной проверки, а затем настроить мою модель (отфильтровывая функции и т. Д.) На основе этого обучающего набора и связанного с ним показателя CV. Если я использую K-фолды, я должен настраиваться с нуля каждый раз, когда делаю сплит / фолд, а затем усредняю ​​результаты.

Программно вы делаете следующее:

  • Держите в стороне часть вашего набора данных в качестве набора.
  • Разделите оставшуюся часть вашего набора данных (далее называемого T1) на K-сгибы.
  • В цикле for от i = 1 до K сделайте следующее:
    • выберите i-й фолд в качестве своего набора CV, а оставшиеся образцы - в качестве своего тренировочного набора (отныне называемого Ti).
    • Делайте любые функции разработки и выбора функций, которые вы хотите: фильтровать функции, комбинировать их и т. Д.
    • Преобразуйте как ваш набор CV (текущий фолд, называемый CVi), так и ваш текущий тренировочный набор Ti в один с соответствующими функциями.
    • Тренируй свою модель на тренировочном наборе Ti
    • Получите счет от текущего сгиба, CVi. Добавить эту оценку в список, содержащий все оценки.
  • Теперь у вашего списка есть оценка каждого фолда, так что вы усредняете его, получая оценку K-фолдов.

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

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

Действительно хороший StackExchange ответ это один, который на самом деле объясняет это более подробно и с примером кода. Также смотрите это как дополнение.

Абхишек Дивекар
источник
1
Не могли бы вы включить краткое содержание этих ссылок? Мы предпочитаем автономные ответы, в противном случае они могут быть очень уязвимы для "linkrot", если ссылки меняют местоположение. Кроме того, мы можем преобразовать это в комментарий для вас.
Серебряная рыба
@Silverfish Done
Абхишек Дивекар
Таким образом, внутри цикла for могут быть разные выбранные функции для разных сгибов?
stackunderflow
2

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

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

Фрэнк Харрелл
источник