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

Контролирано обучение

„Надгледаното обучение е задачата на машинното обучение за изучаване на функция, която преобразува вход към изход въз основа на примерни двойки вход-изход.“ — Стюарт Дж. Ръсел, Питър Норвиг (2010), Изкуствен интелект: Модерен подход

Както споменахме преди, за всяка информация X в контролирано обучение, тя ще има целева стойност Y и нашата цел е да обучим модел, f, който максимизира наградата, с други думи, минимизира разходите. За да постигнем тази цел, първо трябва да дефинираме функцията за загуба. Функцията за загуба е функция за санкциониране на грешките при прогнозиране на всяка точка от данни. Съществуват различни типове функция на загуба в зависимост от проблема и модела. Например

  • Квадратна загуба (използвана при линейна регресия)

където x е входът, а y е целевата стойност

  • Загуба на панта (използвана в SVM)

  • 0/1 загуба (използвана в дефиницията на точност)

Обобщавайки функцията на загубата върху целия набор от данни, ще получим функция на разходите. Понякога това ще добави някакво наказание за сложност на модела (регуляризация), напр. SVM.

  • Средна квадратна грешка: средна квадратична загуба

  • Цена на SVM

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

Линейна регресия

Научаваме линейната регресия като наш първи модел. Да предположим, че искаме да предвидим следващите данни или има тенденция в набора от данни (напр. цена на акциите), можем да използваме линейна регресия, за да я решим. Например графиката на реалните цени на жилищата в Обединеното кралство, както видяхме вчера. Имаме данни за предишна цена на жилище и има тенденция в тази графика. След това можем да получим линията от линейна регресия и да предвидим бъдещата цена по тази линия.

Като се има предвид наборът от данни X и целевата стойност Y, нашата цел е да намерим линия или хиперравнина f(X), която минимизира функцията на разходите. Първо, дефинирайте функцията на разходите за линейна регресия

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

Има и други опции за определяне на функцията за разстояние за загуба. Например, използвайте абсолютна разлика вместо квадрат. Ние избираме квадратна загуба за нейното предимство. Той е диференцируем, така че можем да изчислим неговия градиент и да използваме градиентния метод.

Дефинирайте

Искаме да научим θ от набора от данни. Използвайте вектори за представяне на MSE

Нашата цел е да намерим

Има 2 метода за решаване на този проблем. Единият е аналитичен метод, който дава затворена форма на решение. Знаем, че необходимото условие за оптимална точка е всички градиенти да са равни на 0, което означава, че всички частни производни са равни на 0. Чрез този метод ще получим

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

Алгоритъм за градиентно спускане

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

където J е функцията на разходите тук. Искаме да намерим точката, която минимизира тази функция.

Как да разберем тази точка? Получаваме го чрез проба и грешка! Интуицията е доста проста. Искаме да имаме по-малка стойност след всяка итерация.

Да предположим, че имаме посока d и можем да получим по-малка стойност чрез тази посока. Дефинираме newPoint = oldPoint + α*d, където α е параметърът за контрол на това колко далеч отиваме от посоката d. Сега имаме

Чрез теоремата на Тейлър можем да изразим J(newPoint) като

Игнорирайте O(α²), тъй като е твърде малък. По (1) и (2) можем да знаем това

Ние поставихме

което удовлетворява (3). Наричаме това d посока на най-стръмно спускане, тъй като то гарантира, че има по-малка стойност при всяка итерация.

Ако не се чувствате комфортно с цялата тази математика, не се притеснявайте и просто я пропуснете. Нека визуализираме концепцията с 2D диаграма, за да стане ясна.

Да предположим, че имаме функция на разходите J и искаме да получим минималната точка чрез промяна на θ. Има 2 случая:

  1. θ е от дясната страна на минималната точка и искаме да накараме θ да върви в лява посока. Знаем, че производната на θ е положителна и искаме да вървим в отрицателна посока, така че трябва да извадим производната, която става

  1. θ е от лявата страна на минималната точка и искаме да накараме θ да върви в правилната посока. Знаем, че производната на θ е отрицателна и искаме да вървим в положителна посока, така че трябва да извадим отрицателната, за да стане положителна

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

Отново, не се губете от цялата тази математика, какво искаме да направим на първо място? Искаме да намерим посока, която, ако следваме тази посока, ще гарантира всеки път по-малка стойност. Просто преминете през тази посока итеративно, в крайна сметка ще получим нашата минимална точка. По математика, която току-що прегледахме, посоката d е минус на градиента на функцията на разходите. Сега имаме нашия алгоритъм за градиентно спускане.

Има други хиперпараметри, които трябва да решим, като размер на стъпката или критерии за спиране. Размерът на стъпката е нашето α в предишната част. Обикновено ще продължи да намалява, но аз просто го поддържам просто и го задавам на константа в частта за изпълнение. Има няколко начина за задаване на критерии за спиране. Можем да кажем само 10 000 пъти. Също така можем да зададем праг, ако промените между нова точка и стара точка са по-малки от този праг, можем да спрем, тъй като това означава, че получаваме минималната точка.

Комбинирайте градиентна прилична и линейна регресия

За линейна регресия имаме MSE за функцията на разходите

А за градиентно спускане искаме да изчислим

кое е

Актуализирайте нашия θ as

До конвергенция. И това θ е коефициентът на нашия модел.

Програмирането му

Тъй като искаме да визуализираме резултата, ние разглеждаме само двумерно пространство, което означава само една характеристика на данните. За да опростим формулата, да предположим, че f(x) = b + m*x. Искаме да изчислим производните по отношение на m и b, което е

Помислете за набор от данни за диабет в sklearn

В този набор от данни има 10 функции. Тук разглеждаме само характеристиката на ИТМ. Първо дефинирайте нашата функция на разходите MSE.

След това изчислете производните по отношение на m и b.

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

Можете да намерите цялата реализация чрез тази връзка. Чувствайте се свободни да си играете с него!

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