Выбор функции и перекрестная проверка


76

Недавно я много читал на этом сайте (@Aniko, @Dikran Marsupial, @Erik) и в других местах о проблеме переоснащения, возникающего при перекрестной проверке (Smialowski et al 2010, Биоинформатика, Hastie, Элементы статистического обучения). Предполагается, что любой контролируемый выбор признаков (с использованием корреляции с метками классов), выполненный вне оценки производительности модели с использованием перекрестной проверки (или другого метода оценки модели, такого как начальная загрузка), может привести к переобучению.

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

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

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

В моем случае у меня есть 56 функций и 259 случаев и так #cases> #features. Особенности получены из данных датчика.

Извиняюсь, если мой вопрос кажется производным, но это важный момент для прояснения.

Редактировать: При реализации выбора функций в рамках перекрестной проверки на наборе данных, подробно описанном выше (благодаря ответам ниже), я могу подтвердить, что выбор функций перед перекрестной проверкой в ​​этом наборе данных привел к значительномусмещение. Это смещение / переоснащение было наибольшим при использовании для состава с 3 классами по сравнению с составом с 2 классами. Я думаю, что тот факт, что я использовал ступенчатую регрессию для выбора признаков, увеличил это переоснащение; для сравнения в другом, но связанном наборе данных я сравнил процедуру последовательного прямого выбора признаков, выполненную до перекрестной проверки, с результатами, которые я ранее получил, с выбором признаков в CV. Результаты между обоими методами резко не отличались. Это может означать, что ступенчатая регрессия более склонна к переоснащению, чем последовательная ФС, или может быть причудой этого набора данных.


7
Я не думаю, что это (вполне) то, что Hastie, et al. защищают. Общий аргумент заключается в том, что если при выборе функции используется ответ, его лучше включить в процедуру CV. Если вы делаете скрининг предикторов, например, просматривая их выборочные отклонения и исключая предикторы с небольшим разбросом, это нормально, как однократная процедура.
кардинал

3
+1, однако даже в этом случае перекрестная проверка не представляет отклонения в процессе выбора объекта, что может быть проблемой, если выбор объекта нестабилен. Если вы сначала выполните скрининг, то изменчивость производительности в каждом сгибе будет недостаточно отражать истинную изменчивость. Если вы выполните скрининг в каждом сгибе, это соответственно увеличит изменчивость в производительности в каждом сгибе. Я бы все равно всегда проводил скрининг в каждом сгибе, если бы мог позволить себе вычислительные затраты.
Дикран Сумчатый

1
Я думаю, что утверждение «ЛЮБОЙ выбор характеристик, выполненный до оценки производительности модели с использованием перекрестной проверки, может привести к переобучению». является искажением или искажением того, что предложили бы Хэсти и другие. Если вы измените слово «предыдущий» на «без», это будет иметь больше смысла. Также предложение, похоже, предполагает, что перекрестная проверка является единственным способом законной проверки правильности выбранных переменных. Например, начальной загрузкой может быть другой законный подход .
Майкл Chernick

@MichaelChernick - согласился. Я отредактировал выше, чтобы лучше отразить мой смысл.
BGreene

1
@Bgreene: есть недавняя дискуссия по этому вопросу, которую можно прочитать по адресу goo.gl/C8BUa .
Алекк

Ответы:


69

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

Рассмотрим этот пример. Мы генерируем некоторые целевые данные, подбрасывая монету 10 раз и записывая, идет ли она в виде головы или хвоста. Затем мы генерируем 20 функций, подбрасывая монету 10 раз для каждой функции и записывая, что мы получаем. Затем мы выполняем выбор функции, выбирая функцию, которая максимально соответствует целевым данным, и используем ее в качестве нашего прогноза. Если мы затем проведем перекрестную проверку, мы получим ожидаемую частоту ошибок чуть ниже 0,5. Это связано с тем, что мы выбрали эту функцию на основе корреляции как обучающего набора, так и тестового набора в каждом цикле процедуры перекрестной проверки. Однако истинный коэффициент ошибок будет 0,5, поскольку целевые данные просто случайны. Если вы выполняете выбор функции независимо в каждом сгибе перекрестной проверки, ожидаемое значение частоты ошибок равно 0.

Ключевая идея заключается в том, что перекрестная проверка является способом оценки производительности процесса построения модели, поэтому вам нужно повторять весь процесс в каждом цикле. В противном случае вы получите смещенную оценку или заниженную оценку дисперсии оценки (или обеих).

НТН

Вот некоторый код MATLAB, который выполняет симуляцию Монте-Карло этого набора, с 56 функциями и 259 случаями, чтобы соответствовать вашему примеру, вывод, который он дает:

Смещенная оценка: erate = 0,429210 (0,397683 - 0,451737)

Несмещенная оценка: erate = 0,499689 (0,397683 - 0,590734)

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

NF    = 56;
NC    = 259;
NFOLD = 10;
NMC   = 1e+4;

% perform Monte-Carlo simulation of biased estimator

erate = zeros(NMC,1);

