Что такое наивная байесовская классификация? Как это реализовать на Python?

Наивная байесовская классификация

Алгоритм наивной байесовской классификации является одним из наиболее часто используемых алгоритмов машинного обучения с учителем для задач классификации. Он основан на теореме Байеса о вероятности.

Наивный байесовский классификатор называется наивным, потому что он рассматривает каждую входную переменную как независимое событие (Где результат одного события не влияет на результат других событий Пример:результат бросок первого кубика не влияет на результат броска следующего кубика). Чтобы понять алгоритм наивного Байеса, нам нужно быть знакомым с теоремой Байеса.

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

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

  1. Текстовая классификация
  2. Мультиклассовое предсказание
  3. Фильтрация спама
  4. Система рекомендаций
  5. Анализ настроений

Теорема Байеса

Теорема Байеса (или) закон Байеса (или) правило Байеса описывает условную вероятность события, основанную на предварительном знании условий, которые могут быть связаны с событием. Теорема Байеса широко используется в машинном обучении из-за ее эффективного способа прогнозирования классов с точностью и точностью.

Теорема Байеса математически формулируется как

где,

P(A|B) = вероятность A при условии, что событие B (или) апостериорная вероятность A при условии B.

P(B|A) = вероятность B при условии, что событие A (или) вероятность A при условии B.

P(A) и P(B) = вероятность A и B (или) априорная вероятность

Пример:

Давайте рассмотрим пример, где даже если у 100% больных раком поджелудочной железы есть определенный симптом, когда у кого-то такой же симптом, это не означает, что у этого человека есть 100% шанс заболеть раком поджелудочной железы.

Предположим, что уровень заболеваемости раком поджелудочной железы составляет 1/100 000, в то время как 10/100 000 здоровых людей имеют одни и те же симптомы во всем мире, вероятность наличия рака поджелудочной железы с учетом симптомов составляет всего 9,1%, а остальные 90,9% могут быть «ложноположительными». то есть ложно говорят, что у него рак; «положительный» — это сбивающий с толку термин, когда, как здесь, тест дает плохие новости).

Исходя из уровня заболеваемости, в следующей таблице представлены соответствующие цифры на 100 000 человек.

Вероятность наличия рака при наличии симптомов:

Реализация на Python

Давайте реализуем наивную байесовскую классификацию в Python.

Мы используем набор данных о кликах по рекламе (о пользователях, нажимающих на рекламу или нет)

Набор данных имеет следующие особенности,

  1. Ежедневное время, проведенное на сайте — количество времени, проведенное на сайте.
  2. Возраст — возраст пользователя
  3. Доход от области — средний доход пользователей.
  4. Ежедневное использование Интернета — Среднее использование Интернета в день
  5. Ad Topic Line — Тематический текст объявления
  6. Город — Город Пользователей
  7. Male — пол пользователей (мужской или женский)
  8. Страна — Страна пользователей
  9. Отметка времени — время клика по объявлению.
  10. Кликнули по объявлению — 0 или 1, 0 — не кликнули, 1 — кликнули.
#importing libraries
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import sklearn

Давайте загрузим набор данных

#loading the dataset
data =  pd.read_csv('/content/drive/MyDrive/ML_datasets/advertising.csv')
#head of the dataset
data.head()

#describing the data
data.describe()

Затем мы можем удалить несколько столбцов для лучшей наивной байесовской модели.

#drop 'Ad Line Topic' ,'City', 'Country' and Timestamp.
data.drop(['Ad Topic Line','City','Country','Timestamp'],axis = 1,inplace = True)
data.head()

Затем мы можем разделить набор данных на обучение и тестирование, а размер теста будет зафиксирован как 1/3 или 0,33.

#train test split the data
X = data.iloc[:,0:4].values
Y = data['Clicked on Ad'].values
from sklearn.model_selection import train_test_split
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size = 1/3,random_state = 0)
print('X_train shape:',X_train.shape)
print('X_test shape:',X_test.shape)
print('Y_train shape:',Y_train.shape)
print('Y_test shape:',X_test.shape)

Далее мы выполняем масштабирование функций для X_train и X_test.

#feature scaling
from sklearn.preprocessing import StandardScaler
stdscaler = StandardScaler()
X_train = stdscaler.fit_transform(X_train)
X_test = stdscaler.transform(X_test)

Давайте обучим наивную байесовскую модель на обучающих данных.

#naive bayes model
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
clf.fit(X_train,Y_train

Теперь мы можем предсказать результаты

#predicting the result
y_pred = clf.predict(X_test)
print(y_pred)

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

#confusion matrix
from sklearn.metrics import confusion_matrix,accuracy_score
cm = confusion_matrix(Y_test, y_pred)
print(cm)
#accuracy score of the model
print('Accuracy score :',accuracy_score(Y_test,y_pred))

Давайте построим матрицу путаницы

#plotting the confusion matrix
plt.figure(figsize=(10,5))
plt.title(‘Confusion matrix’)
sns.heatmap(cm,annot=True,fmt=’d’,cmap=’inferno_r’)

Точность модели для этого набора данных составляет 0,96.

Модель наивной байесовской классификации хорошо зарекомендовала себя для набора рекламных данных.

Больше контента на plainenglish.io