Подробно обяснена теория и практика

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

Останалата част от статията е разделена на два раздела:

  • Интуиция и история. Обяснява произхода и дава кратко описание на всеки метод за обучение в ансамбъл.
  • Практическа демонстрация. Разработва стъпка по стъпка всеки метод за обучение в ансамбъл. За тази цел е представен и малък синтетичен набор от данни, който да помогне с обясненията.

Всички изображения, освен ако не е отбелязано друго, са от автора.

Интуиция и история

Пакетиране

Терминът е дефиниран за първи път от Breiman (1996) [1] и е акроним за Bootstrap Aggregation. За този ансамбъл всяко дърво на решенията използва като входни данни начална извадка от обучителния набор от данни. Извадката за стартиране е произволно избрана проба със замяна, което означава, че наблюденията могат да се появят веднъж, повече от веднъж или никога. След това всички прогнози се комбинират с помощта на статистика като средната стойност. Случайна гора[2] използва тази техника (наред с други) и е един от най-успешните и широко използвани методи за ансамбъл.

Подсилване

Keans и Valiant (1988, 1989) [4][5] оставиха отворен следния въпрос: Може ли набор от слаби учащи да създадат един силен учащ се? През 1990 г. утвърдителният отговор на Schapire [6] доведе до развитието на усилване. Повишаването, за разлика от пакетирането, използва по-итеративен подход, при който дърветата се обучават последователно. На наблюденията е присвоено тегло и всяко дърво е изградено по адитивен начин, присвоявайки по-големи тегла (по-голяма важност) на грешно класифицираните наблюдения в предишните обучаеми. Има много алгоритми за повишаване, но първият, който се възползва напълно от слабите учащи се е AdaBoost[7], формулиран от Freund и Schapire през 1995 г.

Градиентно усилване

Брейман предложи „Машина за усилване на градиента“ [9], която също използва итеративен подход, при който дърветата се обучават последователно. Въпреки това, вместо да имат тегла за актуализиране, дърветата отговарят на псевдо остатъците на предишното дърво. Първите псевдо остатъци са резултат от изваждане на реалната стойност от средната стойност на изходната характеристика. Много алгоритми като XGBoost [10], CatBoost[11] или LightGBM [12] се основават на тази техника.

Практическа демонстрация

Практическата демонстрация е силно вдъхновена от Youtube канала на Josh Starmer. Ако искате визуално и изключително стегнато обяснение на почти всеки модел или техника за машинно обучение, просто вижте!

Отказ от отговорност: данните са направени специално, така че резултатите да показват какво се очаква. Това не означава, че техниките са безпогрешни или че могат да се сравняват една с друга.

Данни

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

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

Създадените данни имат 10 клиента и 6 характеристики:

  • Квадратни метри: числени
  • Ако къщата има гараж: Булева стойност
  • Ако къщата има градина: Булева стойност
  • Брой стаи: Числен
  • Цена: Категорична или цифрова

Както беше казано по-рано, ценовата характеристика ще бъде категорична или цифрова в зависимост от обяснения ансамбъл от дърво.

Пакетиране

Първо, не забравяйте, че bagging е акроним за Bootstrap Aggregation. Тези две думи са водещи, така че нека започнем с първата: bootstrap. Следният код изгражда 5начални проби от 7 наблюдения от данните, генерирани в предишния раздел.

Както беше дефинирано по-горе, произволно избраните проби се извършват със замяна, поради което пробите имат повтарящи се индекси. Следващата стъпка обучава слаб обучаем за всяка проба. В този случай избраният обучаем е Класификаторът на дървото на решенията от scikit-learn [15]

След като всяко дърво е обучено, нека се потопим в първата проба и съответното дърво. Първата стартираща извадка имаше наблюденията [6, 0, 2, 2, 7, 6, 8], така че това са наблюденията, използвани от дървото за обучение. Индуцираното дърво показва, че може правилно да класифицира всяко наблюдение освен едно (наблюдение = 0). Ако следвате дървото, е ясно, че ще бъде класифицирано като НИСКО, докато цената всъщност е СРЕДНА. Въпреки това можем да кажем, че представянето на дървото е донякъде добро.

Въпреки това, погледнете отново индексите за наблюдение, има само 5 уникални стойности [0, 2, 6, 7, 8], така че първото дърво взема само 50% от извадката за обучение . По този начин получената точност може да бъде подвеждаща. За да разберем по-добре ефективността на дървото на решенията, ще предвидим целия набор от данни (10 наблюдения) с всяко дърво на решенията. Освен това, нека използваме втората дума, която съставлява bagging: агрегиране. Нашият силен обучаем (наречен bagging) ще вземе най-честата прогноза от петте обучени дървета.

Както можем да видим по-долу, по отношение на точността слабите обучаеми (дървета) се представят по-зле индивидуално от силнитеобучаеми (пакетиране).

Подсилване

Повишаването, за разлика от пакетирането, обучава дърветата последователно. Първото дърво се обучава с всички данни. В следното дърво грешно класифицираните наблюдения получават по-висока тежест (класификаторът на дървото на решенията на scikit learn има параметър за тегла). Това тегло позволява на дървото да фокусира повече върху определени наблюдения. Тук имаме кода, използван за прилагане на усилващ ансамбъл.

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

Имайте предвид, че дървото не може да научи правилно наблюденията [0, 6, 9]. Така че, според теорията за усилване и кода, тези наблюдения ще имат по-високи тегла във второто дърво.

Както виждаме, второто дърво, обучено с актуализираните тегла, е в състояние да научи правилно по-рано грешно класифицираните наблюдения [0, 6, 9]. По-високите тегла, присвоени на тези индекси, са принудили дървото да ги научи правилно. Процесът на обучение на дървото обаче се промени и за останалите наблюдения. Сега не успява да научи наблюдения [3, 4, 7].

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

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

