Что и как может Байес?

Автор: Сергей Козловский

Последняя редакция:2008\09\15

 

Введение

Впервые я познакомился с использованием байесовских методов в начале 1980х годов на примере построения простой экспертной системы – система уложилась в 100 строчек кода на бейсике и диагностировала причину поломки автомобиля. Байес-метод очаровал меня; я посвятил его изучению массу времени, в 2000 году построил промышленную самообучающуюся систему распознавания тематики предложений и текстов, спроектировал еще несколько систем, основанных на этой технологии.

 

Недавно возникла необходимость познакомить коллег с байесовскими методами. Я поискал в Интернете статьи, руководства, работы, которые посвящены применению метода Байеса для классификации или распознавания. Работы нашлись, и довольно много, но их содержание разочаровало: примеры совершенно детские, методики не оптимизированы по производительности и неудобны, авторы не имели большого опыта применения метода в промышленных масштабах. Пришлось засесть за клавиатуру, чтобы написать руководство по использованию метода Байеса для промышленных систем. Эта работа перед вами.

История

Преподобный Томас Байес (Thomas Bayes) жил в Великобритании в 18 веке (1702 – 1761), его наиболее известная работа была опубликована уже после смерти: [An Essay towards solving a Problem in the Doctrine of Chances. By the late Rev. Mr. Bayes. Philosophical Transactions of the Royal Society of London 53 (1763), 370–418.]
Приведенная в ней формула, получившая в дальнейшем название формулы Байеса, позволяет вычислять апостериорные вероятности событий через априорные вероятности. Эта научная абракадабра означает всего-навсего перерасчет вероятностей после появления новых сведений. Никакого алгоритма Байесом, естественно, предложено не было, да и самого термина «алгоритм» в нашем понимании в те годы не существовало. Также не Байес предложил термины “логика Байеса”, “байесовский подход”, “байесовская оценка”. В последние 30-40 лет возрос интерес к формуле Байеса и появился целый ряд статистических методов, получивших название «Байесовских» (или «Бейесовских»). Microsoft предложил классификационный алгоритм под названием Microsoft Naive Bayes Algorithm (возможно именно он назван «алгоритмом Байеса»).

 

Математика полезна людям потому, что позволяет оперировать системами, которые не влезают в одну голову целиком. Но платой за это становится приблизительность в отношениях мира и мат-моделей, поскольку математика строит модели, ограничивая знания о мире. Поэтому, знание о том, от чего пришлось отказаться при моделировании, не менее важно, чем знание самого метода моделирования. И методы, основанные на подходе Байеса, подтверждают это правило.

 

Поскольку у Томаса Байеса не было компьютеров, он использовал математику, чтобы раздвинуть границы своего интеллекта. И это ему удалось очень изящно.

 

Ирония судьбы в том, что для практического применения подхода Байеса обычно требуется большое количество вычислений-пересчетов, а потому расцвет методов байесовых оценок пришелся в точности на революцию в компьютерных и сетевых инфотехнологиях. Подход Байеса лучше воспринимать в примерах.

 

Упрощенный Байес против спама

Предположим, вы хотите обучить компьютер определять - какие из писем являются спамом. Будем исходить из словаря и словосочетаний, используя байесовские оценки. Создадим вначале пространство гипотез. Пусть относительно любого письма у нас есть 2 гипотезы:

HA – это спам

HB – это не спам, а нормальное, нужное, нужное письмо

            Примечание. HA можно рассматривать как аббревиатуру слов Heap A или Hypothesis A.

 

В интернете есть хороший пример по адресу http://www.softring.ru/articles/articles_12.html (Впервые опубликовано: 16.12.2004 SoftKey.Info). Используем его здесь, слегка подправив.

 

Вначале “обучим” нашу будущую “систему борьбы со спамом”. Возьмем все имеющиеся у нас письма и разделим их на две "кучи". В одну отложим спам-письма и назовем ее кучей HA, в другую - нужную корреспонденцию и назовем ее кучей HB.

 

Теперь посмотрим: какие слова и словосочетания встречаются в спам- и нужных- письмах и с какой частотой? Эти слова и словосочетания назовем СВИДЕТЕЛЬСТВАМИ и обозначим E1,E2… .

 

Выясняется, что общеупотребительные слова (например, слова “как” и “твой”) в кучах HA и HB  встречаются примерно с одинаковой частотой. Таким образом, наличие этих слов в письме ничего не говорит нам о том, к какой куче его отнести. Присвоим этим словам нейтральное значение оценки вероятности "спамности" от 0 до 1. Скажем, 0.5.

 

Анализируем дальше.

 

Пусть словосочетание "разговорный английский" встречается всего в 10 письмах, причем чаще в спам-письмах (например, в 7 спам-письмах из всех 10), чем в нужных (в 3 из 10). Поставим этому словосочетанию для спама более высокую оценку оценку 7/10, а для нормальных писем более низкую: 3/10.

 

И наоборот, выяснилось, что слово "дружище" чаще встречалось в нормальных письмах (6 из 10).

 

