Я не впевнений, що ви хочете зробити на етапі 7а. Як я це зараз розумію, для мене це не має сенсу.
Ось як я розумію ваш опис: на кроці 7 ви хочете порівняти ефективність витримки з результатами перехресної перевірки, що охоплює кроки 4 - 6. (так, так, це було б вкладеною установкою).
Основні моменти, чому я не думаю, що це порівняння має багато сенсу:
Це порівняння не може виявити два основних джерела результатів надмірної валідації, з якими я стикаюсь на практиці:
витоки даних (залежність) між навчальними та тестовими даними, які викликані ієрархічною (інакше кластеризованою) структурою даних, і яка не враховується при розщепленні. У моєму полі ми, як правило, множинні (іноді тисячі) читання (= рядки в матриці даних) одного і того ж пацієнта або біологічні копії експерименту. Вони не є незалежними, тому розбиття валідації потрібно проводити на рівні пацієнта. Однак таке витік даних трапляється, ви матимете його як у розбитті для набору витримки, так і в розбитті міжперехресної перевірки. Тоді витримка повинна бути настільки ж оптимістично упередженою, як і перехресне підтвердження.
Попередня обробка даних проводиться на всій матриці даних, де обчислення не є незалежними для кожного рядка, але багато / всі рядки використовуються для обчислення параметрів для попередньої обробки. Типовими прикладами можуть бути, наприклад, проекція PCA перед "фактичною" класифікацією.
Знову ж таки, це вплине як на вашу витримку, так і на зовнішню перехресну перевірку, тому ви не можете її виявити.
Для даних, з якими я працюю, обидві помилки можуть легко призвести до недооцінки частки класифікацій на порядок!
Якщо ви обмежуєтесь цією підрахованою часткою тестових випадків типу продуктивності, для порівняння моделей потрібні або надзвичайно велика кількість тестових випадків, або смішно великі відмінності у справжній продуктивності. Порівняння двох класифікаторів з необмеженими даними про навчання може бути хорошим початком для подальшого читання.
Однак, порівнюючи якість моделі, заявки на внутрішню перехресну валідацію для "оптимальної" моделі та зовнішню перехресну валідацію чи витримку перевірки має сенс: якщо розбіжність велика, сумнівно, чи спрацювала оптимізація пошуку в сітці (можливо, у вас є знежирена дисперсія через високу дисперсію міри продуктивності). Це порівняння простіше тим, що ви можете помітити неприємності, якщо внутрішня оцінка є смішно хорошою порівняно з іншими - якщо це не так, вам не потрібно так сильно переживати за оптимізацію. Але в будь-якому випадку, якщо ваше зовнішнє (7) вимірювання продуктивності є чесним і надійним, ви, принаймні, маєте корисну оцінку отриманої моделі, оптимальна вона чи ні.
Вимірювання кривої навчання ІМХО - це ще одна проблема. Я б , ймовірно , мати справу з цим окремо, і я думаю , що вам потрібно , щоб більш ясно , що вам потрібно криве навчання для (вам потрібно криві навчань для визначення в наборі даних даного завдання, даних і методу класифікації або криве навчання для цього набору даних даної проблеми, даних та класифікаційного мехтоду) та купі подальших рішень (наприклад, як поводитися зі складністю моделі як функцією розміру вибіркового тренінгу? Оптимізувати все заново, використовувати фіксовані гіперпараметри, вирішити функція для фіксації гіперпараметрів залежно від розміру навчального набору?)
(Мої дані, як правило, мають так мало незалежних випадків, щоб визначити криву навчання достатньо точною, щоб використовувати її на практиці - але вам може бути краще, якщо ваші 1200 рядків насправді незалежні)
оновлення: Що "не так" у прикладі scikit-learn?
Перш за все, тут немає нічого поганого з вкладеною перехресною валідацією. Вкладена валідація має надзвичайно важливе значення для оптимізації, керованої даними, і перехресне підтвердження є дуже потужним підходом (особливо, якщо повторне / повторне).
Тоді, чи взагалі щось не так, залежить від вашої точки зору: якщо ви робите чесну вкладену перевірку (зберігаючи суворо незалежні дані зовнішніх тестів), зовнішня перевірка є належним показником ефективності "оптимальної" моделі. Нічого поганого в цьому немає.
Але декілька речей можуть і не помилитися з пошуком сітки цих заходів щодо пропорційного типу для налаштування гіперпараметрів SVM. В основному вони означають, що ви (напевно?) Не можете розраховувати на оптимізацію. Тим не менше, якщо ваш зовнішній розкол був виконаний належним чином, навіть якщо модель не найкраща, ви маєте чесну оцінку продуктивності отриманої вами моделі.
Я спробую дати інтуїтивні пояснення, чому оптимізація може спричинити проблеми:
Математично / статистично кажучи, проблема пропорцій полягає в тому, що виміряні пропорції підлягають величезній дисперсії через кінцевий розмір тестового зразка (залежно також від справжньої продуктивності моделі, ): прВг( р )=р(1-р)p^np
Var(p^)=p(1−p)n
Вам потрібна смішно величезна кількість справ (принаймні порівняно з кількістю справ, які я, як правило, маю), щоб досягти необхідної точності (зміщення / зміщення дисперсії) для оцінки виклику, точності (сенс виконання машинного навчання). Це звичайно стосується також співвідношень, які ви обчислюєте з таких пропорцій. Подивіться на довірчі інтервали для біноміальних пропорцій. Вони шокуюче великі! Часто більше, ніж справжнє поліпшення продуктивності над сіткою гіперпараметра. І статистично кажучи, пошук сітки - це велика проблема багаторазового порівняння: чим більше точок сітки ви оцінюєте, тим вище ризик знайти деяку комбінацію гіперпараметрів, яка випадково виглядає дуже добре для розбиття поїздів / тестів, які ви оцінюєте. Це те, що я маю на увазі під варіантом скимінгу.
Інтуїтивно розглянемо гіпотетичну зміну гіперпараметра, що повільно призводить до погіршення моделі: один тестовий випадок рухається до межі рішення. Заходи щодо "жорсткої" пропорції не виявляють цього, поки справа не перетне кордон і не стане на стороні. Тоді, однак, вони негайно призначають повну помилку для нескінченно малої зміни гіперпараметра.
Для того, щоб зробити чисельну оптимізацію, вам потрібно добре поводитись із показником ефективності. Це означає: ані стрибкована (не безперервно диференційована) частина показника продуктивності пропорційного типу, ні той факт, що крім цього стрибка, фактично не виявлені зміни, не підходять для оптимізації.
Правильні бали визначаються таким чином, що особливо підходить для оптимізації. Вони мають свій глобальний максимум, коли передбачувані ймовірності відповідають справжній ймовірності для кожного випадку належності до відповідного класу.
Для SVM у вас є додаткова проблема, що не тільки ефективність, але і модель реагує таким стрибковим способом: невеликі зміни гіперпараметра нічого не змінять. Модель змінюється лише тоді, коли гіперпараметри є достатньо зміненими, щоб змусити якийсь випадок перестати бути вектором підтримки або стати вектором підтримки. Знову ж таки, такі моделі важко оптимізувати.
Література:
- Браун, Л.; Cai, T. & DasGupta, A .: Оцінка інтервалу для біноміальної пропорції, Статистична наука, 16, 101-133 (2001).
- Cawley, GC & Talbot, NLC: Про надмірну відповідність вибору моделі та наступні зміщення вибору в оцінці продуктивності, Journal of Machine Learning Research, 11, 2079-2107 (2010).
Gneiting, T. & Raftery, AE: Строго правильні правила балів, прогнозування та оцінка, Журнал Американської статистичної асоціації, 102, 359-378 (2007). DOI: 10.1198 / 016214506000001437
Бретон, Р .: Хемометрія для розпізнавання візерунків, Вілі, (2009).
вказує на стрибкову поведінку SVM як функції гіперпараметрів.
Оновлення II: Відхилення від знежирення
що ви можете собі дозволити з точки зору порівняння моделі, очевидно, залежить від кількості незалежних випадків. Давайте зробимо тут кілька швидких та брудних моделей щодо ризику зменшення скромності:
scikit.learn
говорить, що їх 1797 є в digits
даних.
- припустимо, що порівнюється 100 моделей, наприклад, сітка для 2 параметрів.10×10
- припустимо, що обидва параметри (діапазони) взагалі не впливають на моделі,
тобто всі моделі мають однакову справжню продуктивність, скажімо, 97% (типова продуктивність для digits
набору даних).
Виконайте моделювання "тестування цих моделей" з розміром вибірки = 1797 рядків у наборі даних104digits
p.true = 0.97 # hypothetical true performance for all models
n.models = 100 # 10 x 10 grid
n.rows = 1797 # rows in scikit digits data
sim.test <- replicate (expr= rbinom (n= nmodels, size= n.rows, prob= p.true),
n = 1e4)
sim.test <- colMaxs (sim.test) # take best model
hist (sim.test / n.rows,
breaks = (round (p.true * n.rows) : n.rows) / n.rows + 1 / 2 / n.rows,
col = "black", main = 'Distribution max. observed performance',
xlab = "max. observed performance", ylab = "n runs")
abline (v = p.outer, col = "red")
Ось розподіл найкращих спостережуваних показників:
Червона лінія позначає справжню ефективність усіх наших гіпотетичних моделей. В середньому ми спостерігаємо лише 2/3 справжнього коефіцієнта помилок для, здавалося б, найкращого з 100 порівняних моделей (для моделювання ми знаємо, що всі вони працюють однаково з 97% правильними прогнозами).
Це моделювання, очевидно, дуже спрощено:
- На додаток до дисперсії розміру тестового зразка є щонайменше дисперсія через нестабільність моделі, тому ми тут недооцінюємо дисперсію
- Налаштування параметрів, що впливають на складність моделі, зазвичай охоплює набори параметрів, де моделі нестабільні і, отже, мають велику дисперсію.
- Для цифр UCI з прикладу оригінальна база даних має приблизно. 11000 цифр, написаних 44 особами. Що робити, якщо дані кластеруються відповідно до особи, яка написала? (Тобто легше розпізнати 8, написаний кимось, якщо ви знаєте, як ця людина пише, скажімо, 3?) Ефективний розмір вибірки тоді може становити до 44.
- Налаштування гіперпараметрів моделі може призвести до кореляції між моделями (насправді це вважатиметься добре сприйнятим з точки зору числової оптимізації). Важко передбачити вплив цього (і я підозрюю, що це неможливо без врахування фактичного типу класифікатора).
Однак загалом, як низька кількість незалежних тестових випадків, так і велика кількість порівняних моделей збільшують упередженість. Також папір Cawley and Talbot дає емпіричну спостережувану поведінку.