Я припускаю, що про ентропію згадували в контексті побудови дерев рішень .
Для ілюстрації, уявіть собі завдання навчання , щоб класифікувати першокласник імен в чоловічі / жіночі групи. Це дається перелік імен, кожне з яких позначено або, m
або f
ми хочемо вивчити модель, яка відповідає даним і може бути використана для прогнозування статі нового небаченого імені.
name gender
----------------- Now we want to predict
Ashley f the gender of "Amro" (my name)
Brian m
Caroline f
David m
Першим кроком є визначення того, які особливості даних стосуються цільового класу, який ми хочемо передбачити. Деякі приклади включають: перша / остання літера, довжина, кількість голосних, чи закінчується вона голосною тощо. Отже, після вилучення функції наші дані виглядають так:
# name ends-vowel num-vowels length gender
# ------------------------------------------------
Ashley 1 3 6 f
Brian 0 2 5 m
Caroline 1 4 8 f
David 0 2 5 m
Мета - побудувати дерево рішень . Прикладом дерева може бути:
length<7
| num-vowels<3: male
| num-vowels>=3
| | ends-vowel=1: female
| | ends-vowel=0: male
length>=7
| length=5: male
в основному кожен вузол представляє тест, виконаний на одному атрибуті, і ми йдемо вліво або вправо залежно від результату тесту. Ми продовжуємо обходити дерево до тих пір, поки не дійдемо до листяного вузла, який містить передбачення класу ( m
або f
)
Отже, якщо ми запустили ім’я Amro вниз по цьому дереву, ми почнемо з тестування " довжина <7? ", І відповідь " так" , тому ми йдемо вниз по цій гілці. Після гілки наступний тест « кількість голосних <3? » Знову оцінюється як істинний . Це призводить до появи листяного вузла m
, і, таким чином, передбачення є чоловічим (яким я буваю, тому дерево правильно передбачило результат ).
Дерево рішень побудовано способом «зверху вниз» , але питання полягає в тому, як ви обираєте, який атрибут потрібно розділити на кожному вузлі? Відповідь - знайти функцію, яка найкраще розбиває цільовий клас на найчистіші можливі дитячі вузли (тобто: вузли, які не містять суміш чоловічих і жіночих, а чисті вузли лише з одним класом).
Ця міра чистоти називається інформацією . Він представляє очікувану кількість інформації, яка потрібна для уточнення, чи слід новий екземпляр (ім’я) класифікувати чоловіком чи жінкою, враховуючи приклад, який дійшов до вузла. Ми розраховуємо його, виходячи з кількості чоловічих та жіночих класів у вузлі.
Ентропія з іншого боку - міра домішки (навпаки). Він визначається для двійкового класу зі значеннямиa
/b
як:
Entropy = - p(a)*log(p(a)) - p(b)*log(p(b))
Ця двійкова функція ентропії зображена на малюнку нижче (випадкова змінна може приймати одне з двох значень). Він досягає свого максимуму тоді, коли є ймовірність, це p=1/2
означає, що p(X=a)=0.5
або подібним чином p(X=b)=0.5
є 50% / 50% шанс бути або a
або b
(невизначеність - максимум). Функція ентропії знаходиться на нульовому мінімумі, коли ймовірність є p=1
або p=0
з цілковитою визначеністю ( p(X=a)=1
або, p(X=a)=0
відповідно, має на увазі остання p(X=b)=1
).
Звичайно, визначення ентропії можна узагальнити для дискретної випадкової величини X з N результатами (не лише двома):
( log
формула зазвичай прийнята як логарифм до основи 2 )
Повернувшись до нашої класифікації імен, давайте подивимось на приклад. Уявіть, що в якийсь момент у процесі побудови дерева ми розглядали наступний розкол:
ends-vowel
[9m,5f] <--- the [..,..] notation represents the class
/ \ distribution of instances that reached a node
=1 =0
------- -------
[3m,4f] [6m,1f]
Як бачите, до розколу у нас було 9 самців і 5 самок, тобто P(m)=9/14
і P(f)=5/14
. Відповідно до визначення ентропії:
Entropy_before = - (5/14)*log2(5/14) - (9/14)*log2(9/14) = 0.9403
Далі ми порівнюємо її з ентропією, обчисленою після розгляду розколу, переглядаючи дві дочірні гілки. У лівій гілці у ends-vowel=1
нас:
Entropy_left = - (3/7)*log2(3/7) - (4/7)*log2(4/7) = 0.9852
і праву гілку ends-vowel=0
, ми маємо:
Entropy_right = - (6/7)*log2(6/7) - (1/7)*log2(1/7) = 0.5917
Ми комбінуємо ліву / праву ентропії, використовуючи кількість примірників вниз по кожній гілці як ваговий коефіцієнт (7 екземплярів пішли вліво, а 7 екземплярів пішли праворуч), і отримаємо остаточну ентропію після розбиття:
Entropy_after = 7/14*Entropy_left + 7/14*Entropy_right = 0.7885
Тепер, порівнюючи ентропію до і після розбиття, ми отримуємо міру збільшення інформації або скільки інформації ми отримали, зробивши розкол за допомогою цієї конкретної функції:
Information_Gain = Entropy_before - Entropy_after = 0.1518
Ви можете витлумачити наведений вище обчислення наступним чином: зробивши розбиття за допомогою end-vowels
функції, ми змогли зменшити невизначеність результату передбачення піддерева на невелику кількість 0,1518 (вимірюється в бітах як одиниці інформації ).
На кожному вузлі дерева цей обчислення виконується для кожної функції, і функція з найбільшим приростом інформації вибирається для розбиття жадібним чином (таким чином надаючи перевагу функціям, які створюють чисті розбиття з низькою невизначеністю / ентропією). Цей процес застосовується рекурсивно від кореневого вузла вниз і припиняється, коли вузол аркуша містить екземпляри, які мають один і той же клас (не потрібно розділяти його далі).
Зауважте, що я пропустив деякі деталі, які виходять за рамки цієї публікації, зокрема про те, як поводитися з числовими ознаками , відсутніми значеннями , насадкою та обрізкою дерев тощо.