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


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.