for i=1:NMC

   y = randn(NC,1)  >= 0;
   x = randn(NC,NF) >= 0;

   % perform feature selection

   err       = mean(repmat(y,1,NF) ~= x);
   [err,idx] = min(err);

   % perform cross-validation

   partition = mod(1:NC, NFOLD)+1;
   y_xval    = zeros(size(y));

   for j=1:NFOLD

      y_xval(partition==j) = x(partition==j,idx(1));

   end

   erate(i) = mean(y_xval ~= y);

   plot(erate);
   drawnow;

end

erate = sort(erate);

fprintf(1, '  Biased estimator: erate = %f (%f - %f)\n', mean(erate), erate(ceil(0.025*end)), erate(floor(0.975*end)));

% perform Monte-Carlo simulation of unbiased estimator

erate = zeros(NMC,1);

for i=1:NMC

   y = randn(NC,1)  >= 0;
   x = randn(NC,NF) >= 0;

   % perform cross-validation

   partition = mod(1:NC, NFOLD)+1;
   y_xval    = zeros(size(y));

   for j=1:NFOLD

      % perform feature selection

      err       = mean(repmat(y(partition~=j),1,NF) ~= x(partition~=j,:));
      [err,idx] = min(err);

      y_xval(partition==j) = x(partition==j,idx(1));

   end

   erate(i) = mean(y_xval ~= y);

   plot(erate);
   drawnow;

end

erate = sort(erate);

fprintf(1, 'Unbiased estimator: erate = %f (%f - %f)\n', mean(erate), erate(ceil(0.025*end)), erate(floor(0.975*end)));

3
Спасибо - это очень полезно. Если вы используете предложенный подход, как вы оцениваете свою окончательную модель? Поскольку у вас будет несколько наборов функций, как выбрать окончательный набор функций? Исторически я также сообщал о результатах, основанных на единственной перекрестной проверке с выбранными параметрами модели и функциями.
BGreene

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

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

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

3
Это такой важный пост. Удивительно, сколько не применяют это.
Крис А.

12

Чтобы добавить немного другое и более общее описание проблемы:

Если вы выполняете какую-либо предварительную обработку на основе данных , например,

  1. Оптимизация параметров, управляемая перекрестной проверкой / отсутствием начальной загрузки
  2. уменьшение размерности с помощью таких методов, как PCA или PLS, для создания входных данных для модели (например, PLS-LDA, PCA-LDA)
  3. ...

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

Если управляемая данными предварительная обработка относится к типу 1., это приводит к «двойной» или «вложенной» перекрестной проверке: оценка параметров выполняется в перекрестной проверке с использованием только обучающего набора «внешней» перекрестной проверки. У ElemStatLearn есть иллюстрация ( https://web.stanford.edu/~hastie/Papers/ESLII.pdf Page 222 из печати 5).

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

  • независимо для каждого случая или
  • независимо от фактического набора данных

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

И наоборот: если ваша модель полностью построена на знаниях, внешних по отношению к конкретному набору данных (например, вы заранее решили, что ваши экспертные знания не позволяют решить проблему с помощью измерительных каналов 63–79, вы, конечно, можете исключить эти каналы Постройте модель и проведите перекрестную проверку. То же самое, если вы выполните регрессию PLS и на своем опыте решите, что 3 латентные переменные являются разумным выбором (но не решаете, дают ли 2 или 5 лв лучшие результаты), тогда вы можете продолжайте обычную проверку из начальной загрузки / перекрестной проверки.


К сожалению, ссылка для печати 5 книги ElemStatLearn не работает. Мне было интересно, находится ли иллюстрация, на которую вы ссылаетесь, все еще на той же странице. Пожалуйста, укажите заголовок тоже.
rraadd88

Итак, если у меня есть два набора данных, есть ли выбор функций / разработка на одном из них, и CV на другом, не было бы проблем?
Милос

1
@Milos: нет, пока эти функции становятся фиксированными параметрами для моделей для перекрестной проверки, это должно быть в порядке. Это будет правильная генерация гипотезы (= разработка функции на наборе данных A) / проверка гипотезы (= измерение производительности теперь фиксированных объектов с помощью набора данных B).
cbeleites

@cbeleites Да, именно это я и собирался сделать. Определите функции на A, затем исправьте эти функции и выполните перекрестную проверку для моделей на B. Спасибо. :)
Милос

@Milos: имейте в виду, что ваши аргументы в пользу достигнутой производительности еще лучше, если вы полностью обучите свою модель на A, а затем будете использовать B только для тестирования.
cbeleites

5

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

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

Теперь вы можете сказать, хорошо, это просто невезение. Но если предикторы построены, как указано выше, то у вас есть шанс, что по крайней мере один из них будет иметь точность> 95% для всего набора данных, и именно этот вы выберете. Таким образом, у вас есть шанс на 75% переоценить производительность.

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

Вы также можете выделить количество данных (скажем, 20%), использовать как свой, так и правильный способ получения оценок производительности путем перекрестной проверки на 80% и посмотреть, какой прогноз производительности окажется более точным, когда вы перенесете свою модель в модель. % данных отложено. Обратите внимание, что для того, чтобы это работало, ваш выбор функций до CV также должен быть сделан только на 80% данных. В противном случае он не будет имитировать перенос вашей модели в данные вне вашего образца.


Не могли бы вы подробнее рассказать о правильном способе выбора функций на вашем интуитивном примере? Спасибо.
uared1776
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.