В этой статье обсуждается теорема Байеса и наивная байесовская модель. Это глава 8 книги Grokking Machine Learning.

Посетите канал автора на YouTube Serrano.Academy, где вы найдете множество видеороликов о машинном обучении! Вот видео материала в этой статье:

Получите скидку 40% на Grokking Machine Learning, введя fccserrano в поле кода скидки при оформлении заказа на сайте manning.com.

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

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

В частности, теорема Байеса отвечает на вопрос «Какова вероятность Y при условии, что произошло X», который называется условной вероятностью. Как вы можете себе представить, ответ на этот тип вопросов полезен в машинном обучении, потому что если мы сможем ответить на вопрос «Какова вероятность того, что метка будет положительной, учитывая функции». у нас есть классификационная модель. Например, мы можем построить модель анализа настроений, ответив на вопрос «Какова вероятность того, что это предложение является счастливым, учитывая содержащиеся в нем слова?» Когда признаков слишком много (в данном случае слов), вычисление вероятности по теореме Байеса усложняется. Здесь нам на помощь приходит наивный алгоритм Байеса. Алгоритм наивного Байеса использует изящное упрощение этого вычисления, чтобы помочь нам построить желаемую модель классификации, называемую наивной моделью Байеса. Причина, по которой он называется наивным байесовским методом, заключается в том, что для упрощения вычислений мы делаем предположение, которое не обязательно верно, но это предположение помогает нам получить хорошую оценку вероятности.

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

Вы можете найти весь код для этой статьи по этой ссылке на репозиторий github: https://github.com/luisguiserrano/manning/tree/master/Chapter_8_Naive_Bayes.

Больной или здоровый? История с теоремой Байеса в качестве героя

Рассмотрим следующий сценарий. Вам звонит ваш (слегка ипохондрик) друг, и разворачивается следующий разговор:

Вы: Здравствуйте!

Друг: Привет, у меня ужасные новости!

Вы: О нет, что это?

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

О, нет! Что сказать своему другу? Прежде всего, давайте его успокоим и попробуем выяснить, есть ли вероятность того, что он болен.

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

Друг: Она сказала, что это было на 99% точно. Это означает, что я с вероятностью 99% заболею!

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

Друг: я читал в Интернете, и там говорится, что в среднем 1 из каждых 10 000 человек болеет этим заболеванием.

Вы: Хорошо, дайте мне листок бумаги (*переводит друга на паузу*).

Давайте остановимся на викторине.

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

a) 0–20%

b) 20–40%

c) 40–60%

d) 60–80%

e) 80–100%

Рассчитаем эту вероятность. Подводя итог, у нас есть следующие две части информации:

● Тест верен в 99% случаев. Если быть точнее (мы проверили это у врача), в среднем из каждых 100 здоровых людей тест правильно диагностирует 99 из них, а из каждых 100 больных тест правильно диагностирует 99 из них. Поэтому как на здоровых, так и на больных тест имеет точность 99%.

● В среднем 1 из каждых 10 000 человек болеет этим заболеванием.

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

Сначала давайте проведем тест на 100 больных. Поскольку тест верен в 99% случаев, мы ожидаем, что девяносто девять из этих ста человек будут правильно диагностированы как больные. Это девяносто девять больных с положительным тестом.

Теперь давайте проведем тест на 999 900 здоровых. Поскольку тест ошибается в 1% случаев, мы ожидаем, что 1% из этих 999 900 здоровых людей будут ошибочно диагностированы как больные. Это 9 999 здоровых людей с положительным результатом.

Это означает, что общее количество людей с положительным результатом теста составляет 99 + 9 999 = 10 098 человек. Из них только 99 больных. Следовательно, вероятность того, что ваш друг болен, при условии положительного результата теста, составляет 0,98%. Это меньше 1%! Теперь мы можем вернуться к нашему другу.

Вы: не волнуйтесь, судя по цифрам, которые вы мне дали, вероятность того, что у вас есть заболевание, учитывая положительный результат теста, составляет менее 1%!

Друг: Боже мой, правда? Это такое облегчение, спасибо!

Вы: Не благодарите меня, благодарите математику (подмигивает).

Подведем итоги нашего расчета. Это наши факты.

