Вибір функції та перехресне підтвердження


76

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

Мені це здається неінтуїтивним - звичайно, якщо ви вибираєте набір функцій, а потім оцінюєте свою модель, використовуючи лише вибрані функції, використовуючи перехресну перевірку, тоді ви отримуєте неупереджену оцінку узагальненої роботи моделі за цими ознаками (це передбачає, що досліджуваний зразок є репрезентативним популяції)?

З цією процедурою, звичайно, не можна вимагати оптимального набору функцій, але чи можна повідомити про ефективність вибраного набору функцій на невидимих ​​даних як дійсні?

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

У моєму випадку я маю 56 можливостей і 259 випадків і так #cases> #features. Особливості отримані з даних датчиків.

Вибачте, якщо моє питання здається похідним, але це здається важливим моментом для уточнення.

Редагувати: Впроваджуючи вибір функції в рамках перехресної перевірки на наборі даних, детально описаному вище (завдяки відповідям нижче), я можу підтвердити, що вибір функцій до перехресної перевірки в цьому наборі даних вніс значне значенняупередженість. Цей ухил / надмірний примірник був найбільшим, коли це було зроблено для 3-класового складу, порівняно з 2-класовим. Думаю, те, що я використовував ступінчату регресію для вибору особливостей, збільшив цей наряд; для порівняння, на іншому, але пов'язаному наборі даних я порівняв послідовну процедуру вибору функції вперед, виконану до перехресної перевірки, з результатами, які раніше я отримав, з вибором функції в CV. Результати між обома методами різко не відрізнялися. Це може означати, що ступінчаста регресія більш схильна до надмірного, ніж послідовна FS, або може бути химерністю цього набору даних.


7
Я не думаю, що це (цілком) те, що Hastie та ін. виступають. Загальний аргумент полягає в тому, що якщо для вибору функції використовується відповідь, то її краще включити до складу вашої процедури резюме. Якщо ви робите прогнозування прогнозів, наприклад, дивлячись на їх вибіркові відхилення та виключаючи прогнози з невеликими варіаціями, це нормально як процедура одного удару.
— кардинал

3
+1, однак навіть у цьому випадку перехресне підтвердження не представляє дисперсії в процесі вибору функції, що може бути проблемою, якщо вибір функції нестабільний. Якщо ви виконаєте скринінг спочатку, то мінливість продуктивності в кожному складі буде недостатньо представляти справжню мінливість. Якщо ви проводите скринінг у кожній складці, це належним чином збільшить мінливість продуктивності в кожній складці. Я б все одно завжди проводив скринінг у кожному складі, якби міг дозволити собі обчислювальні витрати.
— Дікран Марсупіал

1
Я думаю, що твердження "БУДЬ-ЯКІЙ вибір функцій, здійснений до оцінки продуктивності моделі за допомогою перехресної перевірки, може призвести до перевищення" це неправильне котирування або неправильне представлення того, що б запропонували Хасті та інші. Якщо ви зміните слово "до" на "без", це має більше сенсу. Також, як видається, речення наводить на думку, що перехресне підтвердження - це єдиний спосіб законно перевірити відповідність вибраних змінних. Наприклад, завантажувальний приклад може бути іншим законним підходом .
— Майкл Черник

@MichaelChernick - погодився. Я відредагував вище, щоб краще відобразити своє значення.
— BGreene

1
@Bgreene: нещодавно обговорили це питання, яке можна прочитати на goo.gl/C8BUa .
— Алекк

Відповіді:


68

Якщо ви здійснюєте вибір функції на всіх даних, а потім перехресну валідацію, тестові дані у кожній складці процедури перехресної перевірки також використовувались для вибору особливостей, і саме це упереджує аналіз ефективності.

Розглянемо цей приклад. Ми генеруємо деякі цільові дані, перегортаючи монету 10 разів і записуючи, чи вона вниз головою чи хвостиком. Далі ми генеруємо 20 функцій, гортаючи монету 10 разів за кожну функцію і записуємо, що ми отримуємо. Потім ми виконуємо підбір функції, підбираючи функцію, яка відповідає максимально наближеним даним і використовуємо це як наш прогноз. Якщо ми перехреслимо, ми отримаємо очікуваний коефіцієнт помилок трохи нижче 0,5. Це тому, що ми обрали цю функцію на основі співвідношення як навчального набору, так і тестового набору в кожному складі процедури перехресної перевірки. Однак справжній показник помилок становитиме 0,5, оскільки цільові дані просто випадкові. Якщо ви вибираєте функцію незалежно в межах кожної складки перехресної перевірки, очікуване значення коефіцієнта помилок дорівнює 0.

