Что такое наивная байесовская классификация? Как это реализовать на Python?
Наивная байесовская классификация
Алгоритм наивной байесовской классификации является одним из наиболее часто используемых алгоритмов машинного обучения с учителем для задач классификации. Он основан на теореме Байеса о вероятности.
Наивный байесовский классификатор называется наивным, потому что он рассматривает каждую входную переменную как независимое событие (Где результат одного события не влияет на результат других событий Пример:результат бросок первого кубика не влияет на результат броска следующего кубика). Чтобы понять алгоритм наивного Байеса, нам нужно быть знакомым с теоремой Байеса.
Приложения алгоритма наивной байесовской классификации
Ниже приведены некоторые из широко используемых приложений алгоритма наивной байесовской классификации.
- Текстовая классификация
- Мультиклассовое предсказание
- Фильтрация спама
- Система рекомендаций
- Анализ настроений
Теорема Байеса
Теорема Байеса (или) закон Байеса (или) правило Байеса описывает условную вероятность события, основанную на предварительном знании условий, которые могут быть связаны с событием. Теорема Байеса широко используется в машинном обучении из-за ее эффективного способа прогнозирования классов с точностью и точностью.
Теорема Байеса математически формулируется как
где,
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.
Мы используем набор данных о кликах по рекламе (о пользователях, нажимающих на рекламу или нет)
Набор данных имеет следующие особенности,
- Ежедневное время, проведенное на сайте — количество времени, проведенное на сайте.
- Возраст — возраст пользователя
- Доход от области — средний доход пользователей.
- Ежедневное использование Интернета — Среднее использование Интернета в день
- Ad Topic Line — Тематический текст объявления
- Город — Город Пользователей
- Male — пол пользователей (мужской или женский)
- Страна — Страна пользователей
- Отметка времени — время клика по объявлению.
- Кликнули по объявлению — 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