ML: Баєсівські методи
Вступ
У задачах машинного навчання та алгоритмах штучного інтелекту важливу роль відіграє формула Баєса. Документ є продовженням вступу до теорії ймовірностей і присвячений різним аспектам застосування цієї формули.
Формула Баєса
Нехай є $n$ несумісних (неперетинних) подій $\{H_1,...,H_n\}$, $H_i\,\cap\,H_j=\varnothing$, які далі називатимуться гіпотезами. Передбачається, що одна з них істинна (обов'язково відбувається у випробуванні): $$ \sum_i P(H_i) = 1. $$ У найпростішому випадку може бути дві несумісні гіпотези, які полягають у тому, що деяке твердження $D$ або істинне, або хибне:
Будемо вважати, що відомі ймовірності гіпотез $P(H_i)$. Їх можна отримати зі спостережень (вище — це частка хворих у популяції — objectivist interpretation) або це може бути ступінь «переконаності» або «віри» в істинність гіпотези тим, хто приймає деяке рішення (subjectivist interpretation). Ці ймовірності називають апріорними («до досвідні», лат. «a priori»).
Коли настає деяка подія $E$ (що несе нову інформацію),
вона може змінити ймовірності гіпотез на апостериорні ймовірності $P(E\to H_i)$
(отримані з досвіду, лат. «a posteriori»).
Вони визначаються формулою Баєса:
$$
P(E\to H_i) ~=~ \frac{P(E,H_i)}{P(E)} ~=~ \frac{P(H_i)\,P(H_i\to E)}{P(E)}.
$$
Ймовірність події $P(E)$ для повних (що покривають усі випадки) і несумісних
гіпотез обчислюється за формулою повної ймовірності:
$$
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~P(E) ~=~ \sum_j P(H_j)\,P(H_j\to E) ~=~ \sum_j P(E,\,H_j).
$$
У результаті сума $P(E\to H_i)$ по всіх $H_i$ дорівнює одиниці
(істинна одна з гіпотез).
За формулою Баєса апостериорна ймовірність $P(E\to H_i)$ пропорційна апріорній ймовірності $P(H_i)$, помноженій на «функцію правдоподібності» (likelihood) $P(H_i\to E)$ події $E$ для гіпотези $H_i$. Зокрема, якщо ймовірність події не залежить від істинності гіпотези $P(H_i\to E)=P(E)$, то апріорна ймовірність не змінюється: $P(E\to H_i)=P(H_i)$.
Часто накопичити статистику для обчислення ймовірностей $P(H_i\to E)$ простіше, ніж для $P(E\to H_i)$. Наприклад, у випадку $H:$ «людина хвора на дану хворобу», можна взяти групу хворих і обчислити по ній імовірність $P(H\to E)$ для симптому $E$. Водночас симптом $E$ може виникати з безлічі найрізноманітніших причин (хвороб), відмінних від хвороби $H$.
Крім цього ймовірності $P(H\to E)$ часто стабільніші, ніж $P(E\to H)$. Наприклад, нехай почалася епідемія. Тоді ймовірність $P(H)$ зростає, а $P(H\to E)$ залишаться незмінними. За формулою Баєса $P(E\to H)$, звичайно, також збільшиться.
Приклад: Тестування хвороби
| $p$ | ${n}$ | Tot | |
|---|---|---|---|
| $d$ | 9 | 1 | 10 |
| $\bar{d}$ | 90 | 9900 | 9990 |
| Tot | 99 | 9901 | 10000 |
Будемо замість подій говорити про випадкові величини, що приймають два значення
Гіпотеза $H=\{d,\bar{d}\}$, де
$d$ — «людина хвора на хворобу $D$» і
$\bar{d}$ — «людина не хвора на цю хворобу»;
Подія $~E=\{p,n\}$, де $p$ — тест позитивний, $n$ — тест негативний:
$$
P(d\to p) = 0.9,~~~~~~~P(\bar{d}\to p) = 0.009,~~~~~~P(d) = 0.001.
$$
Праворуч у таблиці наведено статистику (в особах), на підставі якої отримано оцінки для
цих імовірностей. Значення $P(H\to E)$ обчислюються по рядках, а $P(E\to H)$ — по стовпцях: $P(d\to p)=9/10$, $P(p \to \bar{d})=90/99$.
Ймовірність виявити позитивний тест (незалежно від стану людини) дорівнює: $$ P(p ) = P(d)\,P(d\to p ) ~+~ P(\bar{d})\,P(\bar{d}\to p ) = 0.9*0.001 + 0.009*(1-0.001)= 0.0099 $$ Звичайно це ж значення можна отримати і з таблиці (tot у першій колонці 99/10000).
За формулою Баєса апостериорна ймовірність виявитися хворим дорівнює: $$ P(p \to d) = \frac{P(d)\,P(d\to p )}{P( p )} = \frac{0.001\cdot 0.9}{0.00989} = 0.091. $$ З таблиці цей результат отримується по першій колонці: 9/99.
Цікаво, що, хоча тест досить точно працює на здорових людях (помиляється $9$ разів на $1000$ тестів), ймовірність виявитися хворим при одноразовому позитивному тесті дорівнює лише $9\%$. Цей, на перший погляд, дивний результат пов'язаний з тим, що, хоча помилок у тесту мало, частка хворих серед усієї популяції ще менша. Варто проаналізувати таблицю, наведену вище (якщо тест провести у всій популяції позитивний результат буде у 99 осіб, хоча серед них лише 9 хворих).
☝ Зазвичай зручніше нормувати апостериорні ймовірності гіпотез наприкінці, опускаючи при обчисленнях однакові множники, які від гіпотез не залежать. Для прикладу з тестами це виглядатиме так (знак $\sim$ означає, що величини пропорційні, тобто рівні з точністю до загального множника, незалежного від $d$, $\bar{d}$): $$ \begin{array}{lclcl} P( p \to d) &\sim& P(d) \, P(d\to p ) &=& 0.9\cdot 0.001, \\ P( p \to \bar{d}) &\sim& P(\bar{d})\, P(\bar{d}\to p ) &=& 0.009\cdot 0.999. \end{array} $$ Запишемо $P( p \to H)$ як вектор, компоненти якого відповідають $H=d$ і $H=\bar{d}$: $$ P( p \to H) ~\sim~ \bigr\{ 0.9\cdot 0.001,~~~~ 0.009\cdot 0.999\bigr\} ~\sim~ \bigr\{ 0.1,~~~~ 0.999\bigr\}, $$ де з компонент знову винесені та опущені загальні множники. Тепер вектор необхідно пронормувати на одиницю: $P( p \to H)=\bigr\{ 0.1,~~~~ 0.999\bigr\}/(0.1+0.999)=\bigr\{ 0.091,~~~~ 0.909\bigr\} $.
Послідовність спостережень
При прийнятті рішень формулу Баєса використовують для перерахунку ймовірностей у міру надходження нової інформації. Нехай було проведено два незалежні тести (послідовно або одночасно, але в різних лабораторіях). Якими стануть апостериорні ймовірності в цьому випадку?
Позначимо через $E_1$, $E_2$ — дві умовно незалежні події (наприклад «pp» або «pn»). Ймовірність істинності гіпотези $H_i$ після виникнення подій за формулою Баєса дорівнює (вважаємо $\{E_1,\,E_2\}$ однією подією): $$ P(E_1,E_2 \to H_i) = \frac{P(H_i)\,P( H_i\to E_1,E_2 )}{P(E_1,E_2)} = \frac{P(H_i)\,P(H_i\to E_1)\,P(H_i\to E_2)}{P(E_1,E_2)}. $$ У другій рівності враховано, що події $E_1$ і $E_2$ умовно (при гіпотезі $H_i$) незалежні. Ймовірність у знаменнику, як і раніше, знаходиться з умови нормування $P(E_1,E_2 \to H_i)$: $$ P(E_1,E_2) ~=~ \sum_j P(H_j)\,P(H_j\to E_1)\,P(H_j\to E_2). $$
Звернімо увагу, що, хоча проведені тести умовно незалежні, але при цьому не безумовно незалежні: $P(E_1,E_2) \neq P(E_1)\,P(E_2)$, Чому так відбувається?
Відповідь
Простіше зрозуміти це на прикладі тестування хвороби. Співвідношення $P(E_1,E_2) = P(E_1)\,P(E_2)$ було б вірним, якби результати тестів $E_1$, $E_2$ були б отримані у двох випадково вибраних людей. У нашому випадку тест проводиться з однією і тією ж людиною, яка або хвора, або здорова. Ми не знаємо, яка гіпотеза вірна, але в будь-якому випадку виконується одна з них. Тому $P(E_1,E_2) ~=~ P(h)\,P( h\to E_1,E_2)+P(\bar{h})\,P(\bar{h}\to E_1,E_2 )$.Формулу для апостериорної ймовірності можна переписати таким чином: $$ P(E_1\to H_i) = \frac{P(H_i)\,P(H_i\to E_1 )}{P(E_1)},~~~~~~~~~~~~~~ P(E_1,E_2 \to H_i) = \frac{P(E_1\to H_i)\,P(H_i \to E_2)}{P(E_1\to E_2)}. $$ Таким чином, подія $E_1$ перетворює апріорну ймовірність $P(H_1)$ на $P(E\to H_1)$, після чого вона (за допомогою тієї ж формули Баєса) перетворюється на ще більш уточнену ймовірність гіпотези $P(E_1,E_2\to H_i)$ тощо. При цьому послідовність умовно незалежних подій не відіграє ролі.
Приклад обчислень на numpy
Наведемо приклад обчислень з тестуванням хвороби на Python за допомогою бібліотеки NumPy:import numpy as np np.set_printoptions(precision=5, suppress=True)Спільні ймовірності будемо починати з префікса P_, а умовні з C_.
Нумерація подій: E=[p,n] і гіпотез: H=[б,з]. Вихідні дані мають вигляд:
NH, NE = 2, 2 # число гіпотез і подій
P_H = np.array([0.001, 1-0.001]) # [P(б), P(з)]
C_EH = np.array([[ 0.9, 0.009], # P(б -> p) P(з -> p)
[1-0.9, 1-0.009] ]) # P(б -> n) P(з -> n)
Результати одноразового тесту:
C_HE = ( C_EH*P_H.reshape(1,NH) ).T # [[P(p -> б), P(n -> б)], [[0.09099 0.0001] C_HE /= C_HE.sum(0) # [P(p -> з), P(n -> з)]] = [0.90901 0.9999]]Результати двох тестів:
C_HEE = (C_EH.reshape(NE,1,NH)*C_EH.reshape(1,NE,NH)*P_H.reshape(1,1,NH)).transpose(2,0,1) C_HEE /= C_HEE.sum(0) # P(pp -> б) P(pn -> б) [[[0.90917 0.01 ] # P(np -> б) P(nn -> б) [0.01 0.00001]] # # P(pp -> з) P(pn -> з) [[0.09083 0.99 ] # P(np -> з) P(nn -> з) [0.99 0.99999]]]
Таким чином, імовірність виявитися хворим при двох позитивних тестах $P(pp\to \text{б})=0.909$ суттєво вища, ніж при одному: $P(p\to \text{б})=0.091$.
Задача класифікації
У задачі класифікації з неперетинними класами об'єкт з ознаками $\mathbf{x}=\{x_1,...,x_n\}$ необхідно віднести до одного з $C$ класів. Нехай $P(\mathbf{x} \to c)$ — умовна ймовірність того, що об'єкт з ознаками $\mathbf{x}$ належить $c$-тому класу: $c\in [0...C-1]$. Тоді формулу Баєса можна записати таким чином: $$ P(\mathbf{x} \to c) ~=~ \frac{p(c,\mathbf{x})}{p(\mathbf{x})} = \frac{P(c)\,p(c\to \mathbf{x})}{p(\mathbf{x})}, ~~~~~~~~~~~~~ p(\mathbf{x}) ~=~ \sum_\alpha P(\alpha)\,p(\alpha\to \mathbf{x}), $$ де $P(c)$ — ймовірності належності випадково вибраного об'єкта до класу $c$ (незалежно від значень його ознак), а $p(c\to \mathbf{x}) = p(c,\mathbf{x})/P(c)$ — розподіл щільності ймовірностей значень ознак $\mathbf{x}$ для об'єктів з даного класу $c$. Нормування в знаменнику $p(\mathbf{x})$ — це розподіл об'єктів у просторі ознак. Якщо є $N$ об'єктів, то $p(\mathbf{x})\cdot N$ — це щільність числа об'єктів на одиницю об'єму.
Таким чином, щоб отримати ймовірність $P(\mathbf{x}\to c)$, необхідно знати ймовірності класів $P(c)$ і щільність розподілу $p(c\to \mathbf{x})$. Якщо навчальна вибірка не зміщена (класи в ній представлені з такою ж частотою, як і в тестовій), то $P(c)$ отримати нескладно. А ось значення $p(c\to \mathbf{x})$ у багатовимірному просторі ознак часто знайти непросто. Якщо об'єкти класу утворюють компактні «кластери», то $p(c\to \mathbf{x})$ можна апроксимувати гладкими функціями (наприклад, багатовимірними розподілами Гаусса). Параметри цих функцій отримують по множині навчальних прикладів. Інший підхід — це пошук найближчих сусідів до точки $\mathbf{x}$ у кожному класі і побудова по них апроксимуючих поверхонь $p(c\to \mathbf{x})$.
Іноді непогані результати дає наївний Баєс, у якому передбачається умовна незалежність ознак: $$ p(c\to \mathbf{x}) ~=~p(c\to x_1)\cdot...\cdot p(c\to x_n). $$ Ймовірності $p(c\to x_i)$ особливо легко обчислюються для категоріальних або бінарних ознак. У цьому випадку такий класифікатор може виявитися ефективнішим за метричні моделі. Якщо ознаки неперервні, то для $p(c\to x_i)$ за навчальними даними можна будувати гістограми або обчислювати статистики (наприклад, коли вважається, що $p(c\to x_i)$ має нормальний розподіл).
При використанні наївного Баєса можуть виникати дві проблеми —
втрата точності при перемноженні невеликих чисел і рівність нулю деяких імовірностей $p(c\to x_i)$
(якщо навчальних даних мало).
Перша проблема розв'язується переходом до логарифмів (замість добутку буде сума).
Для боротьби з нульовими ймовірностями застосовують згладжування Лапласа.
Визначення частин мови
Баєсівську формулу можна використовувати для присвоєння кожному слову $w_i$ речення його частини мови $t_i$: іменник (N), прикметник (A), дієслово (V) тощо (Part-of-Speech Tagging). Нехай $t_i$ — один із маркерів (N, A, V...). Якщо для тексту слів $w_1...w_n$ відома умовна ймовірність $P(w_1,...,w_n\to t_1,...,t_n)$, то задача розв'язується пошуком максимуму цієї ймовірності: $$ t_1,...,t_n = \arg\max_{t_1,...,t_n}\,P(w_1...w_n\to t_1...t_n). $$ Для оцінки ймовірності запишемо формулу Баєса: $$ P(w_1...w_n\to t_1...t_n) ~=~ \frac{P(w_1...w_n,t_1...t_n)}{P(w_1...w_n)} ~=~ \frac{P(t_1...t_n)\,P( t_1...t_n \to w_1...w_n)}{P(w_1...w_n)} $$ Для максимізації по $t_i$ достатньо знайти лише чисельник. Ймовірність $P(t_1...t_n)$ характеризує ступінь правдоподібності даної послідовності частин мови (наприклад N V більш імовірне, ніж A V). У першому наближенні для її оцінки можна використовувати біграми. Для цього в ланцюговому правилі робиться марковське спрощення: $P(t_1...t_{k-1}\to t_k)=P(t_{k-1}\to t_k)$: $$ P( t_1...t_n) = P(t_1)\cdot P(t_1\to t_2)\cdot... \cdot P(t_{n-1}\to t_n). $$ Друга ймовірність у найпростішому випадку оцінюється за допомогою таких біграм: $$ P( t_1...t_n \to w_1...w_n) ~=~ P( t_1...t_n \to w_1)\cdot ... \cdot P( t_1...t_n \to w_1) ~=~ P(t_1\to w_1)\cdot...\cdot P(t_n\to w_n). $$ При цьому робиться припущення (достатньо грубе) про умовну незалежність слів у послідовності. Зауважимо, що за тією ж теоремою Баєса $P(t\to w)=P(w\to t)\,P(w)/P(t)$.Вгадати задумане
Досить поширені інтелектуальні системи, завдання яких полягає у з'ясуванні намірів людини. Для цього система задає послідовність питань, на які людина відповідає Так або Ні. Відомим прикладом є гра Akinator, яка вгадує задуманого людиною персонажа.
Припустимо, людина задумала один з об'єктів $X=\{x_1,...,x_N\}$. Система задає питання $Q_i\Rightarrow \{y_i, n_i\}$, на яке отримує бінарну відповідь $y_i$ (yes=так) або $n_i$ (no=ні). Наприклад: «Ваш персонаж жінка?», «Ваш персонаж з реального життя?», «Ваш персонаж дружить з ведмедем?» тощо. При побудові подібної системи необхідно враховувати, що людина, відповідаючи, може навмисно або випадково давати невірні відповіді. Тому в загальному випадку від нуля відмінні обидві умовні ймовірності: $P(X\to y_i)$ і $P(X\to n_i)$ — отримати на питання $Q_i$ відповідь $y_i$ або $n_i$, якщо задумано об'єкт із множини $X$.
| yes | $y_1$ | $y_2$ | ... | $y_M$ | $P(x)$ |
|---|---|---|---|---|---|
| $x_1$ | 9 | 1 | ... | 2 | 0.001 |
| $x_2$ | 10 | 0 | ... | 25 | 0.008 |
| ... | ... | ... | ... | ... | ... |
| $x_N$ | 0 | 890 | ... | 100 | 0.02 |
Позначимо через $I_k$ послідовність $k$ питань-відповідей, отриманих системою:
$I_k=\{Q_1,...,Q_k\}$.
На підставі цієї інформації формуються умовні ймовірності $P(I_k\to X)$ для кожного об'єкта з $X$.
За допомогою формули Баєса можна записати:
$$
P(I_k\to X) = \frac{P(X)\,P(X\to I_k)}{P(I_k)} = \frac{P(X)\,P(X\to Q_1)...P(X\to Q_k)}{P(I_k)},
$$
де в другій рівності зроблено припущення (порівняно грубе) про «не вплив» пар питань-відповідей одна на одну.
Нормувальна ймовірність $P(I_k)$, як зазвичай, знаходиться з умови нормування (сума по всіх $x_i$),
за припущення, що людина задумала відомий системі об'єкт.
Оскільки задача полягає в пошуку $x$ з максимальним значенням $P(I_k\to X)$, знаменник можна опустити:
$$
x= \text{arg}\max_X ~\,P(X)\,P(X\to Q_1)...P(X\to Q_k).
$$
Вибір чергового питання $Q$ після серії питань-відповідей $I_{k-1}$ проводиться аналогічно алгоритму ID3 побудови дерев рішень . Єдина відмінність полягає в тому, що «ознака» $Q$ може мати два значення $\{y,n\}$. Оптимальним є питання, яке робить розподіл ймовірностей $P=P(I_{k-1},\, Q_k\to X)$ максимально нерівномірним (підвищує ймовірності окремих об'єктів). Ентропія $H[P]$ такого розподілу повинна бути мінімальною (усереднюємо ентропії для відповідей «так» і «ні»): $$ Q = \text{arg}\min_{Q}~ H[ P(I_{k-1},\, y\to X)]\,P(y) + H[ P(I_{k-1},\, n\to X)]\,P(n), $$ де ймовірності $P(Q)$ знаходяться з урахуванням відомої на цей момент імовірності об'єкта $x$: $$ P(Q) = \sum_{x} P(X\to Q)\,P(I_{k-1}\to X). $$
Оцінка параметрів моделі
Часто необхідно оцінити деякий, наприклад, неперервний параметр $\theta$ за наявним спостереженням $x$. Зазвичай $\theta$ є параметром статистики (ймовірність події, параметри розподілу тощо).
Нехай відомий апріорний розподіл імовірностей $p(\theta)$ параметра $\theta$. При повній відсутності інформації про його значення розподіл є рівномірним $p(\theta)=\text{const}$. Якщо були попередні спостереження або існують деякі суб'єктивні міркування, функція розподілу $p(\theta)$ може бути більш визначеною.
Апостериорний розподіл параметра (після спостереження $x$) обчислюється, як зазвичай, за формулою Баєса: $$ p(x\to \theta) ~=~ \frac{p(\theta)\,p(\theta\to x)}{p(x)},~~~~~~~~~~~~~~~p(x) ~=~ \int p(\theta)\,p(\theta\to x)\,d\theta, $$ де інтегрування ведеться по всій області «дозволених» значень $\theta$. Для обчислення $p(x\to \theta)$, крім апріорного розподілу $p(\theta)$, необхідно знати функцію правдоподібності $p(\theta\to x)$. Найчастіше вона задається з теоретичних міркувань.
Коли параметр $\theta$ є багатовимірною векторною величиною $\{\theta_1,...,\theta_n\}$, обчислення $n$-вимірного інтеграла з потрібною точністю може бути утрудненим. Щоб уникнути подібних труднощів, вибирають таку $p(\theta)$, щоб інтеграл не лише обчислювався аналітично, але й отриманий розподіл $p(x\to \theta)$ при подальших спостереженнях також призводив до аналітичних результатів.
◊ Розглянемо як приклад визначення ймовірності події за спостереженням
факту її настання.
У цьому випадку $x=1$ (подія в спостереженні настала) і $x=0$ (не настала).
Виберемо як апріорний розподіл закон Бернуллі:
$$
p(\theta) = \frac{\theta^{\alpha-1}\,(1-\theta)^{\beta-1}}{\mathrm{B}(\alpha,\beta)}.
$$
Дійсні величини $\alpha,\beta$ є гіперпараметрами,
задавання яких призводить до різних форм розподілу $p(\theta)$.
Наприклад $\alpha=\beta=1$ — це рівномірний розподіл.
При $\alpha=\beta=10$ — розподіл має симетричний максимум
в околі $\theta=0.5$ тощо.
Нормувальний множник $\mathrm{B}(\alpha,\beta)$ є бета-функцією, що виражається через гамма-функції:
$$
\mathrm{B}(\alpha,\beta) = \int\limits_0^1 t^{\alpha-1}(1 - t)^{\beta-1}\,dt = \frac{\Gamma(\alpha) \Gamma(\beta)}{\Gamma(\alpha+\beta)}.
$$
Якщо подія випадкова і володіє стабільною частотою, то ймовірність того, що вона відбудеться або не відбудеться, дорівнює: $$ p(\theta\to x) = \left\{ \begin{array}{lll} \theta & x=1\\ 1-\theta & x=0 \end{array} \right. $$
У загальному випадку, після $n+m$ спостережень, у яких подія відбулася $n$ разів і $m$ разів не відбулася, апостериорна ймовірність дорівнюватиме: $$ P(n,m\to \theta) = \frac{x^{n+\alpha-1}\,(1-x)^{m+\beta-1}}{\text{B}(n+\alpha,\,m+\beta)}. $$ Залежно від значення гіперпараметрів $\alpha,\beta$ і результатів спостережень отримується той чи інший розподіл для значення ймовірності $\theta$.