Понимание Наивного Байеса


47

От StatSoft, Inc. (2013), Электронный учебник статистики , «Наивный байесовский классификатор» :

введите описание изображения здесь

Чтобы продемонстрировать концепцию наивной байесовской классификации, рассмотрим пример, показанный на иллюстрации выше. Как указано, объекты могут быть классифицированы как ЗЕЛЕНЫЙ или КРАСНЫЙ. Моя задача состоит в том, чтобы классифицировать новые случаи по мере их поступления, т. Е. Решать, к какой метке класса они принадлежат, на основе существующих в данный момент объектов.

Поскольку GREEN-объектов в два раза больше, чем RED, разумно полагать, что новый случай (который еще не наблюдался) имеет в два раза больше шансов на получение GREEN, чем RED. В байесовском анализе это убеждение известно как априорная вероятность. Предыдущие вероятности основаны на предыдущем опыте, в данном случае проценте ЗЕЛЕНЫХ и КРАСНЫХ объектов, и часто используются для прогнозирования результатов до того, как они действительно произойдут.

Таким образом, мы можем написать:

введите описание изображения здесь

Поскольку существует всего 60 объектов, 40 из которых ЗЕЛЕНЫЕ и 20 КРАСНЫХ, наши предыдущие вероятности для членства в классе:

введите описание изображения здесь введите описание изображения здесь

Сформулировав нашу предыдущую вероятность, мы теперь готовы классифицировать новый объект (БЕЛЫЙ круг). Поскольку объекты хорошо сгруппированы, разумно предположить, что чем больше ЗЕЛЕНЫХ (или КРАСНЫХ) объектов в окрестности X, тем больше вероятность того, что новые случаи принадлежат именно этому цвету. Чтобы измерить эту вероятность, мы нарисуем круг вокруг X, который охватывает количество (выбираемое априори) точек независимо от их меток класса. Затем мы вычисляем количество точек в круге, принадлежащих каждой метке класса. Из этого мы рассчитываем вероятность:

введите описание изображения здесь

Из иллюстрации выше видно, что вероятность X для данного ЗЕЛЕНОГО меньше, чем вероятность X для КРАСНОГО, поскольку круг охватывает 1 ЗЕЛЕНЫЙ объект и 3 КРАСНЫХ. Таким образом:

введите описание изображения здесь

введите описание изображения здесь

Хотя предыдущие вероятности указывают, что X может принадлежать ЗЕЛЕНОМУ (учитывая, что ЗЕЛЕНОГО в два раза больше, чем КРАСНОГО), вероятность указывает на обратное; что членство в классе X является КРАСНЫМ (учитывая, что в окрестностях X больше КРАСНЫХ объектов, чем ЗЕЛЕНЫХ). В байесовском анализе окончательная классификация производится путем объединения обоих источников информации, т. Е. Предварительного и вероятностного, для формирования апостериорной вероятности с использованием так называемого правила Байеса (названного в честь преподобного Томаса Байеса 1702-1761).

введите описание изображения здесь

Наконец, мы классифицируем X как RED, поскольку членство в классе достигает наибольшей апостериорной вероятности.

Вот тут-то и возникает трудность моего понимания математики.

введите описание изображения здесь

p (Cj | x1, x2, x ..., xd) - апостериорная вероятность принадлежности к классу, т. е. вероятность того, что X принадлежит Cj, но зачем писать это так?

Расчет вероятности?

введите описание изображения здесь

Задняя вероятность?

введите описание изображения здесь

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


12
(+1) Я восхищаюсь действительно осторожным и ясным способом, которым вы задали свой вопрос.
rolando2

2
@ rolando2: все цифры и почти весь текст этого вопроса взяты
Франк Дернонкурт

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

Надлежащее указание прямых котировок всегда было обязательным требованием на сайтах Stack Exchange. Во всяком случае, упущение легко исправить; И я сделал это. Нет необходимости удалять вашу учетную запись - пожалуйста, пересмотрите.
Scortchi - Восстановить Монику

Ответы:


50

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

