Наивный Байес
Теорема Байеса с наивной независимостью: произведение вероятностей признаков.
1function naiveBayes(2 train: Array<[win: 0 | 1, free: 0 | 1, meet: 0 | 1, spam: 0 | 1]>,3 query: [win: 0 | 1, free: 0 | 1, meet: 0 | 1],4): { pSpam: number, pHam: number } {5 const spam = train.filter((r) => r[3] === 1)6 const ham = train.filter((r) => r[3] === 0)7 8 // наивность: признаки независимы — вероятности перемножаются9 const pSpam = spam.length / train.length *10 query.reduce((p: number, v: 0 | 1, i: number) => p * ((spam.filter((r) => r[i] === v).length + 1) / (spam.length + 2)), 1)11 const pHam = ham.length / train.length *12 query.reduce((p: number, v: 0 | 1, i: number) => p * ((ham.filter((r) => r[i] === v).length + 1) / (ham.length + 2)), 1)13 14 return { pSpam, pHam }15}Проблема
Теорема Байеса с наивной независимостью: произведение вероятностей признаков.
Что вы видите
P(класс|признаки) ∝ P(класс)·ΠP(признак|класс) с сглаживанием +1.
Как это работает
Обучение — один проход по данным (просто счётчики). Наивность неверна, но работает удивительно хорошо; сглаживание Лапласа спасает от нулей.
Пошаговый разбор
- 01
Априорные
Доли классов.
- 02
Условные
Признак|класс.
- 03
Байес
Произведение и сравнение.
Complexity и ограничения
Сложность см. в шапке страницы.
Edge cases
- Пустой вход
Корректная тривиальная обработка.
- Вырожденный случай
Минимум работы — сразу ответ.
Где встречается в реальности
Спам
Классический фильтр почты.
Категоризация
Тексты/новости.
Рекомендации
Совместные признаки.
Связанные алгоритмы
«Спам-фильтр, обучающийся за один проход»
Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.
Shorts 9:16
Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.