Градиентно усилване

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

Първото нещо, което ще направим, е да изчислим първите псевдо остатъци(residuals_0), коитоса резултат от изваждане на средната стойност цена от реалната стойност на цената.

Средната абсолютна грешка (MAE) при прогнозиране на стойностите с помощта на средната стойност за всяко наблюдение е 100397,68. Това е показателят, който ще бъде подобрен с всяко обучено дърво. Като се има предвид това, нека обучим първото дърво с псевдо остатъцитепоказани преди като цел.

Забележете, че всеки краен възел има различен брой проби. В първия отляво има само едно наблюдение. Съответства на наблюдение с индекс 1, чийто псевдо остатъке -138461.4. Във втория последен възел отляво надясно има 5 проби, които съответстват на наблюдения с индекси [0, 2, 3, 6, 7]. Предвидената остатъчна стойност от дървото (-72705) е средната стойност на 5-те споменати остатъци. Тези стойности ще бъдат известни предварително като предвидени псевдо остатъци.

За да предвидим реални ценови стойности с това първо дърво, трябва да направим следната операция.

Прогнозите, показани по-долу, постигат MAE от 70347,53, което подобрява MAE, постигнато преди, чрез прогнозиране само със средната стойност (100397,68). С тези прогнози можем да изчислим следващите псевдо остатъци (residuals_1), които са резултат от изваждане на прогнозите на първото дърво (predictions_0 ) от реалната стойност на цената.

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

Досега беше включено само едно дърво, но преди казахме, че градиентното усилване използва няколко дървета последователно. Време е да обучите второто дърво и за тази цел предварително изчислените остатъци (residuals_1) ще се използват като цел. Второто обучено дърво изглежда по следния начин:

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

Единствената разлика с първото дърво е, че използвахме псевдопредсказанията за остатъци на първото и второто дърво (residual_predictions_1иresidual_predictions_1) за правене на прогнозите(предсказания_1). Вместо да прави агрегиране на прогнозите, както се прави при пакетиране и усилване, градиентното усилване добавя към средната цена малки порции информация за всяко дърво (скорост на обучение * остатъци преди дърво x ).

След обучение на 5 дървета можем ясно да видим как MAE е намален в следните резултати. Всяка итерация осигурява по-добро обучение и е ясно, че обединението на всички дървета осигурява по-добри показатели, отколкото използването им поотделно.

Заключение

Тази статия е предназначена да бъде ръководство стъпка по стъпка, което обяснява как работят различните методи за обучение на ансамбъл: Бегиране, Подсилване и Усилване на градиент.

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

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

Препратки

[1] Breiman, L. Предсказатели за натрупване на торбички. Машинно обучение 24, (1996): 123–40. https://doi.org/10.1007/BF00058655.

[2] Breiman, L. Случайни гори. Машинно обучение 45, (2001): 5–32. https://doi.org/10.1023/A:1010933404324.

[3] Източник на изображение: https://www.researchgate.net/figure/The-bagging-approach-Several-classifier-are-trained-on-bootstrap-samples-of-the-training_fig4_322179244

[4] Kearns, M. «Мисли за повишаване на хипотезата», непубликуван ръкопис (класен проект за машинно обучение) (1988)

[5] Kearns, M; Валиант, Л. „Криптографски ограничения върху изучаването на булеви формули и крайни автомати“. Симпозиум по теория на изчисленията 21, (1989): 433–444 https://dl.acm.org/doi/10.1145/73007.73049

[6] Schapire, R.E. „Силата на слабата обучаемост“. Машинно обучение5, (1990): 197–227 https://doi.org/10.1007/BF00116037

[7] Freund, Y.; Schapire, R.E. (1995). „Теоретично обобщение на вземането на решения за онлайн обучение и приложение за повишаване“. Теория на компютърното обучение,(1995) https://doi.org/10.1007/3-540-59119-2_166

[8] Източник на изображение: https://www.researchgate.net/figure/Training-of-an-AdaBoost-classifier-The-first-classifier-trains-on-unweighted-data-then_fig3_306054843

[9] Friedman, J.H. Апроксимация на алчна функция: Машина за повишаване на градиента The Annals of Statistics 29 (2001). https://doi.org/10.1214/aos/1013203451.

[10] Chen, Tianqi и Carlos Guestrin. XGBoost: Мащабируема система за увеличаване на дървото Сборници от 22-рата международна конференция на ACM SIGKDD за откриване на знания и извличане на данни(2016). https://doi.org/10.1145/2939672.2939785.

[11] Дорогуш, А.В.; Ершов, В.; Гулин. A. CatBoost: Градиентно усилване с поддръжка на категорични функции». ArXiv:1810.11363, 24 (2018). http://arxiv.org/abs/1810.11363.

[12] Ке, Г.; Meng, Q.; Финли, Т; Уанг, Т; Чен, W; Ма, W; Да, Q; Liu, T. LightGBM: Високоефективно дърво за вземане на решения с градиентно усилване. Напредък в системите за обработка на невронна информация, 20 (2017). https://proceedings.neurips.cc/paper/2017/hash/6449f44a102fde848669bdd9eb6b76fa-Abstract.html.

[13] Източник на изображение: https://www.researchgate.net/profile/Karem-Abdelmohsen/publication/339077244/figure/fig3/AS:855596286877696@1581001459188/Schematic-diagram-of-a-tree-based-gradient -boosting-method.png

[14] StatQuest с Джош Стармър (канал в YouTube): https://www.youtube.com/c/joshstarmer

[15] https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html