Что такое наивный байесовский классификатор?
Наивный байесовский классификатор можно определить как контролируемый алгоритм классификации, основанный на теореме Байеса с предположением о независимости признаков.
Давайте посмотрим на математическое уравнение теоремы Байеса
P(A|B) — это вероятность гипотезы A при данных B.
P(B|A) — это вероятность данных B при условии, что гипотеза A верна.
P(A) – это вероятность того, что гипотеза A верна (независимо от данных).
P(B) – вероятность данных (независимо от гипотезы).
Это означает, что предикторы/функции независимы, то есть наличие одной конкретной функции не влияет на другую.
Типы наивного байесовского классификатора:
- Полиномиальный наивный байесовский метод.
- Наивный Байес Бернулли.
- Гауссовский наивный байесовский метод.
В библиотеке scikit-learn есть три типа наивной байесовской модели, и мы поговорим о полиномиальной наивной байесовской модели. Это наиболее распространенный классификатор, который в основном используется для классификации текстов, где функции связаны с количеством слов или частотой встречаемости в документах, подлежащих классификации.
Пример наивного байесовского алгоритма
- В основном используется Фильтрация спама в электронных письмах.
- Анализ настроений, Системы рекомендаций и т. д.
Давайте сделаем несколько примеров с Reddit.
## Import basic libraries for model with Naive Bayes ## Use reddit API to call reddit post import pandas as pd import numpy as np import requests import math
Здесь импортируйте базовые библиотеки и импортируйте пост с Reddit с помощью API (метод PRAW по этой ссылке — ›› https://praw.readthedocs.io/en/latest/ или вы можете использовать и другой метод)
Мы создадим простой подсказчик на Reddit по названию поста на Reddit. Чтобы использовать данные Reddit API для машинного обучения, нам нужно иметь возможность преобразовывать содержимое каждой строки в вектор чисел. Мы будем использовать векторизатор TF-IDF и создадим конвейер:
## Import Naive Bayes libraries from sklearn.model_selection import train_test_split, cross_val_score from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.naive_bayes import MultinomialNB from sklearn.pipeline import make_pipeline # Let's call in the data set from reddit columns = ['created_utc', 'is_video', 'subreddit', 'title', 'total_awards_received', 'ups'] df = pd.DataFrame(get_reddit_data(PAGE_COUNT), columns=columns) df = df.sample(frac=1, random_state=RANDOM_STATE) df.head()
Вот так выглядит набор данных:
На этом этапе мы должны установить title и subreddit в качестве цели для тестового разделения обучения, прежде чем создавать конвейер для их обучения:
X = df['title'].values y = df['subreddit'].values X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=TEST_SIZE, random_state=0)
Наконец, мы можем создать и применить модель к обучающим данным и предсказать метки для тестовых данных:
model = make_pipeline(TfidfVectorizer(), MultinomialNB()) model.fit(X_train, y_train) y_predict = model.predict(X_test)
Ура!!! мы предсказали метки для тестовых данных. Теперь у нас есть очень классные инструменты для определения с помощью метода прогнозирования этого пайплайна. Вот простая функция, которая вернет предсказание для одной строки:
def reddit(inputs): model return model.predict([inputs])[0]
Давайте попробуем наш прогноз:
reddit('You shall not pass here') 'gaming'
Дела идут по-моему!! Это просто простой пример алгоритма наивного Байеса.
Заключение
В этом посте мы рассказали об основных концепциях наивного байесовского алгоритма и продемонстрировали базовый пример. Наивный Байес в основном используется в текстовой классификации. Его легко реализовать и быстро выполнить. Однако основным недостатком является то, что функции должны быть независимыми, что неверно в реальной жизни.