- Дерева рішень моделюють рішення як ланцюгові питання, де ентропія та інформаційний приріст визначають вибір розбиття як для класифікації, так і для регресії.
- Розширена регресія дерева рішень, реалізована за допомогою LightGBM в машинному навчанні Azure, створює ансамблі невеликих дерев, які ітеративно виправляють залишкові помилки.
- Надмірне налаштування дерев контролюється обрізанням та такими параметрами, як глибина, розмір листя та швидкість навчання, тоді як ансамблі, такі як випадкові ліси та бустинг, покращують стійкість.
- Дизайнери можуть створювати прототипи інтерактивних дерев рішень у звичайному JavaScript, структуруючи вузли як об'єкти, керуючи навігацією (включаючи дії назад) та пізніше підключаючись до вивчених моделей.
Якщо ви дизайнер, який вже трохи грається з HTML, CSS та звичайним JavaScript, побудова дерева рішень або регресійної моделі спочатку може здаватися темною магією. У вас може бути чіткий потік рішень на папері, можливо, навіть гарний прототип Figma, але коли настає час перетворити цю логіку на інтерактивний веб-компонент або невелику прогностичну модель, раптом ніщо не виглядає таким простим, як намальована вами діаграма.
Гарна новина полягає в тому, що дерева рішень є однією з найбільш інтуїтивно зрозумілих моделей машинного навчання, яку можна реалізувати та візуалізувати в JavaScript, навіть маючи обмежений досвід кодування. Крім того, потужні посилені дерева регресії, що використовуються в таких інструментах, як Azure Machine Learning або LightGBM, дотримуються тієї ж концептуальної ідеї: послідовність питань, які поступово покращують числове прогнозування. У цьому посібнику ми поєднаємо візуальне дерево рішень, прототип якого ви хочете створити, основні концепції машинного навчання (ентропія, інформаційний приріст, обрізання, бустинг) та практичний JavaScript, який ви можете написати вже сьогодні.
Розуміння дерев рішень перед тим, як торкатися JavaScript
На дуже високому рівні, дерево рішень — це просто структурований спосіб постановки питань, де кожна відповідь відправляє вас на іншу гілку вниз, доки ви не дійдете до остаточного рішення. Уявіть, що ви заходите в ресторан: ви голодні? Якщо так, то хочете щось легке чи важке? Якщо легке, чи є в меню салати? Якщо так, то ви зрештою замовляєте салат. Ця ментальна блок-схема буквально є деревом рішень: кожне питання – це вузол, кожна відповідь – гілка, а остаточний вибір (салат, бургер, нічого) – це листок.
У машинному навчанні ми кодуємо цю саму ідею за допомогою даних: кожен рядок у наборі даних – це приклад, кожен стовпець – це атрибут, а ціль – це те, що ми хочемо передбачити. Алгоритм навчання дерева автоматично виявляє, які питання (розподіл за атрибутами) найбільше допомагають розділити дані на однорідні групи. Для класифікації листя зберігає мітку класу; для регресії листя зберігає числове значення (наприклад, ціну, бал або ймовірність).
Що робить дерева такими привабливими, особливо для дизайнерів та початківців, так це те, що їх можна інтерпретувати природним чином. Ви можете буквально прочитати дерево зверху вниз як низку правил: «Якщо навколишнє середовище низьке і немає вітру, передбачте гру = так з упевненістю». Такої прозорості ви не отримаєте від багатьох інших моделей, таких як глибокі нейронні мережі.
Щоб побудувати гарне дерево, алгоритму потрібен спосіб вирішити, яке питання поставити першим, другим тощо, і саме тут і знадобляться деякі прості математичні обчислення. Не хвилюйтеся: вам не потрібно виводити формули вручну у вашому JavaScript-коді, але розуміння ідей, що лежать в основі ентропії та інформаційного приросту, допоможе вам зрозуміти, як побудовано ваше дерево та чому деякі гілки виглядають саме так.
Ентропія та інформаційний приріст: як дерева обирають правильне питання
Ентропія — це міра невизначеності або невпорядкованості в наборі даних, і вона є центральною для того, як класичні алгоритми дерева рішень, такі як ID3 або C4.5, вирішують свої розподіли. Якщо всі приклади в підмножині належать до одного класу, ми маємо нульову ентропію: вузол ідеально чистий, немає невизначеності. Якщо класи рівномірно перемішані (наприклад, 50% так, 50% ні), ентропія максимальна, що означає, що ми дуже невпевнені, яка мітка для випадкового елемента.
Формально, якщо у нас є кілька класів і pi — частка прикладів у класі i, ентропія H(S) множини S дорівнює: H(S) = – ∑ pi * журнал2(pi). Коли один клас домінує, його pi близький до 1, логарифмічний член стає малим, а ентропія зменшується. Коли класи збалансовані, більше членів дають значний внесок, і ентропія зростає до 1 для бінарного випадку.
Інформаційний приріст вимірює, наскільки падає ентропія, якщо ми розділимо набір даних за допомогою певного атрибута, і саме так дерево вибирає найкраще питання в кожному вузлі. Для атрибута A, який може приймати різні значення v, розглянемо підмножини Sv що містять лише приклади, де A = v. Інформаційний приріст IG(S, A) дорівнює H(S) мінус зважена сума ентропій кожної підмножини. Атрибут з найбільшим інформаційним приростом забезпечує найчистіше розділення та вибирається для розщеплення.
Ось чому в багатьох прикладах, пов'язаних з погодою, ви часто бачите такі атрибути, як «Навколишнє середовище» або «Перспектива», в корені дерева. У конкретному випадку змінна середовища може мати найбільший інформаційний приріст (скажімо, близько 0.246), тобто вона найкраще розділяє рішення «грати» та «не грати». Потім, залежно від середовища, алгоритм може звернути увагу на вітер, вологість або температуру для уточнення розподілу.
Під час перевірки навченого дерева ви можете побачити такі шляхи, як: якщо Environment ≤ 1.5, перевірте Wind; якщо вітру немає, передбачте play = yes з ентропією 0.0 для п'яти зразків. Якщо є вітер, можливо, вузол має ентропію 1.0 з двома позитивними та двома негативними вибірками, тому невизначеність вища, і можуть виникнути подальші розщеплення. В інших гілках, коли Навколишнє середовище > 1.5, дерево може враховувати Вологість, і лише якщо вологість не низька, воно перевірятиме Температуру, щоб усунути неоднозначності у складних ситуаціях.
Від простого дерева рішень до дерев регресії
Досі ми говорили здебільшого про класифікацію, але ви можете використовувати точно таку ж деревоподібну структуру для регресії, де результатом є числове значення, а не дискретна мітка. Замість того, щоб зберігати «відтворювати» або «не відтворювати» на кожному листку, дерева регресії зберігають число, часто середнє цільове значення навчальних прикладів, що потрапляють на цей листок.
У деревах регресії критерій розщеплення більше не залежить від ентропії, а від таких заходів, як зменшення дисперсії або мінімізація квадратичної помилки. Кожен поділ намагається створити дочірні вузли, де цільові значення максимально схожі, щоб прогноз для кожного листка був точнішим. Іншими словами, алгоритм запитує: «Якщо я розділю дані за цим атрибутом, наскільки я можу зменшити мінливість цілі в кожній підмножині?»
Ці дерева регресії є будівельними блоками багатьох передових методів, включаючи фреймворки для підвищення градієнта, такі як LightGBM, які широко використовуються на таких платформах, як машинне навчання Azure. У цих системах зазвичай будується не одне монолітне дерево, а ансамбль дерев, кожне з яких намагається виправити помилки попередніх.
Як розробник або дизайнер JavaScript, ви можете уявляти кожне дерево регресії як трохи розумнішу версію вашої намальованої вручну блок-схеми, де «відповіді» на листках – це числа (наприклад, ціни, бали або ймовірності), а не текстові мітки. Ви все ще можете візуалізувати логіку як дерево, але сила полягає в тому, як ці дерева поєднуються та налаштовуються.
Посилена регресія дерева рішень: як ансамблі покращують точність
Бустинг – це класичний метод ансамблю, який будує багато слабких моделей (наприклад, невеликих дерев регресії) та об'єднує їх для формування сильного предиктора з набагато вищою точністю. Замість того, щоб навчати всі дерева окремо, як у випадку з "бэґґінгом" або випадковими лісами, метод "boosting" додає дерева одне за одним, де кожне нове дерево фокусується на залишкових помилках, залишених попередніми деревами.
У посиленій регресії дерева рішень, яку реалізує машинне навчання Azure за допомогою алгоритмів, таких як LightGBM, кожне нове дерево виправляє помилки поточного ансамблю, навчаючись на залишках. Ви починаєте з простої моделі, можливо, просто константного прогнозу; потім обчислюєте різницю між цим прогнозом і реальними значеннями (залишками). Наступне дерево навчається прогнозувати ці залишки, і ви додаєте його до моделі з певною швидкістю навчання. Поступово, у міру повторення цього процесу, загальний прогноз стає все кращим і кращим.
Цей процес відомий як градієнтне підвищення, а MART (множинні адитивні регресійні дерева) – це добре відома реалізація, яку використовує машинне навчання Azure для підвищення дерев. На кожному кроці алгоритм використовує диференційовану функцію втрат (наприклад, квадрат похибки) для обчислення градієнта похибки та вирішення способу коригування наступного дерева. На практиці ви отримуєте ансамбль з багатьох невеликих дерев, кожне з яких робить невеликий внесок у кінцевий числовий результат.
Хоча підвищення зазвичай покращує точність прогнозування, воно може зменшити охоплення або узагальнення, якщо не бути обережним з гіперпараметрами, такими як кількість дерев, максимальна глибина або швидкість навчання., ситуація, пов'язана з переобладнання проти недообладнання. Ви починаєте з простої моделі, можливо, просто константного прогнозу; потім обчислюєте різницю між цим прогнозом і реальними значеннями (залишками). Наступне дерево навчається прогнозувати ці залишки, і ви додаєте його до моделі з певною швидкістю навчання. Поступово, у міру повторення цього процесу, загальний прогноз стає все кращим і кращим.
Цей процес відомий як градієнтне підвищення, а MART (множинні адитивні регресійні дерева) – це добре відома реалізація, яку використовує машинне навчання Azure для підвищення дерев. На кожному кроці алгоритм використовує диференційовану функцію втрат (наприклад, квадрат похибки) для обчислення градієнта похибки та вирішення способу коригування наступного дерева. На практиці ви отримуєте ансамбль з багатьох невеликих дерев, кожне з яких робить невеликий внесок у кінцевий числовий результат.
Хоча підвищення зазвичай покращує точність прогнозування, воно може зменшити охоплення або узагальнення, якщо не бути обережним з гіперпараметрами, такими як кількість дерев, максимальна глибина або швидкість навчання. Занадто багато дерев або дуже великі дерева можуть переналаштувати ваші навчальні дані, тоді як надмірно низький коефіцієнт навчання з занадто малою кількістю дерев може не налаштувати їх належним чином і не врахувати важливі закономірності.
Важливо пам'ятати, що посилена регресія дерева рішень – це метод навчання з учителем, що означає, що ви повинні надати позначений набір даних із числовим цільовим стовпцем. Мітки (цілі) мають бути числовими, оскільки алгоритм оптимізує неперервні функції втрат; якщо у вас є категорії, ви або перетворюєте їх на числа, або використовуєте варіант класифікації посилених дерев.
Ключові параметри конфігурації в деревах, що підтримуються машинним навчанням Azure
Коли ви використовуєте розширений компонент регресії дерева рішень у конструкторі машинного навчання Azure, ви, по суті, налаштовуєте, як буде створюватися та навчатися ваш ансамбль дерев. Цей компонент обгортає ефективну реалізацію на основі LightGBM, але надає доступ до найважливіших функцій у зручному інтерфейсі користувача, щоб ви могли експериментувати, навіть якщо не пишете код безпосередньо в цьому середовищі.
Перший вибір, з яким ви стикаєтеся, — це режим створення тренера, який визначає, чи встановлюєте ви одну конфігурацію, чи досліджуєте діапазон гіперпараметрів. У режимі «Один параметр» ви вручну вибираєте значення для таких речей, як швидкість навчання, кількість листя та кількість дерев: це зручно, якщо ви вже маєте гарне уявлення про те, чого хочете. У режимі «Діапазон параметрів» ви вказуєте інтервали для кожного параметра, а потім окремий компонент, такий як «Налаштування гіперпараметрів моделі», автоматично пробує всі комбінації, щоб знайти ті, які забезпечують найкращу продуктивність.
Ще одним важливим параметром є максимальна кількість листя на дерево, яка ефективно контролює складність кожного окремого дерева в ансамблі. Більше листків означає більше кінцевих вузлів і детальніші правила. Це може підвищити точність навчальних даних, але також підвищує ризик перенавчання та збільшує час навчання. Менша кількість листків робить кожне дерево простішим і може покращити узагальнення, хоча й ціною можливого пропуску тонких закономірностей.
Вам також потрібно визначити мінімальну кількість зразків, необхідних у кожному кінцевому вузлі, що встановлює поріг того, наскільки детальними можуть бути ваші правила. Зі значенням за замовчуванням, рівним 1, навіть один навчальний приклад може сформувати новий листок, що може призвести до того, що модель запам'ятає шум. Підвищення цього мінімуму, скажімо, до 5, змушує кожне правило охоплювати щонайменше п'ять прикладів з однаковими умовами, згладжуючи модель і часто покращуючи її здатність до узагальнення.
Швидкість навчання — це значення від 0 до 1, яке визначає, наскільки великий крок робить кожне нове дерево під час виправлення помилок з попереднього ансамблю. Висока швидкість навчання змушує модель навчатися швидко, але ризикує перевищити оптимальне рішення; дуже низька швидкість робить навчання стабільнішим, але може вимагати набагато більшої кількості дерев і довшого часу навчання. Знаходження хорошого балансу є ключем до сильної моделі.
Кількість побудованих дерев контролює, скільки разів ви повторюєте крок підвищення, тобто скільки слабких учнів об'єднується в кінцеву модель. Вище число зазвичай забезпечує краще покриття, але також збільшує ймовірність перенавчання та збільшує обчислювальні витрати. Встановлення цього значення на 1 по суті вимикає бустинг і залишає вас з одним деревом регресії, яке може бути простішим для інтерпретації, але зазвичай менш точним.
Машинне навчання Azure також дозволяє встановлювати випадкове початкове значення для ініціалізації, що корисно для отримання відтворюваних результатів у різних запусках з однаковими даними та параметрами. Якщо залишити значення за замовчуванням 0, платформа отримує початкове значення з системного годинника, тому кожен навчальний запуск може створювати дещо різні дерева. З фіксованим початковим значенням ви можете легше налагоджувати та порівнювати моделі.
Після налаштування компонента, для навчання моделі потрібно лише підключити його до позначеного набору даних та використовувати компонент «Навчання моделі» або компонент налаштування гіперпараметрів, залежно від обраного режиму. Після навчання ви можете підключити отриману модель до компонента «Модель оцінювання», щоб робити прогнози щодо нових вхідних даних, а також зареєструвати навчену модель у дереві компонентів для повторного використання в інших конвеєрах без перенавчання.
Перенав'язування, обрізка та чому дерева можуть стати занадто розумними
Один з найбільших ризиків під час роботи з деревами рішень, як у простій формі, так і як частина ансамблів розширених або випадкових лісів, полягає в надмірному налаштуванні та розумінні... компроміс між упередженням та дисперсією допомагає пояснити, чому модель може стати настільки складною, що вона запам'ятовує навчальні дані замість того, щоб вивчати загальні правила. Теоретично дерево може продовжувати розщеплюватися, доки кожен листок не відповідатиме одній навчальній вибірці, досягаючи ідеальної точності на відомих даних, але погано показуючи результати на невидимих прикладах.
Обрізка є стандартним засобом від надмірного налаштування в деревах рішень, і це по суті означає обрізання гілок або обмеження росту дерев, щоб модель залишалася досить простою. Багато бібліотек та фреймворків надають такі параметри, як максимальна глибина, мінімальна кількість вибірок на лист або мінімальна кількість вибірок на розщеплення, які контролюють, як і коли створюються нові гілки. Збільшення цих порогів змушує дерево бути більш консервативним у своїй поведінці розщеплення.
Наприклад, у scikit-learn Python часто використовуються такі параметри, як max_depth, min_samples_leaf та min_samples_split для регуляризації дерев. Менше значення max_depth обмежує кількість рівнів питань, які може ставити дерево. Більше значення min_samples_leaf гарантує, що кожен листок представляє групу прикладів, достатньо велику, щоб бути статистично значущою. Більше значення min_samples_split запобігає створенню моделі нових гілок з вузлів з дуже малою кількістю вибірок.
Навіть якщо ви не використовуєте scikit-learn безпосередньо в JavaScript, ті самі ідеї застосовуються, якщо ви реалізуєте власну деревоподібну логіку або якщо ви вручну розробляєте структуру рішень. Завжди слід запитувати себе, чи справді нова гілка являє собою стабільний шаблон, чи просто шум у даних. У деревах рішень, орієнтованих на користувача, надзвичайно глибокі або дуже специфічні гілки також можуть заплутати користувачів і зробити інтерфейс важчим для розуміння.
Моделі з підсиленням та ансамблем пом'якшують деякі проблеми перенавчання, поєднуючи багатьох слабких учнів, але вони все ще можуть перенавчатися, якщо гіперпараметри занадто агресивні. Контроль кількості дерев, їхньої глибини, швидкості навчання та умов регуляризації є критично важливим у виробничих умовах, таких як машинне навчання Azure. Для інтерактивного дизайну зазвичай простіше – це краще, як з точки зору UX, так і з точки зору надійності.
Від єдиного дерева рішень до випадкових лісів
Якщо одне дерево рішень є потужним, але крихким, то випадковий ліс подібний до комітету дерев, які голосують разом, щоб досягти більш стабільного прогнозу. Ідея проста: ви навчаєте багато дерев рішень, кожне з яких бачить дещо іншу підмножину даних та атрибутів, а потім агрегуєте їхні результати. Для класифікації вони голосують за найпоширеніший клас; для регресії ви усереднюєте їхні числові прогнози.
Випадкові ліси вводять випадковість двома основними способами: вибірка навчальних прикладів із заміною (бутстрепова вибірка) та вибір випадкової підмножини атрибутів для кожного розбиття. Ця випадковість робить кожне дерево дещо іншим, тому вони не всі копіюють однакові помилки. При поєднанні помилки окремих дерев мають тенденцію зводити до мінімуму, що призводить до більш надійної моделі.
З точки зору надмірного налаштування, випадкові ліси часто узагальнюють краще, ніж одне глибоке дерево, оскільки кожне дерево обмежене в тому, що воно бачить і як воно розщеплюється, а кінцевий прогноз є середнім значенням з багатьох точок зору. Іншими словами, дисперсія моделі зменшується, і ви отримуєте стабільнішу поведінку на різних наборах даних.
Для тих, хто має досвід дизайну, можна уявити собі випадковий ліс як набір дещо різних карт рішень, створених різними дизайнерами, кожна з яких використовує дещо різні критерії, а потім агрегатор, який розглядає їх усі та вибирає консенсусну відповідь. Жодна карта не обов'язково має бути ідеальною; мудрість народжується в групі.
Хоча ця стаття зосереджена на деревах рішень та прискореній регресії загалом, інтуїція, що стоїть за випадковими лісами, буде дуже корисною, коли ви пізніше дослідите більш просунуті бібліотеки JavaScript або Python, які надають доступ до API лісів та ансамблів. Основний будівельний блок завжди один і той самий: дерево рішень, яке ви тепер розумієте.
Дерева рішень для навчання: навички, значки та структуроване навчання
Кілька навчальних шляхів та курсів з машинного навчання структурують свій зміст чітко навколо дерев рішень, часто нагороджуючи значками або сертифікатами після виконання всіх завдань. Ці програми зазвичай починаються зі вступу до дерев рішень, а потім переходять до таких тем, як як знайти найкращий розкол за допомогою ентропії, індекс Джині або інформаційний приріст, як і чому обрізати дерева, а також як дерева порівнюються з лінійними моделями.
По дорозі ви можете розглянути дерева рішень для класифікації, дерева рішень для регресії та компроміси між простотою моделі та прогностичною силою. Для багатьох учнів дерева є алгоритмом-воротом до машинного навчання, оскільки вони відповідають тому, як люди природно мислять у гілках та правилах. Візуалізація навченого дерева робить очевидним, чому модель зробила певний вибір, що є чудовим способом розвитку інтуїції.
Курси середнього рівня зазвичай поєднують концептуальні пояснення з практичними вправами з кодування такими мовами, як Python, з використанням бібліотек, таких як scikit-learn. Ви можете реалізувати дерево на невеликому наборі даних про погоду, вручну обчислити ентропію та інформаційний приріст, а потім дозволити бібліотеці виконати важку роботу та візуалізувати кінцеву структуру. Ці дії допоможуть вам пов'язати математичні розрахунки з фактичною поведінкою моделі.
Навіть якщо вашою метою зрештою є реалізація логіки рішень або дерев регресії в JavaScript, виконання деяких вправ на Python може бути дуже повчальним, оскільки більшість навчальних ресурсів та пояснень наразі написані в цій екосистемі. Як тільки ви звикнете до цього процесу, перенесення основних ідей на звичайний JS — або виклик бекенд-сервісу з вашого фронтенду — стане набагато легшим.
Завершення такого курсу зазвичай означає, що ви впевнено володієте ентропією, інформаційним приростом, стратегіями обрізання, класифікаційними та регресійними деревами, а також розумієте, коли дерева перевершують прості лінійні моделі, а коли вони можуть бути не найкращим вибором. Ці фундаментальні навички саме те, що вам потрібно, перш ніж ви почнете створювати складніші ансамблі, такі як посилені дерева, випадкові ліси або градієнтно-посилені дерева рішень у виробничих середовищах.
Побудова клікабельного дерева рішень у звичайному JavaScript
Повернімося до вашої конкретної проблеми: у вас є намальоване дерево рішень, і вам потрібен інтерактивний прототип на простому JavaScript, без фреймворків, в ідеалі щось на кшталт CodePen, який можна налаштувати. Багато людей знаходять демо-версії, такі як старі ручки, які візуалізують дерева та надають UX-функції, такі як «Показати батьківські елементи» або «Назад», і плутаються, коли видалення рядків коду раптово призводить до зникнення всього дерева.
Основна причина, чому дерево зникає після видалення, здавалося б, не пов'язаних між собою частин, полягає в тому, що ці частини часто відповідають за ініціалізацію, рендеринг або оновлення візуалізації. Наприклад, ви можете видалити код, який налаштовує слухачі подій або викликає функцію рендерингу, припускаючи, що вона призначена лише для додаткових опцій інтерфейсу користувача, але насправді ця функція також будує початкове дерево під час завантаження. Після її видалення графік на екрані більше не відображатиметься.
Якщо вам потрібна лише проста кнопка «Назад» для переміщення між вузлами, вам насправді не потрібна складна бібліотека; вам потрібен лише зрозумілий спосіб представлення дерева в JavaScript та невелика кількість маніпуляцій з DOM. Поширеною схемою є зберігання дерева як вкладеного об'єкта, де кожен вузол має запитання або заголовок, список дочірніх вузлів та, за бажанням, посилання на батьківський вузол. Потім ви відстежуєте поточний вузол у змінній та повторно відображаєте запитання та відповіді щоразу, коли користувач клацає.
Щоб реалізувати функцію «Назад», можна зберегти шлях, яким пройшов користувач, у масиві (стеку) та вивести попередній вузол при натисканні кнопки. Або ж кожен вузол може безпосередньо посилатися на свого батьківського вузла, тож повернення назад так само просто, як встановлення currentNode = currentNode.parent та повторний рендеринг. Цей підхід використовує прості структури даних, але забезпечує саме ту поведінку UX, яку ви хочете.
Якщо ви змінюєте існуючий CodePen, зверніть увагу на будь-який код ініціалізації, який виконується під час завантаження сторінки, та будь-які обробники подій, приєднані до кнопок або посилань. Перш ніж видаляти функцію, знайдіть місце її використання: якщо це єдине місце, яке викликає процедуру малювання для дерева, вам потрібно буде зберегти її або замінити альтернативою. Ви також можете рефакторинг коду, витягнувши чисту логіку рендерингу в окрему функцію та викликавши її як під час завантаження сторінки, так і під час подій навігації, водночас безпечно видаливши непов’язані функції, такі як «показувати батьківські елементи».
Оскільки ви згадали про бажання мати мінімальний вигляд у звичайному JS, подумайте про те, щоб почати з дуже маленького прототипу, який просто відтворює текстові вузли та кнопки для вибору. Щойно основна навігація запрацює ідеально, а кнопка «Назад» поводиться належним чином, ви можете крок за кроком її покращувати: додавати CSS-стилі, можливо, SVG-конектори між вузлами, і лише потім досліджувати бібліотеки для більш просунутих макетів.
Від прототипів дерев інтерфейсу користувача до реальних регресійних моделей
Існує важлива відмінність між деревом рішень інтерфейсу користувача, яке ви жорстко кодуєте для переходу користувачів по ньому, та справжньою моделлю дерева регресії, яка навчається на основі даних, але вони мають однакову концептуальну структуру. В обох випадках у вас є вузли з умовами, гілки на основі відповідей та листки, які видають певний результат, будь то рекомендація чи число.
Для інтерфейсу, створеного вручну, ви самі розробляєте всі питання та результати, фактично граючи роль алгоритму навчання. У контексті машинного навчання, навпаки, такий алгоритм, як градієнтне бустинг, вивчає ці розщеплення з набору даних, керуючись такими критеріями, як ентропія, інформаційний приріст або зменшення дисперсії. Ви не вказуєте дерево безпосередньо; натомість ви надаєте приклади та дозволяєте алгоритму виявити структуру.
Практичний робочий процес полягає в тому, щоб спочатку реалізувати дерево інтерфейсу користувача, яке відповідає вашому поточному розумінню проблеми, а потім, у міру збору реальних даних, замінити розроблену вручну логіку вивченою моделлю. Цю модель можна навчити на Python або Azure Machine Learning, експортувати у JSON або інший портативний формат, а потім завантажити вашою програмою JavaScript. Кожне дерево або ансамбль можна представити як вкладені об'єкти, які ваш фронтенд обходить для створення прогнозів або пояснення для користувача.
У деяких продуктах команди поєднують обидва підходи: вивчену модель для обчислення числового балу або рекомендації та окреме дерево, розроблене людиною, для структурування того, як питання ставляться в інтерфейсі. Наприклад, ваша модель може оцінювати ймовірність успіху, тоді як дерево інтерфейсу користувача організовує питання таким чином, щоб це було природно для користувачів і відповідало ментальній моделі, яку ви отримали в результаті дослідження користувачів.
Розуміння теоретичної сторони — ентропії, інформаційного приросту, градієнтного бустінгу, перенавчання та обрізання — допомагає вам зрозуміти, коли структура вашого інтерфейсу може бути оманливою або коли дерево вивченої моделі надмірно складне та потребує обмежень. Маючи ці знання, ви можете розробляти візуалізації та взаємодії, які не лише добре виглядають, але й точно відображають те, як базова модель приймає рішення.
Загалом, дерева рішень пропонують особливо зручний місток між візуальним дизайном, інтуїтивним мисленням та ретельним машинним навчанням, саме тому вони так помітно представлені в курсах, значках та на таких платформах, як Azure Machine Learning. Як тільки ви зрозумієте основи та потренуєтесь з кількома простими прототипами JavaScript, ви будете в сильній позиції для вивчення складніших ансамблів, таких як посилені регресійні дерева та випадкові ліси, а також для інтеграції цих моделей у реальні веб-додатки, не відчуваючи себе розгубленим.