И вот мы получили коротенькое письмо: "Дружище! Как твой разговорный английский?". Попробуем оценить его "спамность". Общие оценки PHA), P(HB) принадлежности письма к каждой куче поставим, воспользовавшись несколько упрощенной формулой Байеса и нашими приблизительными оценками:

 

P(HA) = A/(A+B), 

где А = pa1*pa2*...*pan

B = pb1*pb2*…*pbn = (1- pa 1)*(1- pa 2)*...(1- pa n),
pai - спам-оценка каждого слова, входящего в письмо.

pbi – оценка нужности (релевантности) слова, входящего в письмо.

 

В таблице 1. Упрощенная (и неполная) Байес-оценка письма

 

Метод 1:
Упрощенная  Байес-оценка

 

Куча HA: 
спам-письма

Куча HB:
нужные письма

 

 

 

 

 

Свидетельства:

Писем

Приблиз-я оценка
pai

Писем

Приблиз-я оценка
pbi = 1-pai

как (E1)

 

0.5

 

0.5

твой (E2)

 

0.5

 

0.5

дружище (E3)

4

0.4

6

0.6

разговорный английский(E4)

7

0.7

3

0.3

 . . .

 

 

 

 

Произведение A

 

0.07

 

 

Произведение  B

 

 

 

0.045

P(H) : вероятность принадлежности к куче

P(HA) = A/(A+B)=

0.609

P(HB) = B/(A+B)=

0.391

 

 

Таким образом, наше гипотетическое письмо получило оценку вероятности принадлежности с акцентом в сторону "спамности". Можем ли мы принять решение о том, чтобы бросить письмо в одну из куч?

 

Выставим пороги принятия решений:

 

Можно принять T = 0.95 и L=0.05. Поскольку для рассматриваемого письма и 0.95>P(HA)>0.05, и 0.95>P(HB)>0.05, то мы не сможем принять решение  - куда отнести данное письмо: к спаму (HA) или к нужным письмам (HB)


Можно ли улучшить оценку принадлежности, используя больше информации?

На шаг ближе к Байесу

Давайте вычислим оценку для каждого свидетельства другим способом, так, как это, собственно, и предложил Байес.

 

Пусть

Fa – это общее количество писем спама

Fai  - это количество писем со свидетельством i в куче спама

Fb – это общее количество нужных писем

Fbi  - это количество писем со свидетельством i в куче нужных (релевантных) писем

 

Тогда:

 

pai  = Fai/Fa

pbi = Fbi/Fb

 

P(HA) = A/(A+B), 

P(HB) = B/(A+B)

где А = pa1*pa2*...*pan

B = pb1*pb2*…*pbn

 

Обратите внимание – оценки слов-свидетельств pai и pbi стали объективными и их можно вычислять без участия человека.

 

Таблица 2. Более точная (но неполная) Байес-оценка по наличным признакам из письма

Метод 2:
Более точная (но неполная) Байес-оценка по наличным признакам письма

 

Куча HA: 
спам-письма

Куча HB:
 нужные письма

Всего писем

Fa=

500

 

Fb=

30

 

Свидетельства:

 

Писем

Условная вероятность pai=Faei/Fa

 

Писем

Условная вероятность pbi=Fbei/Fb

как (E1)

Fa1=

250

0.5

Fb1=

15

0.5

твой (E2)

Fa2=

250

0.5

Fb2=

15

0.5

дружище (E3)

Fa3=

4

0.008

Fb3=

6

0.2

разговорный английский(E4)

Fa4=

7

0.014

Fb4=

3

0.100

 . . .

 

 

 

 

 

 

Произведение A

 

 

0.000028

 

 

 

Произведение  B

 

 

 

 

 

0.005

P(H) : вероятность принадлежности к куче

 

P(HA) = A/(A+B)=

0.0056

 

P(HB) = B/(A+B)=

0.9944

 

Мы получили вполне определенный результат – с большим перевесом письмо можно отнести к нужным письмам, поскольку P(HB) =  0.997 > T  = 0.95.

 

Почему результат изменился? Потому, что мы использовали больше информации – мы учли количество писем в каждой из куч и, кстати, гораздо более корректно определили оценки pai  и pbi. Определили их так, как это сделано у самого Байеса, вычислив условные вероятности. Другими словами, pa3 - это вероятность появления в письме слова “дружище” при условии того, что это письмо уже принадлежит спам-куче HA

 

Результат не заставил себя ждать – кажется, мы можем принять решение с большей определенностью. Но можем ли?

 

Байес с учетом априорного знания

А можно ли учесть еще больше информации? От чего еще мы отказались, когда формировали математическую модель?

 

Прежде всего, мы не учли априорную вероятность появления спам-письма. Если мы ее учтем, наши вычисления и результаты будут выглядеть так:

Таблица 3:

Метод 3:
Байес-оценка по наличным признакам с учетом априорной вероятности.

 

Куча HA: 
спам-письма

Куча HB:
 нужные письма

Всего писем:

FA=

500

 

FB=

30

 

Априорная вероятность появления письма:

Pa = FA/(FA+FB)=

 