Ключова ідея полягає в тому, що перехресне підтвердження - це спосіб оцінки ефективності узагальнення процесу побудови моделі, тому потрібно повторювати весь процес у кожному складі. В іншому випадку ви отримаєте упереджену оцінку або недооцінку дисперсії оцінки (або обох).

HTH

Ось такий код 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

15
Найкраще розглядати перехресну перевірку як оцінку ефективності процедури пристосування моделі, а не саму модель. Найкраще це зробити, як правило, виконати перехресну перевірку, як описано вище, а потім створити остаточну модель, використовуючи весь набір даних, використовуючи ту саму процедуру, що використовується у кожному складі процедури перехресної перевірки.
— Дікран Марсупіал

2
У цьому випадку ми тоді повідомляємо про результати класифікації на основі перехресної перевірки (можливо багато різних наборів функцій), але все ж повідомляємо, що модель містить лише один із цих наборів функцій, тобто результати перехресної перевірки класифікації не обов'язково відповідають набору функцій?
— BGreene

10
По суті так, перехресне підтвердження оцінює лише очікувані результати процесу побудови моделі, а не саму модель. Якщо набір функцій сильно відрізняється від однієї складки перехресної вальдидації до іншої, це є ознакою того, що вибір функцій є нестабільним і, ймовірно, не дуже значущим. Найчастіше найкраще використовувати регуляризацію (наприклад, регресію хребта), а не вибір функції, особливо якщо остання нестабільна.
— Дікран Марсупіал

3
Це така важлива посада. Дивно, скільки їх не застосовують.
— Кріс А.

12

Щоб додати дещо інший та більш загальний опис проблеми:

Якщо ви робите будь-який вид керованої даними попередньої обробки , наприклад

  1. оптимізація параметрів керується перехресною валідацією / вихідним завантаженням
  2. зменшення розмірності за допомогою таких методів, як PCA або PLS для отримання вхідних даних для моделі (наприклад, PLS-LDA, PCA-LDA)
  3. ...

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

Якщо попередня обробка даних керується даними 1-го типу, це призводить до "подвійної" або "вкладеної" перехресної перевірки: оцінка параметрів робиться в результаті перехресної перевірки, використовуючи лише навчальний набір "зовнішньої" перехресної перевірки. У ElemStatLearn є ілюстрація ( https://web.stanford.edu/~hastie/Papers/ESLII.pdf Сторінка 222 з друку 5).

Можна сказати, що попередня обробка насправді є частиною побудови моделі. лише попередня обробка, яка робиться

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

можна витягнути з циклу перевірки для збереження обчислень.

Так навпаки: якщо ваша модель повністю побудована знанням зовнішньої до набору конкретних даних (наприклад , ви вирішили заздалегідь великі знання , що вимірювальні канали 63 - 79 не може допомогти вирішити цю проблему, ви можете, звичайно , виключити ці канали , побудуйте модель та перехресну валідацію. Те саме, якщо ви регресуєте з PLS і вирішите, як показує ваш досвід, що 3 приховані змінні є розумним вибором (але не обіграйте, чи 2 чи 5 lv дають кращі результати), тоді ви можете йти вперед із звичайною валідацією поза завантаженням / перехресною системою.


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

Отже, якщо у мене є два набори даних, чи не буде вибору / інженерії функцій на одному з них та резюме на іншому, проблем не виникне?
— Мілош

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

@cbeleites Так, саме це я і мав намір зробити. Визначте особливості на А, потім виправте ці функції та зробіть перехресну перевірку для моделей на Б. Спасибі. :)
— Мілош

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

5

Спробуємо зробити це трохи інтуїтивно зрозумілим. Розглянемо цей приклад: у вас є двійкові залежні та два двійкові прогнози. Вам потрібна модель, що має лише один передбачувач. Обидва прогнозисти можуть сказати, що 95% можуть бути рівними залежним і 5% шансу погодитися з залежними.

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

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

На практиці оцінити ефект зовсім не банально. Цілком можливо, що ваш вибір функції обрав би ті самі функції в кожній складці, як якщо б ви це робили в цілому наборі даних, і тоді упередження не буде. Ефект також стає меншим, якщо у вас набагато більше зразків, але можливостей. Може бути корисним використовувати обидва способи зі своїми даними та подивитися, як результати відрізняються.

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


Чи можете ви детальніше розібратися про правильний спосіб вибору функцій своїм інтуїтивним прикладом? Дякую.
— uared1776
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.