Что такое наивный байесовский классификатор?

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

Давайте посмотрим на математическое уравнение теоремы Байеса

P(A|B) — это вероятность гипотезы A при данных B.

P(B|A) — это вероятность данных B при условии, что гипотеза A верна.

P(A) – это вероятность того, что гипотеза A верна (независимо от данных).

P(B) – вероятность данных (независимо от гипотезы).

Это означает, что предикторы/функции независимы, то есть наличие одной конкретной функции не влияет на другую.

Типы наивного байесовского классификатора:

  1. Полиномиальный наивный байесовский метод.
  2. Наивный Байес Бернулли.
  3. Гауссовский наивный байесовский метод.

В библиотеке scikit-learn есть три типа наивной байесовской модели, и мы поговорим о полиномиальной наивной байесовской модели. Это наиболее распространенный классификатор, который в основном используется для классификации текстов, где функции связаны с количеством слов или частотой встречаемости в документах, подлежащих классификации.

Пример наивного байесовского алгоритма

  1. В основном используется Фильтрация спама в электронных письмах.
  2. Анализ настроений, Системы рекомендаций и т. д.

Давайте сделаем несколько примеров с 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'

Дела идут по-моему!! Это просто простой пример алгоритма наивного Байеса.

Заключение

В этом посте мы рассказали об основных концепциях наивного байесовского алгоритма и продемонстрировали базовый пример. Наивный Байес в основном используется в текстовой классификации. Его легко реализовать и быстро выполнить. Однако основным недостатком является то, что функции должны быть независимыми, что неверно в реальной жизни.