0.94

Pb = FB/(FA+FB)=

 

0.06

Априорный шанс:

Oa = Pa/(1-Pa)=

 

16.67

Ob = Pb/(1-Pb)=

 

0.06

Свидетельства:

 

Писем:

Условная вероятность pai=Faei/FA

 

Писем:

Условная вероятность pbi=Fbei/FB

как (E1)

Fae1=

250

0.5

Fbe1=

15

0.5

твой (E2)

Fae2=

250

0.5

Fbe2=

15

0.5

Дружище (E3)

Fae3=

4

0.008

Fbe3=

6

0.2

разговорный английский(E4)

Fae4=

7

0.014

Fbe4=

3

0.100

 . . .

 

 

 

 

 

 

Произведение A

 

 

0.000028

 

 

 

Произведение  B

 

 

 

 

 

0.005

P(H) : вероятность принадлежности к куче

 

P(HA) = A*Oa /

(A*Oa+B)=

0.0854

 

P(HB) = B*Ob / (A+B*Ob)=

0.9146

 

Здесь:

 

Пусть

Fa – это общее количество писем спама

Fai  - это количество писем со свидетельством i в куче спама>

Fb – это общее количество нужных писем

Fbi  - это количество писем со свидетельством i в куче нужных

 

Тогда:

Pa = Fa/(Fa+Fb)  априорная вероятность того, что письмо окажется спамом 

Pb = Fb/(Fa+Fb) априорная вероятность того, что письмо окажется нужным

pai  = Fai/Fa вероятность появления свидетельства i в спам-письме

pbi = Fbi/Fb  вероятность появления свидетельства i в нужном письме

 

А = pa1*pa2*...*pan

B = pb1*pb2*…*pbn

Oa = Pa/(1-Pa)  априорные шансы за то, что письмо окажется спамом 

Ob = Pb/(1-Pb)  )  априорные шансы за то, что письмо окажется нужным

 

P(HA) = A*Oa/(A*Oa+B)  вычисленная (постариорная) вероятность того, что это спам-письмо

P(HB) = B*Ob/(A+B*Ob)  вычисленная (постариорная) вероятность того, что это нужное письмо

 

Мы видим, что учет априорных вероятностей изменил постариорные вероятности в сторону более реалистичных значений:

P(HA) повысилась до 0.09

P(HB) понизилась до 0.91

 

Но, тем самым, мы опять вышли из диапазонов допуска >= T (T=0.95) и отсева <= L (L=0.05) и алгоритм не может принять однозначное решение о письме.

 

Нельзя ли учесть некую дополнительную информацию и еще уточнить нашу оценку?

Байес с учетом неявных свидетельств

Человеческий разум гораздо легче работает с объектами, которые представлены явно. Понятия нуля и пробела как раз относятся к такой неявной информации. Римляне писали с тексты с пробелами, но не использовали нуль. Через 1000 лет после римлян славяне, во времена Ивана IV Грозного, все еще писали тексты без пробелов. Арабы пишут без пробелов до сих пор, хотя ноль стали использовать задолго до европейцев. Понятие математического нуля изобрели всего два народа за всю историю, индийцы и майя, – и на усвоение этого знания остальному миру потребовались тысячелетия.

 

Вот как трудно использовать неявное знание!

 

К счастью, мы можем постараться учесть исторический опыт. Применительно к методу Байеса мы можем учесть те слова и выражения, которые в конкретном письме НЕ ПОЯВИЛИСЬ, но появились в других письмах. Ведь непоявление слова тоже может быть признаком, не правда ли?

 

Напрмер, более полный текст письма мог бы быть следующим: "Дружище! Как твой разговорный английский ЯЗЫК?". В действительности, слово “язык” было в письме опущено. Тем не менее, в нашей базе есть вероятностные характеристики для тех слов, которые могли бы появиться, но не появились в письме, в том числе и для слова “язык”. Если учесть эту информацию, то выражения приобретают следующий вид:

 

Fa – это общее количество писем спама

Fai  - это количество писем со свидетельством ei в куче спама

Fb – это общее количество нужных писем

Fbi  - это количество писем со свидетельством ei в куче нужных писем

n – общее число признаков в базе данных

В письме появились признаки с 1 по m и НЕ появились с m+1 по n.

 

Тогда:

Pa = Fa/(Fa+Fb)  априорная вероятность того, что письмо окажется спамом 

Pb = Fb/(Fa+Fb) априорная вероятность того, что письмо окажется нужным

pai  = Fai/Fa вероятность появления свидетельства ei в спам-письме для слов, которые действительно появились в письме

pbi = Fbi/Fb  вероятность появления свидетельства ei в релевантном письме для слов, которые действительно появились в письме

 

qai = 1- pai вероятность НЕ ПОЯВЛЕНИЯ свидетельства ei в спам-письмах для слов, которые НЕ ПОЯВИЛИСЬ в данном письме

qbi = 1- pbi вероятность НЕ ПОЯВЛЕНИЯ свидетельства ei в релевантных письмах для слов, которые НЕ ПОЯВИЛИСЬ в данном письме

 

