Разделение данных по одной оси
CART (Classification And Regression Trees, Breiman et al. 1984) классифицирует точки путем задавания последовательности вопросов «является ли признак x меньше некоторого порога t?» Каждый вопрос представляет собой одноосное разделение данных, и полученное дерево — это вложенная последовательность таких разделений, визуализированная как прямоугольники, которые режут пространство входных данных. На действительно нелинейном границе, такой как XOR, ни один единственный срез не отделяет классы, но два среза по одной оси идеально изолируют четыре квадранта, что и наблюдается уровень за уровнем в анимации автоматического роста.
Вибір найкращого розрізу з використанням показника оцінки за Гіні
На кожному вузлі CART перевіряє кожен атрибут і кожен кандидатський поріг, вибираючи той розділ, який найбільше зменшує показник оцінки за Гіні. Показник оцінки за Гіні вимірює ступінь змішаності класів у вузлі:
Показник оцінки за Гіні = 1 - Σ p_k² p_k частка зразків у вузлі, що належать до класу k Показник оцінки за Гіні = 0 вузол є чистим, всі один клас Показник оцінки за Гіні = 0.5 вузол є максимально змішаним (2 класи, 50/50) розділ_виграш = Показник оцінки за Гіні(вузол батьків) - ( n_ліве/n * Показник оцінки за Гіні(ліве) + n_праве/n * Показник оцінки за Гіні(праве)) Алгоритм жадібно обирає розділ з найбільшим розділом_виграш на кожному вузлі, незалежно рекурсуючи на лівий та правий дочірній вузол. Це жадібний, локально-оптимальний пошук: кожен розділ є найкращим доступним зараз, без перегляду розділів, які можуть виграти через два рівні глибше, тому що саме це пояснює, чому дерева рішень можна навчити приблизно за O(n*d*log n) (n зразків, d атрибутів), але вони не гарантують знаходження глобально найкращого дерева, яке підходить для даних.
Gini(node) = 1 − Σ p_k² p_k fraction of samples in the node belonging to class k Gini = 0 node is pure, all one class Gini = 0.5 node is maximally mixed (2-class, 50/50) split_gain = Gini(parent) − ( n_left/n · Gini(left) + n_right/n · Gini(right) )
Чому глибокі дерева запам’ятовують замість навчання
Якщо не обмежувати, CART продовжує розділяти дерево доти, поки кожен лист не буде чистим або міститиме лише один зразок. Це означає, що воно може створити надмірно складний межувальний простір навколо окремих шумних точок – класичний перенавчання (overfitting). На наборах даних Moons або Blobs у цій симуляції ви можете спостерігати це безпосередньо: на ранніх етапах дерево захоплює справу структуру кластерів, але вже на глибині 6–8 рівнів воно починає малювати тонкі «пальці» навколо окремих відхилених точок, межі, які не узагальнюються для нових даних. Зазвичай для вирішення цієї проблеми використовують обмеження максимальної глибини, вимагають мінімальну кількість зразків на лист або ростуть повне дерево та потім обрізають гілки, які не покращують результати валідації.
Гірна́стість Гіні проти інформаційного прибутк
Алгоритм CART (CART - Classification and Regression Trees) і гінні гірності, а також критерій інформаційного прибутк (використовується в ID3 та C4.5) майже завжди дають дуже схожі розбиття на практиці; обидва є опуклими функціями пропорцій класів, які дорівнюють нулю для чистого вузла і максимальні при рівномірному розподілі. Гінні гірності трохи дешевші у обчисленні (немає логарифму) і є стандартними в реалізації scikit-learn, що й пояснює їх більшу поширеність, хоча отримані дерева рідко суттєво відрізняються.
Від одного дерева до лісу
Одне дерево характеризується високою варіативністю: перенавчіть його на невеликому, дещо іншому зразку, і ранні розгалуження, від яких залежать всі наступні, можуть повністю змінитися. Випадкові ліси та дерева, що покращуються за допомогою градієнтів, обидва використовують механізм, показаний тут – багато дерев CART, кожне з яких навчається на буферному зразку (bootstrap resample) і випадковому підмножині ознак (forests), або кожне виправляє залишкові помилки попереднього дерева (boosting), та усереднюють або сумують їх прогнози, щоб усунути схильність однієї окремої породи до перенавчання і досягти значно кращої узагальненості, на шкоду простоті інтерпретації однієї окремої породи.
Frequently asked questions
Чому дереву потрібно два розломи для розділення даних XOR?
Оскільки кожен розлом – це прямий зріз вздовж одного осі, і жодна єдина пряма лінія не може відокремлювати діагональний класний патерн XOR. Два перпендикулярні розломи, по одному на кожній осі, правильно ізолюють усі чотири квадранти, що є мінімальною кількістю, якою потребує CART дерево для цього набору даних.
Що означає нерівномірність Гіні 0.5?
Для вузла з двома класами це означає, що класи ідеально змішані, по 50% кожен, найгірший можливий випадок для розбиття, оскільки випадкове припущення є таким же хорошим рішенням, як і будь-яке інше. Нерівномірність Гіні 0 означає, що вузол чистий, усі зразки належать до одного класу, і там більше не потрібно розбивати його.
Чому дозволення дереву рости на глибину 8 шкодить продуктивності?
Глибокі дерева продовжують розбиватися до тих пір, поки вони не адаптуються до шуму так само, як і до сигналу, створюючи вузькі пальці меж навколо окремих відхилених точок, які не відображають справній основний патерн. Це перенавчання проявляється як чудова точність на навчальних даних, але гірша точність на нових даних, тому глибина обмежена, потрібні мінімальні розміри листків або дерево обрізається після цього.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте Decision Tree Live і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію Decision Tree Live