Одне дерево, занадто багато пам’яті
Дерево рішень навчається шляхом рекурсивного розділення простору ознак: на кожному вузлі воно обирає ознаку та поріг, які найбільше зменшують нечистоту у двох що виникли групах, зазвичай вимірювану за допомогою нечіткості Гіні або ентропії. Якщо його ростуть достатньо глибоко, дерево може створити межу настільки специфічну, щоб кожен приклад навчання опинився у власному листі — ідеальне навчання та модель, яка фактично запам’ятала набір даних. Це класичний режим помилок дерева рішень: низька похибка, дуже висока дисперсія. Злегка змініть навчальний зразок, і структура глибокого дерева може виглядати зовсім іншою, що означає, що його прогнози для нових даних можуть суттєво коливатися залежно від того, які приклади траплялися в навчальній вибірці.
Збіг: усереднення шуму
Ідея Лео Бреймена з 1996 року про bootstrap aggregating (збіг), або bagging, є оманливо простою: витягуйте N рядків із заміною з навчального набору (bootstrap зразок), тренуйте один повний, нерозріджений дерев’яний блок на ньому та повторюйте це сотні разів. Оскільки кожен дерев’яний блок бачить трохи інший шматок даних, його окремі помилки частково незалежні від помилок інших дерев’яних блоків. Усереднення прогнозів з багатьох високоемульних, але низькопохильних моделей скасовує значну частину цієї дисперсії, майже не торкаючись похибки, яку одна деревина не може зробити самостійно. Бреймен формалізував це далі у своїй статті 2001 року "Випадкові ліси", додавши другу інгредієнт, який дає методу його назву.
Випадковий вибір ознак: розбиття дерев на частини
Бейгінг сам по собі має недолік: якщо одна ознака є справді сильною передбачуваною, майже кожна бутстрепова гілка вибере її біля кореня, тому дерева стають структурно схожими та їхні помилки залишаються корельованими — усереднення корельованих моделей видаляє набагато менше дисперсії, ніж усереднення незалежних. Random Forest вирішує цю проблему, обмежуючи, в кожному окремому розгалуженні, кандидатів ознак випадковим підмножиною — зазвичай квадратним коренем від загальної кількості ознак для класифікації або третиною цієї кількості для регресії. Це змушує різні дерева йти різними шляхами навіть при навчанні на схожих даних, декорелює ансамбль та дозволяє усереднюванню робити набагато більше роботи.
// growing a random forest of T trees over p features
for t in 1..T:
sample_t = bootstrap_sample(training_data) // N rows, drawn with replacement
tree_t = grow_tree(sample_t):
at each node:
candidates = random_subset_of_features(size = sqrt(p))
split = best_split(candidates) // minimize Gini impurity
recurse until max_depth or min_leaf_size
forest.add(tree_t)
predict(x):
votes = [tree.predict(x) for tree in forest]
return majority_vote(votes) // average(votes) for regression
Помилка вибутку: набір валідації, побудований у процесі
Вибірка N рядків із заміною з N рядків залишає без уваги, в середньому, приблизно 1/e ≈ 36,8% від початкових рядків для будь-якої заданої bootstrap вибірки — ці рядки просто ніколи не обиралися. Оскільки кожна дерево ніколи не бачило своїх власних "вибуткових" рядків під час навчання, прогнозування їх лише на основі підмножини дерев, які не включають їх, дає чесну, без упередження оцінку похибки тестування, без необхідності встановлення окремого розділу валідації або проведення крос-валідації. Ця помилка вибутку є одним із найбільш практичних зручностей випадкових лісів: вона майже безкоштовно отримується з процесу навчання.
Як ліс може розповісти вам про ваші ознаки
Оскільки кожен роз割 записує, яку ознаку він використовував і наскільки зменшив неточність, ліс може ранжувати ознаки за середнім зменшенням неточності — підсумовуючи неточність кожного ознаки по всіх розтивах у кожному дереві. Більш надійний варіант - важливість перестановки: перемішайте значення однієї ознаки в рядках поза межами, і виміряйте, наскільки падає точність OOB. Ознака, яку ліс дійсно покладається, сильно вплине на точність, коли її перемішують; ознака, яку він ігнорує, майже не рухатиме голку.
Налаштування ручок
Кількість дерев переважно обмінює час обчислень на більш гладку та стабільну криву помилок OOB — на відміну від методів бустингу, додавання більшої кількості дерев до випадкового лісу не призводить до перенавчання, а лише усереднює більше незалежних шумів. Варіативність окремих дерев, і відповідно, скільки роботи потрібно для цього усереднення, контролюється окремо за допомогою максимальної глибини та мінімальної кількості зразків на лист: більш глибокі дерева з більшими листами індивідуально менш точні, але стабільніші, що може змістити «солодке місце» ансамблю в залежності від того, наскільки шумними є дані.
Frequently asked questions
Чому випадкові ліси не перенавчаються, коли додають більше дерев?
Додавання більшої кількості дерев ніколи не збільшує дисперсію середнього ансамблю, і кожне додаткове дерево є незалежно від зразка bootstrap, тому крива помилок лісу згладжується, а не зростає, як у випадку з одним деревом, яке перенавчається при збільшенні глибини. Більше дерев лише потребує обчислювального часу; на відміну від boosting, випадкові ліси не ітеративно підлаштовуються до помилок попередньої моделі, тому немає механізму, за допомогою якого додаткові дерева можуть запам'ятати шум.
Яка різниця між bagging лише та випадковим лісом?
Bagging навчає кожне дерево на bootstrap-зразку рядків, але дозволяє кожному розгалуженню розглядати всі доступні ознаки, тому якщо одна ознака є сильним предиктором, більшість bagged дерев вибирають її біля кореня і стають корельованими між собою, що обмежує те, наскільки дисперсія зменшується за допомогою averaging. Random forest додає другий шар випадковості: на кожному розгалуженні розглядається лише випадковий підмножина ознак, змушуючи дерева йти різними шляхами і декорлюючи їх, тому середнє значення багатьох дерев зменшує дисперсію ще більше, ніж bagging лише.
Як OOB помилка відрізняється від крос-валідації?
Обидва оцінюють помилку поза зразком без використання окремого тестового набору, але k-fold крос-валідація перенавчає всю модель k разів на різних folds, тоді як OOB помилка отримується безкоштовно від одного тренувального запуску: кожен рядок оцінюється лише приблизно третиною дерев, які ніколи не бачили його в їхньому bootstrap-зразку, тому не потрібні додаткові тренувальні прогони.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте the simulation і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію the simulation