🌲 Класифікатор Random Forest
Подивіться, як bootstrap-агрегація та випадковий відбір ознак перетворюють слабкі дерева рішень на надійний ансамбль. Порівняйте одне перенавчене дерево з лісом із 50 дерев, із живою межею рішень та OOB-похибкою.
Про цю симуляцію
Ця симуляція навчає справжній класифікатор випадковий ліс (random forest) прямо у вашому браузері: ансамбль до 100 дерев рішень, кожне з яких вирощується на власній бутстреп-вибірці (вибірка з поверненням із набору даних) і розбиває вузли за випадковою підмножиною ознак — за замовчуванням √p з них, за оригінальним алгоритмом Бреймана. Кожне дерево жадібно обирає розбиття, яке максимізує зменшення домішку, виміряне через домішок Джині або ентропію, аж до максимальної глибини. Точки, що не потрапили до бутстреп-вибірки дерева, стають його набором out-of-bag (OOB), що дозволяє лісу оцінювати власну помилку узагальнення без окремого тестового набору — це справжня реалізація алгоритму, а не готова анімація.
🔬 Що це показує
2D-задачу бінарної чи багатокласової класифікації (Moons, Circles, Blobs або XOR) із живою межею рішення, зафарбованою за усередненими ймовірностями класів лісу. П'ять окремих дерев відображаються як маленькі мініатюри поруч з ансамблем, тож видно, як кожне окреме дерево перенавчається на власній бутстреп-вибірці, тоді як агрегований голос згладжує ці помилки в одну спільну межу. Стовпчик важливості ознак для кожного з двох вхідних вимірів обчислюється із загального зменшення домішку, яке ця ознака вносить у кожне розбиття кожного дерева.
🎮 Як користуватися
Оберіть форму набору даних і рівень шуму, потім встановіть кількість дерев Trees (1–100), максимальну глибину Max depth (1–12), Min samples split, кількість ознак на розбиття Features per split (1, √p або всі) та критерій розбиття Criterion (Джині або ентропія). Натисніть Train Forest, щоб побудувати бутстреп-вибірки та виростити всі дерева; смуга прогресу й мініатюри окремих дерев оновлюються по ходу навчання. Спробуйте пресет Single tree, щоб побачити одне глибоке перенавчене дерево, а потім порівняйте його з Small forest чи Large forest, щоб побачити, як межа стабілізується з ростом кількості дерев, що голосують. Клацніть лівою кнопкою миші на полотні, щоб додати точку класу 0, правою — для класу 1, і перенавчіть модель, щоб урахувати її.
💡 Чи знали ви?
Лео Брейман формалізував алгоритм випадкового лісу в 2001 році, поєднавши беггінг (bootstrap aggregating) з випадковим вибором ознак при кожному розбитті — два джерела випадковості, які декорелюють дерева, тож їхні помилки частково взаємно скасовуються при усередненні. Оскільки приблизно 37% даних (1/e у границі великої вибірки) виключаються з будь-якої окремої бутстреп-вибірки, ці «поза мішком» (out-of-bag) точки дають лісу вбудовану, незміщену оцінку помилки — саме те, що показує статистика OOB error у цій симуляції.
Поширені запитання
Що таке випадковий ліс і чим він відрізняється від одного дерева рішень?
Випадковий ліс — це ансамбль багатьох дерев рішень, чиї прогнози об'єднуються усередненням (для ймовірностей) або голосуванням більшості (для класів). Одне дерево рішень, особливо глибоке, схильне перенавчатися на своїх навчальних даних і чутливе до незначних змін у них. Навчаючи кожне дерево на іншій бутстреп-вибірці й дозволяючи йому враховувати лише випадкову підмножину ознак при кожному розбитті, ліс будує дерева, які помиляються по-різному; усереднення цих прогнозів скасовує значну частину індивідуального перенавчання, даючи гладшу та надійнішу межу рішення, ніж будь-яке окреме дерево ансамблю.
Що таке бутстреп-агрегування (беггінг) і як воно використовується тут?
Бутстреп-агрегування означає створення нового навчального набору для кожного дерева шляхом вибірки з поверненням з початкового набору даних, тож бутстреп-вибірка має той самий розмір, що й початкова, але містить дублікати та пропуски. У цій симуляції кожне дерево отримує власну бутстреп-вибірку, згенеровану початковим генератором псевдовипадкових чисел, перед тим як вирощуватися, — точно так само, як в оригінальній процедурі беггінгу, запропонованій Лео Брейманом у 1996 році й пізніше розширеній до випадкових лісів у 2001 році.
Як симуляція обирає, за якою ознакою та порогом розбивати вузол?
У кожному вузлі дерево спочатку обмежується випадковою підмножиною з двох доступних ознак відповідно до налаштування Features per split (1, √p ≈ 1 для задачі з двома ознаками, або всі). Для кожної ознаки-кандидата воно перевіряє кожну середню точку між сусідніми відсортованими значеннями як поріг і обчислює зменшення домішку — домішок Джині чи ентропію батьківського вузла мінус зважену домішку двох дочірніх підмножин. Обирається розбиття з найбільшим зменшенням домішку, і процес рекурсивно повторюється, доки вузол не стане чистим, не досягне Max depth або не опуститься нижче Min samples split.
Чим домішок Джині відрізняється від ентропії і чи має значення вибір між ними?
Обидва показники вимірюють, наскільки перемішані класи у вузлі: домішок Джині — це одиниця мінус сума квадратів часток класів, а ентропія — сума −p·log₂(p) за всіма класами. Обидва дорівнюють нулю для чистого вузла й досягають максимуму, коли класи представлені порівну. Вибір того чи іншого як Criterion у цій симуляції змінює, яке розбиття-кандидат оцінюється найкращим у кожному вузлі, але на практиці обидва критерії зазвичай дають дуже схожі дерева — Джині обчислюється трохи швидше, а ентропія трохи чутливіша до балансу класів.