GBDT или Gradient Boosting Decision Trees е популярен алгоритъм за машинно обучение или алгоритми за усилване, или можем да кажем, че е модел на ансамбъл, който комбинира множество слаби обучаеми (дървета на решения), за да създаде силен обучаем и да прави по-точни прогнози. Нека се опитаме да разберем това чрез този пример. Представете си, че сте художник, който иска да създаде картина на пейзаж. Започвате, като скицирате очертанията на пейзажа, но картината ви не е много точна. Например, да кажем, че цветовете са малко по-различни. След това показвате картината си на друг художник, който има повече опит от вас, този втори художник, който е наистина добър в смесването на цветовете, взема вашата картина и прави някои промени в нея, например добавяне на повече детайли към пейзажа и прави някои корекции на цветовете за да изглеждат по-добре. Но след това композицията на картината не беше съвсем правилна, така че този втори художник след това показва картината на трети художник, който е страхотен в композицията, направи някои промени в нея, правейки я още по-точна. Този процес продължава с все повече и повече художници, които правят подобрения на картината, докато тя се превърне в шедьовър, който точно изобразява пейзажа. По същия начин GBDT работи чрез обучение на множество дървета на решения. тук всеки художник представлява дърво на решенията в алгоритъма GBDT. Първото дърво на решенията е първоначалната картина, която не е много точна. Второто дърво на решенията се обучава да коригира грешките, направени от първото дърво и т.н. Всяко следващо дърво на решения подобрява предходното, което прави крайната прогноза по-точна. Така че, точно както група художници могат да създадат красив пейзаж, като работят заедно и надграждат взаимно силните си страни. По същия начин GBDT може да създаде по-точни прогнози чрез комбиниране на силните страни на множество дървета на решения и това е силата на обучението в ансамбъл!

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

Всяко дърво на решенията в GBDT се учи слабо, което означава, че не е особено добро в правенето на точни прогнози само по себе си. Въпреки това, ако комбинираме много слаби обучаеми (т.е. всяко дърво на решения), може да се постигне силна прогнозна производителност или Можем да кажем, че работи чрез итеративно добавяне на дървета на решения към ансамбъл, като всяко дърво се опитва да коригира грешките, направени от предишните дървета означава всяко дърво не се обучава от нулата. Вместо това следващите дървета се обучават да подобряват прогнозите на предишните дървета. По-конкретно, той първо обучава дърво на решенията върху набора от данни и изчислява грешката между прогнозираните и действителните стойности. След това обучава ново дърво на решения върху остатъчните грешки от предишното дърво и добавя това ново дърво към ансамбъла.

Сега, нека се опитаме да разберем това математически, приемем, че имаме набор от данни от n проби, {(x1, y1), (x2, y2), …, (xn, yn)}, където xi е вектор на входните характеристики, а yi е съответната целева променлива. Искаме да изградим модел f(x), който може точно да предвиди целевата променлива y при нов вход x.

GBDT започва с обучение на дърво на решения T1 върху набора от данни, за да предвиди целевата променлива y. Прогнозираните стойности на T1 са представени като ŷi¹.

След това изчисляваме остатъчните грешки, ei = yi — ŷi¹.

След това обучаваме второ дърво на решения T2 върху остатъчните грешки ei, за да предвидим оставащите грешки в целевата променлива, които не са били уловени от T1. Прогнозираните стойности на T2 са представени като ŷi².

Крайната прогноза за GBDT се дава от сумата от прогнозите на всички дървета на решенията:

f(x) = Σj=1M fj(x) = ŷi¹ + ŷi² + … + ŷi^M

където M е общият брой дървета на решенията в ансамбъла и fj(x) е предсказанието на j-тото дърво на решенията.

В GBDT коригираме стойностите на коефициентите, теглата или отклоненията, приложени към всяка от входните променливи, използвани за прогнозиране на целевата стойност, и го правим чрез минимизиране на функция на загуба, която измерва разликата между прогнозираните стойности и истинските стойности на целевата променлива (За проблеми с регресията, най-честата функция на загубата, използвана в GBDT, е средната квадратна грешка (MSE) - Тя измерва средната квадратна разлика между прогнозираните стойности и истинските стойности на целевата променлива, а за проблемите с класификацията е загуба на кръстосана ентропия Измерва разликата между прогнозираните класови вероятности и истинските класови вероятности). По принцип по време на всяка итерация на GBDT добавяме ново дърво на решенията към ансамбъла и коригираме теглата и други параметри на съществуващите дървета, за да намалим грешката между прогнозираните и истинските стойности на целевата променлива. Тук в играта влиза градиентно спускане, започваме, като задаваме първоначалните стойности на параметрите на модела на някои произволни стойности (може да е 0 или произволно число) и като използваме текущите стойности на параметрите, изчисляваме функцията на загубата. След това изчисляваме градиента на функцията на загубата по отношение на всеки параметър. Тъй като градиентът е вектор, който ни казва посоката на най-стръмно изкачване за функцията на загуба и ни показва в коя посока трябва да се движат стойностите на параметрите, за да се увеличи функцията на загубите, така че можем да актуализираме стойностите на параметрите, като се движим в противоположната посока посока на градиента. Сега актуализираме стойностите на параметрите, като се движим в обратната посока на градиента. Това означава, че изваждаме градиента от текущите стойности на параметрите, за да получим актуализираните стойности на параметрите. Като се движим в обратна посока на градиента, гарантираме, че се движим към минимума на функцията на загубата.

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

X = {x1, x2, …, xn}

Можем да кажем, че връзката между входовете и изхода като сбор от дървета на решенията, т.е. y = Σf(x)
където f(x) представлява предсказание на дървото.

Както беше обсъдено по-рано, най-честата функция на загуба, използвана в GBDT за регресионни проблеми, е средната квадратна грешка (MSE),

можем да запишем това като L(y, Σf(x)) = (1/n)Σ(y — Σf(x))² (средната квадратна разлика между предвидените стойности и истинската стойности на целевата променлива)
където n е броят на извадките в набора от данни.

За да минимизираме функцията за загуба, ние използваме градиентно спускане, което е итеративен алгоритъм за оптимизация. Градиентът на функцията на загуба по отношение на прогнозата за всяко дърво може да се изчисли като:

g(x) = ∂L(y, Σf(x))/∂f(x)

Можем да използваме този градиент, за да актуализираме прогнозата на всяко дърво в ансамбъла:

f(x) = f(x) — скорост на учене * g(x)

По подобен начин ние използваме загубата на кръстосана ентропия за проблеми с класификацията и тя може да бъде дефинирана като:

L(y, Σf(x)) = — (1/n)Σ(y * log(p) + (1-y) * log(1-p)) (измерва разликата между предвидените класови вероятности и истинските класови вероятности)

където p е прогнозираната вероятност за положителния клас.

Градиентът на крос-ентропийната загуба може да се изчисли като:

g(x) = ∂L(y, Σf(x))/∂p

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

f(x) = f(x) — скорост на учене * g(x)

Тук learning_rate е хиперпараметър, който контролира размера на стъпката на актуализацията.

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

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