А = pa1 * pa2 *...* pam /( qa1* qa2 *…* qam ) = oa1 * oa2 *...*oam   

B = pb1*pb2*…*pbm / ( qb1* qb2 *…* qbm ) =ob1*ob2*…*obm

Где O – это шансы, которые вычисляются как: ox = px/(1-px) = px/qx

 

Qa = (1-pa1)* (1-pa2) *…* (1-pan)  / (   (1-pb1)* (1-pb2) *…* (1-pbn)   )

Qb = (1-pb1)* (1-pb2) *…* (1-pbn)  / (   (1-pa1)* (1-pa2) *…* (1-pan)   )

 

Qa = Pa/(1-Pa)  априорные шансы за то, что письмо окажется спамом 

Ob = Pb/(1-Pb)  )  априорные шансы за то, что письмо окажется нужным

 

O(HA) = Oa * Qa * А /  B

O(HB) = Ob * Qb * BA

 

P(HA) = O(HA) /( O(HA) +1)  вычисленная (постариорная) вероятность того, что это спам-письмо

P(HB) = O(HB) /( O(HB) +1)  вычисленная (постариорная) вероятность того, что это нужное письмо

 

Таблица 4:

Модель №  4:
Байес-оценка по наличным признакам с учетом априорной вероятности и неявных свидетельств.

 

Куча HA: 
спам-письма

Куча HB:
 нужные письма

Всего писем:

FA=

500

 

FB=

30

 

Априорная вероятность появления письма:

Pa = FA / (FA+FB)=

 

0.94

Pb = FB / (FA+FB)=

 

0.06

Априорные шансы: Oa и Ob

Oa = Pa / (1-Pa)=

 

16.67

Ob = Pb / (1-Pb)=

 

0.06

Свидетельства:

 

Писем:

Условная вероятность pai=Faei/FA появления в письме

 

Писем:

Условная вероятность pbi=Fbei/FB появления в письме

как (E1)

Fae1=

250

0.5

Fbe1=

15

0.5

твой (E2)

Fae2=

250

0.5

Fbe2=

15

0.5

дружище (E3)

Fae3=

4

0.008

Fbe3=

6

0.2

разговорный английский  (E4)

Fae4=

7

0.014

Fbe4=

3

0.1

 . . .

 

 

 

 

 

 

Qa и Qb

Qa =

 

0.5

Qb =

 

2

 A  и B

A =

 

5.72532E-05

B =

 

0.028

O(HA)  и O(HB)

O(HA) =

 

0.017

O(HB) =

 

58.221

P(H) : вероятность принадлежности к куче

 

P(HA) = A*Oa / (A*Oa+B)=

0.017

 

P(HB) = B*Ob / (A+B*Ob)=

0.983

 

 

 

Итак, с учетом априорной вероятности, а также явных и неявных свидетельств:

 

 

 

На практике лучше получить немного спама, чем выбросить нужное письмо. Поэтому стоит ужесточить пороги срабатывания для отсылки в спам и уменьшить порог для отнесения к релевантным, нужным письмам. Но главные трудности не в установке порогов принятия решения, тем более, что даже в самом кратком письме есть больше 4х признаков, считая вместе с адресной информацией, заголовком и подписью. Следовательно, информации как-будто хватает – только учитывай. Так где же нас ждут настоящие трудности?

 

Как обычно там, где происходит формализация и жизнь втискивается в прокрустово ложе математики.

Байесовские рифы

Предположим, мы получили всего 10 писем, разложили их на кучи HA(спам)  и HB(релевантные, нужные). Признаки E1,E2,E3,E4 распределились по письмам (см таблицу 5).

Таблица 5:

 

Letters

 

HA

HB

N letter:

1

2

3

4

5

6

7

8

9

10

E1

1

1

 

 

 

 

 

 

1

1

E2

 

 

1

1

1

1

 

 

 

 

E3

 

 

1

1

1

1

 

 

 

 

E4

 

1

1

 

 

 

 

1

1

 

 

Расчитаем по этим данным частоты и вероятности для случая, когда в письме встретились все 4 признака (таблица 6):

Таблица 6:

Модель №  4:
Байес-оценка по 4 наличным признакам с учетом априорной вероятности и неявных свидетельств.

 

Куча HA: 
спам-письма

Куча HB:
 нужные письма

Всего писем:

FA=

4

 

FB=

6

 

Априорная вероятность появления письма:

Pa = FA / (FA+FB)=

 

0.40

Pb = FB / (FA+FB)=

 

0.60

Априорные шансы: Oa и Ob

Oa = Pa / (1-Pa)=

 

0.67

Ob = Pb / (1-Pb)=

 

1.50

Свидетельства:

 

Писем:

Условная вероятность pai=Faei/FA появления в письме

 

Писем:

Условная вероятность pbi=Fbei/FB появления в письме

как (E1)

Fae1=

2

0.5

Fbe1=

2

0.333

твой (E2)

Fae2=

2

0.5

Fbe2=

2

0.333

дружище (E3)

Fae3=

