@just_data_science November 09, 2017
Томас Байес - это был такой священник-математик в 18 веке. Несмотря на религиозный статус, человечеству он запомнился прежде всего как один из главных ученых, развивавших теорию вероятностей. (Это такой раздел математики, который объясняет, как считать вероятность, что вы встретите на улице живого динозавра). И был он нормальным таким математиком, оставившим после себя кучу трудов - формул, теорем, да и просто идей. Есть даже целая философская концепция - байесианство, основанная на его идеях.
18й век, говорите? Машинное обучение в 18 веке?..
Да, Томас жил очень давно. Никаких машин в те времена не было, по крайней мере в современном понимании. Но все современные компьютеры и алгоритмы - это результат в том числе математических разработок. И труды, написанные сотни лет назад, вполне себе современны. Как со времен Ньютона гравитация не изменилась, так и с математикой все абсолютно то же самое.
Значит он был очень наивным?
На самом деле, когда говорят "Наивный Байес", то это разговорное выражение. И имеют в виду не старину Томаса, а классификатор, основанный на разработанной им теореме - теореме Байеса. (Напомню, классификатор - это алгоритм (или набор формул), который позволяет ответить на вопрос "к какому классу/группе относится такой то объект?")
Что говорит теорема Байеса?
Сама по себе она хоть и не очень сложная, но все равно непонятная для не-математиков. Обойдемся без формул, передам своими словами самую суть:
Теорема Байеса гласит, что вероятность какого-либо события - это тоже самое, что и частота наступления этого события. А частоту, согласно теореме, мы получаем измерениями. Делим количество известных наступлений события на общее количество измерений - это и есть вероятность события.
Пример, как ее применять то?
Например, какова вероятность, что вы встретите на улице живого динозавра? Берем журнал ваших прогулок за последние много лет. Смотрим, сколько раз из этих прогулок вы встречали динозавра. Если 0 раз - значит, согласно теореме Байеса, вероятность встретить динозавра будет 0.
Если же заменить динозавра на кота, то вероятность встретить его будет где-то достаточно близко к 100%. Значит, собираясь на улицу, вы можете прогнозировать "сегодня я скорее всего встречу кота на улице" и, например, взять фотик, чтобы заинстаграмить ничего не подозревающее животное.
А что за классификатор Байеса, и как он работает?
Это такой алгоритм, который использует теорему Байеса, чтобы "угадать", к какому классу относится объект.
Наиболее понятное применение в быту - в антиспаме почтовых серверов. Разберем на пальцах, как это работает.
Допустим, 10 человекам пришло письмо с текстом "удлини свой карандаш недорого, телефон 111-222-333". 9 из них нажали "спам". Почтовый сервер это запомнил: взял каждое слово из письма, и отметил в своей таблице слов. В этой таблице у него 3 колонки: само слово, счетчик "это слово - спам" и счетчик "это слово - не спам". Словам из первого письма добавилось по 9 очков в колонке "это слово - спам".
Еще 10 человекам (не важно, этим же или другим) пришло письмо с текстом "Родители, соберите детям на завтра карандаши". И никто не пометил его как "спам". Сервер это тоже запомнил: взял каждое слово и отметил 10 очков "не спам". Если же какой-то 1 родитель нажмет "это спам", то все слова письма получат по еще одному очку в поле "спам", соответственно очки "не спам" уменьшатся на 1.
Таким образом, произошло машинное обучение алгоритма. Теперь он готов защищать вас от нежелательной почты.
И вот на почту пришло письмо "Карандаши и фломастеры, недорого, телефон 333-55-22". Почтовый сервер теперь пытается "угадать", спам это или нет. Он берет каждое слово из письма, и смотрит свою статистику. Сколько слов отмечено как "спам", сколько "не спам", сколько неизвестных слов? Слова "недорого", "телефон" - спамные. Слово "карандаши" - одновременно и спамное и неспамное с одинаковым количеством очков, наш сервер тогда будет считать его неспамным. Остальные слова сервер пока не знает. Итого - 2 спамных слова против 1 неспамного, всего 3 слова. Согласно теореме Байеса, вероятность того что письмо спам - 2/3, то есть 66.6% (ой, число зверя!). Письмо уйдет в папку "Спам". А если пользователи проголосуют "не спам" - алгоритм это тоже запомнит, и в следующий раз будет определять точнее.
И все? Это же примитивно!
И примитивно, и наивно! Наивно считать, что если в письме есть слово "телефон" - то это спам. Именно поэтому, из-за вот таких больших допущений, классификатор Байеса называют "наивным".
Но самое удивительное, что когда берешь много-много слов, то точность определения спама достаточно высока. Так же и в других задачах: несмотря на крайнюю простоту, Байесовский классификатор часто показывает очень хорошую точность классификации. При этом - он достаточно легко программируется, и легко посмотреть, на основе какой логики он принимает решения.