Мы хотим найти вероятность того, что новый пример принадлежит каждому классу: ). Затем мы вычисляем эту вероятность для каждого класса и выбираем наиболее вероятный класс. Проблема в том, что у нас обычно нет таких вероятностей. Однако теорема Байеса позволяет переписать это уравнение в более удобной форме.P(class|feature1,feature2,...,featuren

Теорема Байеса есть просто или в терминах нашей задачи:

P(A|B)=P(B|A)P(A)P(B)
P(class|features)=P(features|class)P(class)P(features)

Мы можем упростить это, удалив . Мы можем сделать это, потому что мы собираемся ранжировать для каждого значения ; будут одинаковыми каждый раз - это не зависит от . Это оставляет нас с P(features)P(class|features)classP(features)class

P(class|features)P(features|class)P(class)

Предыдущие вероятности, , можно рассчитать, как вы описали в своем вопросе.P(class)

Это оставляет . Мы хотим исключить огромную и, вероятно, очень разреженную, совместную вероятность . Если каждая функция независима, то Даже если они на самом деле не являются независимыми, мы можем предположить, что они (это " Наивная "часть наивного Байеса). Лично я считаю, что проще обдумать это для дискретных (то есть категориальных) переменных, поэтому давайте воспользуемся немного другой версией вашего примера. Здесь я разделил каждое измерение элемента на две категориальные переменные.P(features|class)P(feature1,feature2,...,featuren|class)

P(feature1,feature2,...,featuren|class)=iP(featurei|class)

Дискретные данные примера,

Пример: тренировка классификатора

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

Приоры тривиальны: всего шестьдесят очков, сорок - зеленые, а двадцать - красные. Таким образом,

P(class=green)=4060=2/3 and P(class=red)=2060=1/3

Далее мы должны вычислить условные вероятности каждого значения признака данного класса. Здесь есть две функции: и , каждая из которых принимает одно из двух значений (A или B для одного, X или Y для другого). Поэтому нам необходимо знать следующее:feature1feature2

  • P(feature1=A|class=red)
  • P(feature1=B|class=red)
  • P(feature1=A|class=green)
  • P(feature1=B|class=green)
  • P(feature2=X|class=red)
  • P(feature2=Y|class=red)
  • P(feature2=X|class=green)
  • P(feature2=Y|class=green)
  • (в случае, если это не очевидно, это все возможные пары признак-значение и класс)

Их легко вычислить, посчитав и разделив тоже. Например, для мы смотрим только на красные точки и подсчитываем, сколько из них находится в области «A» для . Есть двадцать красных точек, все из которых находятся в области «A», поэтому . Ни одна из красных точек не находится в области B, поэтому . Далее мы делаем то же самое, но рассматриваем только зеленые точки. Это дает нам и . Мы повторяем этот процесс для , чтобы округлить таблицу вероятностей. Предполагая, что я рассчитал правильно, мы получаемP(feature1=A|class=red)feature1P(feature1=A|class=red)=20/20=1P(feature1|class=red)=0/20=0P(feature1=A|class=green)=5/40=1/8P(feature1=B|class=green)=35/40=7/8feature2

  • P(feature1=A|class=red)=1
  • P(feature1=B|class=red)=0
  • P(feature1=A|class=green)=1/8
  • P(feature1=B|class=green)=7/8
  • P(feature2=X|class=red)=3/10
  • P(feature2=Y|class=red)=7/10
  • P(feature2=X|class=green)=8/10
  • P(feature2=Y|class=green)=2/10

Эти десять вероятностей (два априора плюс восемь условных выражений) являются нашей моделью

Классификация нового примера

Давайте классифицируем белую точку из вашего примера. Он находится в области «A» для и области «Y» для . Мы хотим найти вероятность того, что это в каждом классе. Давайте начнем с красного. Используя формулу выше, мы знаем, что: Subbing по вероятностям из таблицы получаемfeature1feature2

P(class=red|example)P(class=red)P(feature1=A|class=red)P(feature2=Y|class=red)

P(class=red|example)131710=730
Затем мы делаем то же самое для зеленого:
P(class=green|example)P(class=green)P(feature1=A|class=green)P(feature2=Y|class=green)

Подстановка в этих значениях дает нам 0 ( ). Наконец, мы смотрим, какой класс дал нам наибольшую вероятность. В данном случае это явно красный класс, так что именно здесь мы назначаем точку.2/302/10

Примечания

В вашем исходном примере функции непрерывны. В этом случае вам нужно найти какой-то способ присвоения P (feature = value | class) для каждого класса. Тогда вы можете рассмотреть возможность подгонки к известному распределению вероятностей (например, гауссову). Во время обучения вы найдете среднее значение и дисперсию для каждого класса по каждому измерению. Чтобы классифицировать точку, вы должны найти , подключив соответствующее среднее значение и дисперсию для каждого класса. Другие распределения могут быть более подходящими, в зависимости от особенностей ваших данных, но гауссиан будет хорошей отправной точкой.P(feature=value|class)

Я не слишком знаком с набором данных DARPA, но вы, по сути, делаете то же самое. Вы, вероятно, в конечном итоге вычислите что-то вроде P (атака = TRUE | служба = палец), P (атака = ложь | служба = палец), P (атака = TRUE | служба = ftp) и т. Д., А затем объедините их в так же, как в примере. Как примечание стороны, часть уловки здесь состоит в том, чтобы придумать хорошие особенности. Например, исходный IP-адрес, вероятно, будет безнадежно редким - у вас, вероятно, будет только один или два примера для данного IP-адреса. Вы могли бы сделать намного лучше, если бы вы геолоцировали IP-адрес и использовали вместо него «Source_in_same_building_as_dest (true / false)» или что-то еще.

Я надеюсь, что это помогает больше. Если что-то требует разъяснений, я был бы рад попробовать еще раз!


3
Конечно. Если с тобой все в порядке, я собираюсь отредактировать свой ответ, чтобы было больше места (и я могу делать вещи LaTex).
Мэтт Краузе

1
Я расширил учебные и тестовые части и превратил их в собственный раздел. Первые пара абзацев одинаковы ...
Мэтт Краузе

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

@ Berkan, спасибо; это очень мило с вашей стороны (хотя есть и много других отличных ответов!) Если у вас есть какие-либо предложения, я буду рад попытаться ответить на них!
Мэтт Краузе

+1 и stackoverflow.com/questions/10059594/… где есть подобное объяснение
Дрей

6

Упрощая обозначение обозначающее данные, мы хотим найти, какой из различных является наибольшим. Теперь формула Байеса дает где знаменатель на право одинаково для всех . Если мы хотим найти, какой из , является наибольшим, мы, конечно, можем вычислить каждый и сравнить значения. Но обратите внимание, что на сравнение на самом деле не влияет значение которое одинаково во всех случаях. Мы могли бы одинаково хорошо вычислить всеDP(CjD)

P(CjD)=P(DCj)P(Cj)P(D), j=1,2,
jP(C1D)P(C2D),P(CjD)P(D)P(DCj)P(Cj) и сравнивать (то есть, не удосужившись разделить каждый на перед сравнениями), и тот же будет выбран как имеющий наибольшую апостериорную вероятность. Иными словами, апостериорная вероятность является пропорциональным к вероятности раз априорная вероятность Наконец, когда данные представляют собой набор (условно) независимых наблюдений учетом , мы имеем P(DCj)P(Cj)P(D)CjP(CjD)P(DCj) P(Cj)
P(CjD)P(DCj)P(Cj).
DC j ) P ( D C j )(x1,x2,,xd)Cj)
P(DCj)=P(x1,x2,,xdCj)=P(x1Cj)P(x2Cj)P(xdCj)=1=1dP(xiCj)

1

Основное предположение, лежащее в основе наивной модели Байеса, состоит в том, что каждый признак (x_i) условно не зависит от всех других признаков данного класса. Именно это предположение позволяет нам записать вероятность как простой продукт (как вы показали).

Это также то, что помогает наивной модели Байеса хорошо обобщаться на практике. Рассмотрим этап обучения: если бы мы не делали этого предположения, то обучение включало бы оценку сложного, многомерного распределения: p (x1, x2, ..., xn, c), в котором все функции распределены совместно. Вместо этого мы можем тренироваться, оценивая p (x1, c), p (x2, c), ..., p (xn, c), поскольку знание значения c делает значения всех других функций неактуальными (они обеспечивают нет дополнительной информации о x_i).

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.