2

0.5

Fbe3=

2

0.333

разговорный английский  (E4)

Fae4=

2

0.5

Fbe4=

2

0.333

 . . .

 

 

 

 

 

 

Qa и Qb

Qa =

 

0.316

Qb =

 

3.160

 A  и B

A =

 

0.316

B =

 

0.063

O(HA)  и O(HB)

O(HA) =

 

1.068

O(HB) =

 

0.936

P(H) : вероятность принадлежности к куче

 

P(HA) = A*Oa / (A*Oa+B)=

0.516

 

P(HB) = B*Ob / (A+B*Ob)=

0.484

 

По расчетам получается, что если в письме содержатся все 4 свидетельства, то вероятность того, что письмо принадлежит куче HA равно P(HA) = 0.516 . Но если мы посмотрим на данные таблицы 5, то увидим, что не было НИ ОДНОГО ПИСЬМА, которое содержало бы все 4 свидетельства! Как стало возможно получить оценку для невозможной ситуации?

 

Ответ в том, что при нахождении вероятностей неявно предполагается то, что математики скромно и туманно скрывают под терминами “независимость, стационарность данных и их репрезентативность”. Математики говорят о том, что уравнения и вычисления все более верны, при росте количества данных (в нашем случае – количестве писем со свидетельствами).

 

В таблице 5 видно, что свидетельство в письме либо есть, либо его нет. Но при переходе к вероятностям свидетельство как-бы размазывается по всем письмам данной кучи. Например E1 встречается в 2х письмах из 4х в куче HA. Когда мы находим вероятность появления признака E1 для письма из HA, то получаем P(E1/HA) = 2/4= 0.5 . Т.е. создается впечатление, что каждое письмо из HA начинает обладать кусочком-половинкой свойства E1, что может легко вызвать недоразумения и ошибки.

 

Кроме того, прямое применение уравнений почти неизбежно приводит на практике к ситуациям вроде деления на ноль, к попыткам вычислить бесконечно малые величины и другим неприятностям. Как быть? Как построить систему вылавливания спама, которая не боиться всех этих неприятностей? Сначала классифицируем наприятностия в явном виде.

 

Точность результатов может стать проблемой.

 

Например, если при массиве F(HA) = 10000 писем спама и F(HB)= 2000 релевантных писем мы обнаружили, что частота встречаемости даного типа писем в F(Ei/HA)=5, а    F(Ei/ HB) = 1, то доверять решению на основе таких данных нельзя – ведь стоит F(Ei/ HB) уменьшиться или увеличиться на 1, и отношение p(Ei/HA) / p(Ei/ HB) изменится очень сильно.

 

В то же самое время, при больших значения частот система ведет себя намного более устойчиво. См. Таблицу 7:

 

HA

HB

p(Ei/HA) / p(Ei/ HB)

F(Ei/H)

5

1

~ 5

F(Ej/ H)

500

100

~ 5

F(Ek/H)

6

3

~2

F(El/H)

501

103

~5

 

Явление резкого изменения вероятностей при небольшом изменении входных данных называется flickering или мерцание. Есть несколько способов снижения влияния фликкеренга-мерцания на точность вычислений.

 

Давайте добавим фиктивные данные в каждую кучу Hi. Это будет Первый способ сглаживания мерцания и предотвращения деление на 0, попытки вычислить бесконечно большие или бесконечно малые величины. Например, добавим по 100 фиктивных писем. Одновременно заменим значения вероятностей 1 и 0 на системную единицу и системный 0.

 

Системный 0 вычисляется так: находим кучу Hmax с максимальным количеством писем nmax и вычисляем sys0 = 1/nmax. Системная единица sys1 = (nmax-1)/ nmax.

 

Второй метод – использовать не-вероятностные методы, которые описанные чуть ниже, в разделе, посвященном computer science.

 

Мы видим, что метод Байеса обладает рядом недостатков и не так прост в применении, как это может показаться с первого взгляда. Но если мы готовы проиграть в точности результата ради общности и скорости, и довольствоваться приблизительной оценкой, складывающейся из оценок отдельных свидетельств – то метод Байеса к нашим услугам.

 

Как же нам сохранить точность и перестать зависеть от ограничений математики, как дисциплины?

Байес в эпоху computer science

Предположим, таблица 5 занесена в реляционную базу данных. Если мы сформируем запрос: сколько писем обладаю следующими свойствами:

то  база данных честно ответит – ни одного! И, если следовать буквально прецедентам, этот случай нужно классифицировать совершенно отдельно – прецедентов ранее не было, следовательно точная вероятность такого события P( E1&E2&E3&E4 / HA )=0 точно.

Применяя базу данных для нахождения частот мы одновременно решаем массу программно-технических проблем с делением на 0, с оценкой точности результатов и т.п.  – т.е. мы получаем точный результат!

 

А как же быстродействие? Ведь сам Байес для того и создавал свою теорему, чтобы не перелопачивать громадное количество данных?

 

