Байесовский вывод. Наивная байесовская классификация

Практический курс по ML: https://stepik.org/course/209247/

Смотреть материал на YouTube | RuTube

Давайте предположим, что мы рассматриваем некоторую задачу классификации. Для простоты, бинарную (двухклассовую): . И, конечно же, имеется набор данных обучающей выборки:

Эти данные подчиняются некоторой совместной плотности распределения вероятностей (ПРВ) . Условно она изображена на рисунке ниже (здесь  - весь трехмерный график целиком):

Наша задача отнести каждый конкретный входной вектор (образ)  к одному из двух классов . Как это правильно сделать? Да, отнести вектор  к тому классу, вероятность которого окажется наибольшей. То есть, нам нужно найти вероятности для классов , а затем, выбрать наибольшее значение:

Используя теорему Байеса, это выражение можно расписать, следующим образом:

Я здесь через заглавную букву P обозначил вероятность события, а через малую букву p – ПРВ.

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

Предположим, мы знаем величины  и распределения . Тогда, правило выбора класса (модель классификации) можно записать, следующим образом:

Обратите внимание, я здесь отбросил распределение , так как оно не зависит от параметра , а значит, не влияет на положение точки максимума.

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

Оптимальный байесовский классификатор

Вообще, на практике в эту модель добавляют еще множители , которые определяют величину штрафа при неверной классификации для каждого класса :

Существует теорема, которая доказывает, что в этом случае будут минимизироваться средние ошибки, то есть, функционал вида:

Минимизация данного критерия соответствует оптимальному байесовскому классификатору. Подробно о нем я уже рассказывал:

https://www.youtube.com/watch?v=OhIp6qJkvCI

По этой ссылке вы также найдете пример простой байесовской классификации мужчин и женщин по двум признакам: высота и вес.

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

по обучающей выборке.

Конечно, после того, как в байесовский классификатор подставляются оценки ПРВ, то он перестает быть оптимальным. Поэтому оптимальность здесь, скорее, представляет теоретический интерес. На практике, реальные классификаторы могут лишь приближаться к оптимальному.

Наивный байесовский классификатор

Главная проблема в реализации байесовского классификатора – это оценить условные ПРВ . И, в общем виде, эта задача гораздо сложнее, чем построение классификатора с позиции выбора параметрической функции и последующего поиска вектора параметров :

То есть, так, как это мы делали с самого начала. Значит, байесовский (вероятностный) подход к задачам машинного обучения – это лишь интересный теоретический трюк? Не совсем. Во-первых, как мы уже видели, он дает лучшее понимание работы алгоритмов машинного обучения. А, во-вторых, мы можем упростить задачу оценки многомерной условной ПРВ , положив, что все признаки:

независимы между собой. В этом случае многомерная ПРВ расписывается через произведение соответствующих одномерных ПРВ:

Такое, вообще говоря, сильное предположение о независимости признаков, приводит нас к алгоритму, известному под названием наивный байесовский классификатор:

Или, эквивалентный вывод часто делают по логарифму от произведения величин (уходят от произведений):

Как видите, мы здесь оперируем только одномерными ПРВ и это сильно упрощает задачу, т.к. восстановить одномерную плотность гораздо проще, чем многомерную.

И еще одно важно замечание. Часто в сторонних библиотеках алгоритм наивного байесовского классификатора реализуют с использованием гауссовских ПРВ . Конечно, это достаточно распространенный случай, но не всегда признаки подчиняются нормальному закону распределения. Если в вашей задаче существенно иная ПРВ признаков, то библиотечные реализации могут приводить к неудовлетворительным результатам. Обращайте на это внимание. Иначе, вы рискуете сделать вывод о неприменимости наивного байеса для решения вашей задачи, тогда как на самом деле нужно просто выбрать другой вид ПРВ.

Пример задачи классификации наивным байесовским классификатором

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

Обучающая выборка задана таблицей с двумя классами :

Ширина

Длина

Жук

1

10

50

гусеница

-1

2

20

30

божья коровка

+1

3

25

30

божья коровка

+1

4

20

60

гусеница

-1

5

15

70

гусеница

-1

6

40

40

божья коровка

+1

7

30

45

божья коровка

+1

8

20

45

гусеница

-1

9

40

30

божья коровка

+1

10

7

35

гусеница

-1

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

где l (length) – длина жука; w (width) – ширина;  - математические ожидания для длины и ширины соответственно;  - дисперсии для ширины и длины соответственно.

Наша задача определить параметры гауссовских распределений по обучающей выборке. Сначала найдем МО (средние значения) признаков для обоих классов (как средние арифметические):

 

А, затем, дисперсии по формуле:

получим:

Далее, сформируем условные ПРВ для первого и второго классов по правилу:

И в итоге получаем следующее:

Осталось определить априорные вероятности появления классов в выборке. В нашем случае они будут равны:

так как имеем по 5 объектов каждого класса.

Все вероятности и ПРВ определены. Теперь можно построить классификатор по правилу:

Величины штрафов возьмем одинаковыми для обоих классов:

получим:

И, так как слагаемое  одинаковое у обоих классов, то его можно не учитывать:

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

Реализацию этого алгоритма на Python можно посмотреть по ссылке:

machine_learning_16.py

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

Практический курс по ML: https://stepik.org/course/209247/

Видео по теме