Въведение

Преди да навлезем в детайлите на техниките за кръстосано валидиранеи тяхното приложение, ще видим какви са стъпките в тръбопровода за машинно обучение. Това ще ни помогне да визуализираме по-добре целта на извършването на кръстосано валидиране.

За да разберем кръстосаното валидиране,трябва да знаем няколко неща, които са включени в създаването на модел. Да предположим, че имаме набор от данни с 10k записа. Въз основа на горния поток ще извършим разделяне на тест за влак. Наборът за обучение и валидиране ще бъде около 70% или повече/по-малко въз основа на изискването. Останалите данни ще бъдат набор за тестване.

Това означава, че разделяме данните в набор за обучение, за да обучим нашия модел. По-късно тествайте точността на нашия модел с помощта на набора за тестване.

Сега идва въпросът как избираме тези комплекти за обучение и тестване. Така че ние основно избираме на случаен принцип записите за обучение и тестване. Произволният избор ще гарантира, че типът записи, присъстващи в тестовия наборсъщо присъстват в обучителния набори обратно. За да направим това, обикновено използваме параметърна променлива, наречена произволно състояние. Можем да предадем произволно цяло число на тази променлива и тя произволно ще избере стойностите от набора от данни.

Но почакай!! Въпреки че това звучи добре, има по-голям недостатък на този подход на произволно избиране на записите за трениране и тестване на разделянето.

Да предположим, че предаваме стойността за произволно състояние =50 и получаваме точност от 90%. Сега, ако стартирам кода отново, като предам произволно състояние = 100, няма да можем да получим същия резултат като преди. Това колебание на точността ще направи нещата трудни, докато се опитваме да предадем нашите резултати.

Така че всеки път, когато променим стойността за случайното състояние,ще имаме колебания в стойностите за точност. За да смекчим този проблем, ще използваме Кръстосано валидиране.

Нека да проверим какви са различните видове кръстосано валидиране, които съществуват:

1. Оставете един извън кръстосаното валидиране

За да разберем концепцията за Leave one out Cross Validation,ще разгледаме набор от данни, който има 10k записа. При тази техника за кръстосано валидиране ние основно ще вземем един запис като набор за тестване, а останалите като набор за обучение.

Защрихованата в синьо зона е комплектът за тестване, а защрихованата в кафяво зона е комплектът за обучение.

Този подход е по-скоро като подход на груба сила, при който преминаваме през всеки един елемент от набора от данни, като разглеждаме един елемент наведнъж за набора за тестване, а останалите като набора за обучение.

Недостатъци

Този подход изглежда доста ясен, но има някои основни недостатъци:

  1. Ние преминаваме през всеки един елемент и избираме един елемент като набор за тестване, а останалите като набор за обучение. Това е подход, който отнема много време и изисква интензивни изчисления.
  2. Този процес ще доведе до състояние на ниско отклонение. Причината, поради която ще има ниско отклонениее, че преглеждаме всяка точка от данни тук. Това може да доведе до прекомерно състояние. Сега, ако изпълним същия модел върху нов набор от данни, това може да доведе до висока дисперсия. Това ще доведе до ниска точност с висок процент на грешки.

2. K Fold кръстосано валидиране

Това е най-често използваната техника за кръстосано валидиране, която използваме, докато обучаваме нашите модели. За да го разберем, трябва да повторим недостатъка на използването на случайното състояниедокато правим разделянето на теста за влак.

Всеки път, когато променим случайното състояние,нашите данни за обучениеи тестсе избират произволно, което също промени точността на модела всеки път.

За да предотвратим тази флуктуация на точността, ще използваме подхода K Fold Cross Validation.

При този подход трябва да изберем стойността за Kкоято всъщност е броят на експериментите, които искаме да извършим върху нашия набор от данни.

Сега, нека разберем това с пример.

Да предположим, че имаме 10K записа в нашия набор от данни и стойността K, която избираме тук, е 10. Фигурата по-долу показва как тези данни се разделят като Тестово разделяне на влакза 10 итерации тъй като нашата Kстойност е 10.

So, K = 10000/10 => 1000

Това означава, че всеки Тестов сплитще има 1000 записа.

Нека се опитаме да разберем как работи Кръстосаното валидиране на K Fold.

В първата итерация първият набор от 1000 записа ще се счита за Тестово разделение. Останалото ще бъде Разделение на влака. По подобен начин за втория експеримент/итерация, следващият блок от 1000 записа ще се счита за Тестово разделение.

Първият блок и останалите блокове след 2-рия блок от Тестови записище се считат за Разпределение на влака. Този процес ще продължи до края на 10-ия експеримент/итерация. За всеки експеримент/итерация ще получим точността на модела, докато стигнем до края на експеримента/итерацията.

Въз основа на резултатите, които получаваме за точността, бихме могли да вземем средната стойност от всичките 10 резултата за точност и да предоставим общия резултат за модел производителност или можем също да предоставим горната граница и процент на долна граница за модела, определящ модела производителност.

Недостатъци

Сега нека разгледаме няколко недостатъка на K Fold Cross Validationкоито съществуват:

За да предотвратим тази ситуация, използваме друга техника за кръстосано валидиране, наречена Стратифицирано кръстосано валидиране.

3. Стратифицирано кръстосано валидиране

Стратифицираното кръстосано валидиране е подобно на кръстосаното валидиране на K Fold. В това също ще използваме стойността K и след това ще разделим набора за тестване и обучение въз основа на нея, както направихме в K Folds.

Единствената разлика тук е, че във всеки експеримент/итерация произволната извадка, която се попълва във влака и теста, се разпределя по такъв начин, че стойностите на всеки екземпляр ще присъстват и в двата.

Да вземем примера на двоичната класификация, където данните имат само 2 екземпляра — 0/1. При прилагане на стратифицираното кръстосано валидиране,наборът от обучениеи тестще бъде разделен по такъв начин, че стойностите на всеки екземпляр (0/1 ) ще присъства както в комплекта за влака, така и в комплекта за тестване. Ето как се справяме с недостатъка на K Fold Cross Validation.

Сега последната техника, която трябва да знаем, е Кръстосано валидиране на времеви серии.

4. Кръстосано валидиране на времеви редове

И така, както подсказва името, тази техника на кръстосано валидиранеще се използва за данни от времеви серии. В този случай не можем просто да направим разделяне на тест за тренировкана данни от времеви серии, за да намерим точността.

За да разберем това, нека вземем примера с ежедневните продажби на магазин. Да приемем, че имаме данните за продажбите за 5 дни и искаме да предвидим продажбите за 6-ия до 10-ия ден.

За да прогнозираме продажбите от 6-ия до 10-ия ден, трябва да използваме данните за продажбите за първите 5 дни.

Както можете да видите на изображението по-долу, ние използваме 5-те дни продажби, за да предвидим продажбата за 6-ия ден.

След това отново използваме вече дадените продажби и прогнозираните продажби за 6-ия ден, за да прогнозираме продажбата за 7-ия ден.

Този процес продължава, докато прогнозираме продажбата до 10-ия ден.

Сега нека внедрим всичко, което обсъждахме досега в код и да видим как работи!!

Можете да изтеглите набора от данни от Kaggle. Освен това кодът е качен в github.

  1. https://scikit-learn.org/stable/modules/cross_validation.html
  2. https://www.cs.cmu.edu/~schneide/tut5/node42.html

Първоначално публикувано в https://ai-ml-analytics.com на 2 юли 2020 г.