Дело в том, что базы данных организованы очень эффективно и именно операция нахождения записей с некоторой комбинацией признаков является основной операцией. Скорость выполнения этой операции не выше n*log(n), где n – количество записей, среди которых идет поиск. Все интернет-поисковики решили эту проблему и ими пользуется каждый житель планеты, выходящий в интернет.

 

Относительный недостаток использования баз данных именно в том, что мы получаем точный результат, а не приблизительный, как при использовании метода Байеса. Другими словами – если в прошлом мы не сталкивались с искомой комбинацией признаков, то и база данных выдаст частоту встречаемости 0.

 

Метод Байеса в этих же условиях выдаст оценку, основанную на принципе суперпозиции признаков при условии, что каждый признак представлен с весом, пропорциональным его собственной условной вероятности.

 

Видимо, в реальных условиях можно рекомендовать использовать одновременно оба способа для взаимного контроля и вычисления возможной ошибки.

Байес классический

Формулы Байеса не так просты, и не так сложны, как многие могут подумать.

 

Пусть вы – директор фирмы, на которой работают 15 человек. Вы проводите оздоровительную профилактику в разгар эпидемии гриппа. Ваша задача – сделать так, чтобы больные не заражали здоровых. Для этого больных нужно ежедневно выявить и отправлять по домам. Отсылать всех подряд тоже нельзя – фирма должна работать каждый день. Как ежедневно выявлять больных с допустимым риском и недорого?

 

Самый верный способ – взять анализы и выяснить: есть ли в организме вирус гриппа. Но это сложная, долгая и дорогая процедура. Как быть? Нельзя ли определить болезнь по вторичным признакам – повышенной температуре, головной боли, чиханию, ломоте в суставах, насморку, потливости и т.д.? Поэтому сделаем следующее:

1.      Сделаем анализы у всех работающих на наличие вируса гриппа.

2.      Одновременно зафиксируем вторичные признаки болезни у каждого. Эти признаки в дальнейшем считаем свидетелствами и обозначаем ev (от слова evidence)

3.      Сравним одно с другим и построим алгоритм оценки правдоподобия гипотез HA - “болен гриппом” и HB – “не болен гриппом”

4.      В следующие дни мы снова проверяем людей, но уже основываемся на признаках. Если признаки достоверно указывают на высокую вероятность гриппа, то этот человек отправляется домой.

 

 

Пусть результаты обследования на вирус собраны в таблице 1:Распределение признаков болезни по людям

 

Люди, больные гриппом (HA)

Люди, не больные гриппом (HB)

 

Номер человека в списке:

Признаки недомогания:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Итого

Высокая температура E1

1

1

1

 

 

1

 

 

 

 

 

 

 

 

 

4

Насморк E2

 

1

1

1

1

 

 

 

1

 

 

1

 

 

 

6

Головная боль E3

 

1

1

 

 

 

 

 

 

1

 

1

1

 

 

5

Чихание E4

 

1

1

1

1

1

 

 

1

 

 

1

 

1

 

8

Потливость E5

 

 

1

1

1

 

 

1

 

 

 

1

 

 

 

5

Таблица 1: результаты обследования на наличие вируса гриппа 15 человек.

 

Результаты обследования 15 человек в разгар эпидемии вируса

 

Больных гриппом 5 человек, гитотеза HA

Не больных гриппом 10 человек, гипотеза HB

Итого:

Высокая температура E1

3

1

4

Насморк E2

4

2

6

Головная боль E3

2

3

5

Чихание E4

4

4

8

Потливость E5

3

2

5

Таблица 2: Сводная статистика

 

 

Теперь расчитаем вероятности.

Расчет простых вероятностей

 

Абсолютные частоты

Значения абсолютных частот

Вероятности

Значения вероятностей

Расчет вероятностей

Всего людей

F

15

 

 

 

Человек болен гриппом (гипотеза HA)

F(HA)

5

P(HA)

0.33

P(HA) =F(HA) /F

Человек не болен гриппом (гитотеза HB)

F(HB)

10

P(HB)

0.67

P(HB) =F(HB) /F

Высокая температура E1

F(E1)

4

P(E1)

0.27

P(E1) = F(E1)/F

Насморк E2

F(E2)

6

P(E2)

0.40

P(E1) = F(E2)/F

Головная боль E3

F(E3)

5

P(E3)

0.33

P(E1) = F(E3)/F

Чихание E4

F(E4)

8

P(E4)

0.53

P(E1) = F(E4)/F

Потливость E5

F(E5)

5

P(E5)

0.33

P(E1) = F(E5)/F

Высокая температура и грипп E1∩HA

 

 

P(E1∩HA)

0.20

P(E1∩HA) = F(E1∩HA)/F

Насморк и грипп  E2∩HA 

 

 

P(E2∩HA)

0.27

P(E2∩HA) = F(E2∩HA)/F

Головная боль и грипп  E3∩HA 

 

 

P(E3∩HA)

0.13

P(E3∩HA) = F(E3∩HA)/F

Чихание и грипп  E4∩HA

 

 

P(E4∩HA)

0.27

P(E4∩HA) = F(E4∩HA)/F

Потливость и грипп  E5∩HA

 

 

