Що таке "ентропія та отримання інформації"?


338

Я читаю цю книгу ( NLTK ), і це бентежить. Ентропія є визначається як :

Ентропія - це сума ймовірності кожної мітки, що перевищує ймовірність журналу цієї ж мітки

Як можна застосувати ентропію та максимальну ентропію з точки зору видобутку тексту? Чи може хтось надати мені простий, простий приклад (візуальний)?



приємна та інтуїтивна відповідь на це питання math.stackexchange.com/questions/331103/…
Ravi G

відео для хорошого і простого пояснення
Grijesh Чаухан

Відповіді:


1048

Я припускаю, що про ентропію згадували в контексті побудови дерев рішень .

Для ілюстрації, уявіть собі завдання навчання , щоб класифікувати першокласник імен в чоловічі / жіночі групи. Це дається перелік імен, кожне з яких позначено або, 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).

https://en.wikipedia.org/wiki/File:Binary_entropy_plot.svg

Звичайно, визначення ентропії можна узагальнити для дискретної випадкової величини 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 (вимірюється в бітах як одиниці інформації ).

На кожному вузлі дерева цей обчислення виконується для кожної функції, і функція з найбільшим приростом інформації вибирається для розбиття жадібним чином (таким чином надаючи перевагу функціям, які створюють чисті розбиття з низькою невизначеністю / ентропією). Цей процес застосовується рекурсивно від кореневого вузла вниз і припиняється, коли вузол аркуша містить екземпляри, які мають один і той же клас (не потрібно розділяти його далі).

Зауважте, що я пропустив деякі деталі, які виходять за рамки цієї публікації, зокрема про те, як поводитися з числовими ознаками , відсутніми значеннями , насадкою та обрізкою дерев тощо.


1
@ all3fox: це пояснено в останньому абзаці, процес повинен зупинитися для цієї конкретної гілки, якщо він потрапить до чистого вузла (вузол листа, де всі екземпляри належать до одного класу, тому його не можна далі розділяти). Таким чином, вузол передбачає єдиний клас, який він містить ..
Amro

3
@ all3fox: на практиці проходження всього шляху до чистих вузлів створює досить глибокі дерева рішень, які страждають від перенапруження (тобто дерева, які занадто добре підходять до даних тренувань, але погано узагальнюють інші дані, які не представлені у навчальному наборі). Отже, ми зазвичай зупиняємось, коли дістаємося до певної мінімальної кількості випадків у вузлах листків (і просто прогнозуємо мажоритарний клас) та / або проводимо якусь обрізку (див. Посилання у Вікіпедії, надані вище, щоб дізнатися більше).
Amro

3
@Jas: це добре пояснено тут: en.wikipedia.org/wiki/…
Amro

1
@Rami: Так, з проблемою уникайте як перенавчання , невеликі дерева краще більші (тобто йдуть рішення з меншою кількістю тестів). Зауважте, що евристика, за допомогою якої вибираються функції розщеплення, є жадібним алгоритмом пошуку, тому генероване дерево не гарантується найменшим можливим у просторі всіх можливих дерев (а також не гарантується, що це глобально-оптимальна одна помилка класифікації wrt ). Це насправді неповна проблема ...
Amro

1
@Rami: Цікаво, що існують ансамблеві методи навчання, які застосовують інший підхід. Одна ідея - рандомізувати алгоритм навчання шляхом вибору випадкового підмножини функцій при кожному розбитті кандидата, а також побудувати купу цих випадкових дерев та усереднювати їх результат. Також варто перевірити такі алгоритми, як випадкові ліси .
Amro

45

Для початку було б найкраще зрозуміти the measure of information.

Як ми отримуємо measureінформацію?

Коли щось малоймовірне трапляється, ми говоримо, що це велика новина. Крім того, коли ми говоримо щось передбачуване, це не дуже цікаво. Отже, щоб кількісно визначити це interesting-ness, функція повинна задовольняти

  • якщо ймовірність події дорівнює 1 (передбачувана), то функція дає 0
  • якщо ймовірність події близька до 0, то функція повинна дати високу кількість
  • якщо ймовірність 0,5 події трапляються, це дає one bitінформацію.

Один природний захід, який задовольняє обмеженням, - це

I(X) = -log_2(p)

де р - вірогідність події X. І пристрій знаходиться в bitтому ж бітовому комп'ютері. 0 або 1.

Приклад 1

Справедливий фліп монети:

Скільки інформації ми можемо отримати за один монет?

Відповідь: -log(p) = -log(1/2) = 1 (bit)

Приклад 2

Якщо завтра метеор завдає удару по Землі, p=2^{-22}то ми можемо отримати 22 біти інформації.

Якщо Сонце зійде завтра, p ~ 1то це 0 біт інформації.

Ентропія

Отже, якщо ми очікуємо на interesting-nessподію Y, то це ентропія. тобто ентропія - очікуване значення цікавості події.

H(Y) = E[ I(Y)]

Більш формально, ентропія - це очікувана кількість бітів події.

Приклад

Y = 1: подія X відбувається з ймовірністю p

Y = 0: подія X не відбувається з вірогідністю 1-p

H(Y) = E[I(Y)] = p I(Y==1) + (1-p) I(Y==0) 
     = - p log p - (1-p) log (1-p)

База журналів 2 для всіх журналів.


22

Я не можу дати вам графіку, але, можливо, можу дати чітке пояснення.

Припустимо, у нас є інформаційний канал, наприклад, світло, яке блимає раз на день червоним чи зеленим. Скільки інформації вона передає? Перша здогадка може бути один біт на день. Але що робити, якщо ми додамо синій, щоб відправник мав три варіанти? Ми хотіли б мати міру інформації, яка може обробляти речі, окрім повноважень двох, але все-таки бути аддитивною (спосіб, помноживши кількість можливих повідомлень на два, додає один біт). Ми могли б зробити це, взявши журнал 2 (кількість можливих повідомлень), але виявляється, є більш загальний спосіб.

Припустимо, ми повернулися до червоного / зеленого, але червона лампа вигоріла (це загальновідомо), так що лампа повинна завжди блимати зеленою. Зараз канал марний, ми знаємо, яким буде наступний спалахтому спалахи не передають жодної інформації, жодних новин. Тепер ми ремонтуємо лампочку, але вводимо правило, що червона лампочка може не спалахнути двічі поспіль. Коли лампа блимає червоним кольором, ми знаємо, що буде наступним спалахом. Якщо ви спробуєте надіслати трохи потоку цим каналом, ви виявите, що ви повинні кодувати його з більшими спалахами, ніж у вас бітів (насправді на 50% більше). І якщо ви хочете описати послідовність спалахів, ви можете зробити це з меншою кількістю бітів. Те саме стосується, якщо кожен спалах незалежний (без контексту), але зелені спалахи частіше, ніж червоні: чим більше перекошена ймовірність, тим менше бітів потрібно для опису послідовності, і тим менше інформації, що вона містить, аж до цільнозелений, ліміт спаленої цибулини.

Виявляється, існує спосіб вимірювання кількості інформації в сигналі, виходячи з ймовірностей різних символів. Якщо ймовірність отримання символу x i є p i , то врахуйте кількість

-log p i

Чим менше p i , тим більше це значення. Якщо x i стає вдвічі меншим, це значення збільшується на фіксовану суму (log (2)). Це повинно нагадувати вам про додавання до повідомлення одного біта.

Якщо ми не знаємо, що буде символом (але ми знаємо ймовірності), то ми можемо обчислити середнє значення цього значення, скільки ми отримаємо, підсумовуючи різні можливості:

I = -Σ p i log (p i )

Це вміст інформації в один спалах.

Червона лампа вигоріла: p червона = 0, p зелена = 1, I = - (0 + 0) = 0
Червоний і зелений рівномірний: p червоний = 1/2, p зелений = 1/2 , I = - (2 * 1/2 * log (1/2)) = log (2)
Три кольори, рівноімовірні: p i = 1/3, I = - (3 * 1/3 * log (1/3)) = log (3)
Зелений і червоний, зелений вдвічі більший: p червоний = 1/3, p зелений = 2/3, I = - (1/3 log (1/3) + 2/3 log (2/3)) = log ( 3) - 2/3 журналу (2)

Це інформаційний зміст або ентропія повідомлення. Це максимально, коли різні символи є неправдоподібними. Якщо ви фізик, ви використовуєте природний журнал, якщо ви - комп'ютер, ви використовуєте журнал 2 і отримуєте біти.


10

Я дуже рекомендую вам ознайомитись з інформаційною теорією, байєсівськими методами та MaxEnt. Місцем для початку є ця (у вільному доступі онлайн) книга Девіда Макея:

http://www.inference.phy.cam.ac.uk/mackay/itila/

Ці методи висновків насправді набагато загальніші, ніж просто видобуток тексту, і я не можу реально розробити, як можна було б навчитися застосовувати це до NLP, не вивчаючи деяких загальних основ, що містяться в цій книзі чи інших вступних книгах про машинне навчання та MaxEnt bayesian методи.

Зв'язок між ентропією та теорією ймовірностей з обробкою та зберіганням інформації насправді дуже глибокий. Для смаку цього є теорема Шеннона, яка стверджує, що максимальна кількість інформації, яку ви можете без помилок передати через галасливий канал зв'язку, дорівнює ентропії процесу шуму. Існує також теорема, яка з'єднує, скільки ви можете стиснути частину даних, щоб зайняти мінімально можливу пам'ять у вашому комп’ютері до ентропії процесу, який генерував дані.

Я не думаю, що насправді потрібно вивчати всі ці теореми теорії комунікацій, але це неможливо дізнатися, не вивчивши основ того, що таке ентропія, як вона обчислюється, які стосунки є з інформацією та умовиводом тощо. ...


такі ж думки мали Рафаель. Це як запитати, що таке квантова фізика при переповненні стека, дуже широка область, яка не впорядковується однозначно.
Марк Ессель

5

Коли я впроваджував алгоритм для обчислення ентропії зображення, я знайшов ці посилання, дивіться тут і тут .

Це псевдо-код, який я використовував, вам потрібно буде адаптувати його до роботи з текстом, а не із зображеннями, але принципи повинні бути однаковими.

//Loop over image array elements and count occurrences of each possible
//pixel to pixel difference value. Store these values in prob_array
for j = 0, ysize-1 do $
    for i = 0, xsize-2 do begin
       diff = array(i+1,j) - array(i,j)
       if diff lt (array_size+1)/2 and diff gt -(array_size+1)/2 then begin
            prob_array(diff+(array_size-1)/2) = prob_array(diff+(array_size-1)/2) + 1
       endif
     endfor

//Convert values in prob_array to probabilities and compute entropy
n = total(prob_array)

entrop = 0
for i = 0, array_size-1 do begin
    prob_array(i) = prob_array(i)/n

    //Base 2 log of x is Ln(x)/Ln(2). Take Ln of array element
    //here and divide final sum by Ln(2)
    if prob_array(i) ne 0 then begin
        entrop = entrop - prob_array(i)*alog(prob_array(i))
    endif
endfor

entrop = entrop/alog(2)

Я дістав цей код десь, але не можу викопати посилання.


Існує стільки різних функцій ентропії () для зображень, але без гарного попереднього перегляду? Як можна порівняти свій код із власною ентропією Matlab () та з кодом тут mathworks.com/matlabcentral/fileexchange/28692-entropy В останньому розробник каже, що це для сигналів 1D, але користувачі продовжують розширювати його до 2D. - - Ваша функція ентропії передбачає, що вихідний сигнал є двобітним і досить спрощеним. Припустимо, це ЕКГ-сигнал MIT-BIH для АРТ (11 біт), але генерується для двовимірних зображень. Я думаю, ви тут не можете використовувати просту 2-бітну базу.
Лео Леопольд Герц 준영

5

Неофіційно

ентропія - це доступність інформації чи знань, брак інформації призведе до труднощів у прогнозуванні майбутнього, що є високою ентропією (передбачення наступних слів у видобутку тексту), а доступність інформації / знань допоможе нам реалістичніше передбачити майбутнє (низька ентропія).

Відповідна інформація будь-якого типу зменшить ентропію та допоможе нам передбачити більш реалістичне майбутнє, що інформація може бути слово "м'ясо" присутнє у реченні або слово "м'ясо" немає. Це називається збільшення інформації


Формально

ентропія - це відсутність порядку передбачуваності


0

Коли ви читаєте книгу про NLTK, вам буде цікаво читати про модуль класифікатора MaxEnt http://www.nltk.org/api/nltk.classify.html#module-nltk.classify.maxent

Для класифікації видобутку тексту кроками можуть бути: попередня обробка (токенізація, пропарювання, вибір функцій з посиленням інформації ...), перетворення на числове (частота або TF-IDF) (я думаю, що це ключовий крок для розуміння під час використання текст як вхід до алгоритму, який приймає лише числовий), а потім класифікується за допомогою MaxEnt, впевнений, що це лише приклад.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.