Факт 1. Из каждых 10 000 человек один болен этим заболеванием.

Факт 2. Из каждых 100 больных, прошедших тест, девяносто девять дают положительный результат, а один — отрицательный.

Факт 3. Из каждых 100 здоровых людей, прошедших тест, девяносто девять дают отрицательный результат, а один — положительный.

Мы выбираем выборку населения в один миллион человек. Они разбиты на рисунке 1 следующим образом.

● По факту 1 мы ожидаем, что 100 человек в нашей выборке будут больны, а 999 900 будут здоровы.

● По факту 2 из 100 заболевших 99 дали положительный результат, а 1 — отрицательный.

● По факту 3 из 999 900 здоровых людей 9 999 дали положительный результат и 989 901 — отрицательный.

Поскольку тест нашего друга дал положительный результат, он находится в левой колонке рисунка 1. В этой колонке 9 999 здоровых людей, которым был поставлен ошибочный диагноз, и 99 больных, которым был поставлен правильный диагноз. Вероятность того, что ваш друг болен, составляет менее 1%.

Это немного удивительно, если тест верен в 99% случаев, с какой стати он такой неправильный? Что ж, тест неплох, если он ошибочен только в 1% случаев, но поскольку один человек из каждых 10 000 болен этой болезнью, это означает, что человек болен в 0,01% случаев. Что более вероятно: быть среди 1% населения, которому поставили неверный диагноз, или быть среди 0,01% заболевших? 1%, хотя и небольшая группа, намного больше, чем 0,01%. Тест имеет недостаток; у него частота ошибок намного выше, чем частота заболеваний.

Один из способов взглянуть на это — использовать древовидные диаграммы. На нашей диаграмме мы начинаем с корня слева, который разветвляется на две возможности: ваш друг болен или здоров. Каждая из этих двух возможностей разветвляется еще на две возможности: ваш друг диагностируется здоровым или диагностируется больным. Дерево показано на рисунке 2 вместе с количеством пациентов в каждой ветви.

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

Прелюдия к теореме Байеса: априорное, событие и апостериорное

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

Предыдущая Начальная вероятность.

Событие Что-то, что происходит, что дает нам информацию.

Апостериорная Окончательная (и более точная) вероятность, которую мы рассчитываем, используя априорную вероятность и событие.

Пример следующий. Представьте, что мы хотим узнать вероятность того, что сегодня пойдет дождь. Если мы ничего не знаем, мы можем дать только грубую оценку вероятности, которая является априорной. Если мы осмотримся и обнаружим, что находимся в тропических лесах Амазонки (событие), то сможем дать гораздо более точную оценку. На самом деле, если мы находимся в тропических лесах Амазонки, сегодня, вероятно, будет дождь. Эта новая оценка является апостериорной.

Пример следующий, представьте, что я думаю о числе от нуля до девяти (включительно). Какова вероятность того, что число равно шестерке? Поскольку мы ничего не знаем о числе, вероятность

Это приор. Если я скажу вам, что число четное, это событие, которое все изменит. После того, как вы узнали, что число четное, вероятность того, что это число равно 6, равна

потому что теперь возможные значения числа были сведены к множеству {0, 2, 4, 6, 8}. Событием является тот факт, что число четное

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

Предварительно: изначально эта вероятность равна 1/10 000, потому что у нас нет никакой другой информации, кроме того факта, что один из каждых 10 000 пациентов болен. Эта 1/10 000, или 0,0001, является априорной.

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

Апостериорный анализ: после получения положительного результата мы пересчитываем вероятность того, что пациент болен, и она составляет 0,0098. Это задняя часть.

Теорема Байеса — один из важнейших строительных блоков вероятности и машинного обучения. Достаточно важно, что в его честь названы несколько областей, например Байесовское обучение, Байесовская статистика и Байесовский анализ. В этой статье мы изучаем теорему Байеса и производную от нее важную модель классификации: наивную модель Байеса. Короче говоря, наивная байесовская модель делает то же, что и большинство моделей классификации, а именно предсказывает метку на основе набора признаков. Модель возвращает ответ в виде вероятности, которая рассчитывается по теореме Байеса.

Если вы хотите увидеть больше книг, посмотрите их на платформе liveBook Мэннинга здесь.