P(E5∩HA)

0.20

P(E5∩HA) = F(E5∩HA)/F

Высокая температура и грипп E1∩HB

 

 

P(E1∩HB)

0.07

P(E1∩HB) = F(E1∩HB)/F

Насморк и грипп  E2∩HB 

 

 

P(E2∩HB)

0.13

P(E2∩HB) = F(E2∩HB)/F

Головная боль и грипп  E3∩HB 

 

 

P(E3∩HB)

0.20

P(E3∩HB) = F(E3∩HB)/F

Чихание и грипп  E4∩HB

 

 

P(E4∩HB)

0.27

P(E4∩HB) = F(E4∩HB)/F

Потливость и грипп  E5∩HB

 

 

P(E5∩HB)

0.13

P(E5∩HB) = F(E5∩HB)/F

Таблица 3: расчет простых (не условных) вероятностей

 

Здесь каждого человека можно рассматривать как отдельный эксперимент, а всех людей в качестве выборки. Интуитивно ясно, что чем больше выборка, тем, как правило, надежнее результаты. Давайте пока не будем обращать внимание на бедность нашей статистики – на небольшое количество как свидетельств, так и людей. Несколько позже мы вернемся к тому, как сделать наши оценки надежнее.

 

Таким образом, априорно (до оценки свидетельств) можно сказать, что вероятность того, что произвольно взятый человек болен гриппом составляет 0.3:

 

Расчет вероятностей при условии того, что человек болен гриппом или нет:

 

Абсолютные частоты

Значения абсолютных частот

Вероятности

Значения вероятностей

Расчет вероятностей

Высокая температура E1 при условии HA

F(E1 / HA)

3

P(E1 / HA)

0.6

P(E1 / HA)=F(E1 / HA) / F(HA)

Насморк E2 при условии HA

F(E2 / HA)

4

P(E2 / HA)

0.8

P(E2 / HA)=F(E2 / HA) / F(HB)

Головная боль E3 при условии HA

F(E3 / HA)

2

P(E3 / HA)

0.4

P(E3 / HA)=F(E3 / HA) / F(E1)

Чихание E4 при условии HA

F(E4 / HA)

4

P(E4 / HA)

0.8

P(E4 / HA)=F(E4 / HA) / F(E2)

Потливость E5 при условии HA

F(E5 / HA)

3

P(E5 / HA)

0.6

P(E5 / HA)=F(E5 / HA) / F(E3)

Высокая температура E1 при условии HB

F(E1 / HB)

1

P(E1 / HB)

0.1

P(E1 / HB)=F(E1 / HB) / F(E4)

Насморк E2 при условии HB

F(E2 / HB)

2

P(E2 / HB)

0.2

P(E2 / HB)=F(E2 / HB) / F(E5)

Головная боль E3 при условии HB

F(E3 / HB)

3

P(E3 / HB)

0.3

P(E3 / HB)=F(E3 / HB) /

Чихание E4 при условии HB

F(E4 / HB)

4

P(E4 / HB)

0.4

P(E4 / HB)=F(E4 / HB) /

Потливость E5 при условии HB

F(E5 / HB)

2

P(E5 / HB)

0.2

P(E5 / HB)=F(E5 / HB) /

Таблица 4. Расчет вероятноей для условий HA(человек болен гриппом) и HB(человек не болен гриппом)

 

Но как все эти найденные показатели могут нам помочь при диагнозе? Ведь нам нужно не определять вероятность высокой температуры, когда мы знаем, что человек уже гриппует, а решить обратную задачу: принять решение - человек болен гриппом или нет, если известно, что у него температура.

 

Итак, из основных данных нам известно:

априорная вероятность того, что человек болен гриппом:

Среди обследованных 15 человек 5 оказались больны. Следовательно, априорная вероятность гриппа P(HA) = P(HA) =F(HA) /F = 5/15 = 0.33

 

Априорная вероятность свидетельства, например, повышенной температуры, у произвольного человека:

P(E1) = P(HAE1)  + P(HBE1)  = F(E1∩HA)/F + F(E1∩HB)/F  =

               = (  F(E1∩HA)+F(E1∩HB)  ) / F = (3+1)/15 = 0.27

 

Условная вероятность появления свидетельства, при условии. Например, для E1/HA ( температура повышена при условии что человек болен гриппом):

P(E1/HA) = P(E1∩HA) / P(HA) = P(HAE1)/ P(HA) = 3/5 = 0.6

и, следовательно

P(E1∩HA) = P(E1/HA) * P(HA) = 0.6 * 0.33 = 0.198

 

Нам нужно определить – как изменится априорная вероятность P(HA), если мы знаем, что у человека высокая температура:

 

P(HA/E1) = P(E1/HA) * P(HA) / P(E1)                (формула 1 для одного признака без учета неявных свидетельств)

 

Вывод формулы:

P(HA/E1) = P(HA∩E1)  /  P(E1) = P(E1∩HA) / P(E1) =  P(E1/HA) * P(HA)/ P(E1)

 

Как применять формулу 1? Ответ – лучше применять эту формулу в другом виде, в виде шансов. Зная вероятность можно найти шанс:

O = P/(1-P);  P = O/(1+O)

Тогда

 

O(HA/E1) = O(H) * p(E1/HA)/p(E1/HB)               (формула 2 для одного признака без учета неявных свидетельств) 

 

Здесь подразумевается, что мы проверяем только один признак-свидетельство объекта и опускаем информацию о других его признаках, появившихся и не появившихся.

 

Вывод формулы 2 для одного свидетельства:

 

P(E1) = P(E1/HA) * P(HA) + P(E1/HB) * P(HB) 

         т.к. 

         P(E1) = F(E1)/ F = ( F(E1∩HA) + F(E1∩HB) )/F  = 

      = F(E1∩HA)/F  + F(E1∩HB)/F = 

      = F(E1∩HA)/F(HA)  *  F(HA)/F  + F(E1∩HB)/F(HB)  *  F(HB) / F =

      = P(E1/HA) * P(HA) + P(E1/HB) * P(HB)

 

Поэтому

P(HA/E1) = P(E1/HA)*P(HA) / P(E1) =

= P(E1/HA)*P(HA) / ( P(E1/HA) * P(HA) + P(E1/HB) * P(HB) ) =

=>

P(HA/E1) / (1 - P(HA/E1)) = O(HA/E1) =

            = P(HA) * P(E1/HA) / (  (1 - P(HA/E1)) * ( P(E1/HA) * P(HA) + P(E1/HB) * P(HB) )  ) =

            = …

O(HA/E1)= O(HA) * P(E1/HA)/P(E1/HB)

 

 

Рекомендация.

Тем, кто захочет доказать формулу 2 из формулы 1, лучше провести обратное преобразование – от формулы 2 к формуле 1, подставляя известные вероятности.

 

А если мы хотим учесть всю возможную информацию: все свидетельства объекта, и т.д?

 

Общий вид формулы 2 для нахождения апостериорных шансов и вероятности с учетом полной информации из объекта и всей базы:

 

Пусть

От 1 до n - число признаков, которые собраны в базе данных

от 1 до m – число признаков, которые встретились в распознаваемом объекте и по которым мы оцениваем апостериорную вероятность

от m+1 до n  - номера признаков, которые НЕ встретились в распознаваемом объекте.

 

q(Ei/Hj) = 1- p(Ei/Hj)

o(Ei/Hj) = p(Ei/Hj) / (1- p(Ei/Hj) )

 

QA/QB = q(E1/HA)/q(E1/HB)   * …*   q(En/HA)/q(En/HB)

Величину QA/QB можно вычислить заранее – она является константой для всей базы. Рекомендуется вычислять ее именно в том порядке, как здесь записано. Если сначала найти отдельно  QA и QB, то легко попасть в ситуацию потери точности, поскольку

QA  = q(E1/HA) * …*   q(En/HA– это произведения чисел, каждое из которых в диапазоне от 0 до 1, причем, как правило, ближе к 0.

 

Oam = o(E1/HA)* …*o(Em/HA)  произведение для всех шансов всех свидетельств, которые встретились в оцениваемом объекте и которые мы используем для определения апостериорной вероятности принадлежности объекта куче A

 

Obm = o(E1/HB)* …*o(Em/HB) 

 

 

Тогда

O(HA/E1∩E2∩…Ei) =

= O(H) * ( Oam/ Obm )* ( QA/QB )                                      (формула 2, общий вид) 

 

и можно найти вероятность  

P(HA/ E1∩E2∩…Ei) = O(HA/E1∩E2∩…Ei) / (1 + O(HA/E1∩E2∩…Ei) )

 

Выводы

Практически, для профессиональной работы лучше совмещать метод Байеса и использовние базы данных для нахождения точных абсолютных частот и точных вероятностей. У каждого из методов есть свои сильные и слабые стороны.

 

Метод Байеса позволяет получить  нечеткую вероятностную оценку даже для случаев, когда именно этот оцениваемый набор свидетельств ранее никогда не встречался. Но мы видим, что пользуясь методом Байеса трудно получить точную оценку вероятностей, например, для суперпозиции свидетельств E1&E2&…Em. Борясь с прерываниями мы вынуждены использовать системные 0 и 1.

 

Другой подход - использование базы объектов и свидетельств, - позволяют найти точные частоты для суперпозиции свидетельств E1&E2&…Em. Но если именно такая комбинация свидетельств не встречалась ранее ни в одном объекте, то мы получими оценку апостериорной вероятности  0. Для дополнительного учета данных о свидетельствах, составляющих суперпозицию, нужны дополнительные усилия и предположения о степени их взаимной зависимости. При этом точность выводов будет неизбежно зависеть от оправданности этих предположений.

 

Для обоих подходов фликкеринг или мерцание остается проблемой и по-прежнему актуален ввод в базу фиктивныех объектов для снижения влияния сильного изменения характеристик малочастотных свидетельств при пополнении базы.

 

Желаю удачи вам с Байесом и без него.

 

Сергей Козловский