logo

Алгоритм наївного класифікатора Байєса

  • Наївний алгоритм Байєса — це алгоритм навчання під наглядом, який базується на Теорема Байєса і використовується для вирішення проблем класифікації.
  • В основному використовується в класифікація тексту який включає багатовимірний набір навчальних даних.
  • Наївний класифікатор Байєса — це один із простих і найефективніших алгоритмів класифікації, який допомагає створювати швидкі моделі машинного навчання, які можуть робити швидкі прогнози.
  • Це ймовірнісний класифікатор, що означає, що він прогнозує на основі ймовірності об’єкта.
  • Деякі популярні приклади наївного алгоритму Байєса фільтрація спаму, сентиментальний аналіз і класифікація статей .

Чому це називається Наївний Байєс?

Алгоритм Naive Bayes складається з двох слів Naive та Bayes, які можна описати так:

    Наївний: це називається наївним, оскільки передбачає, що поява певної ознаки не залежить від появи інших ознак. Наприклад, якщо фрукт ідентифікують за кольором, формою та смаком, то яблуком визнають червоний, сферичний та солодкий фрукт. Таким чином, кожна особливість окремо сприяє визначенню того, що це яблуко, незалежно одна від одної.Байєса: Його називають Байєсом, оскільки він залежить від принципу теореми Байєса.

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

  • Теорема Байєса також відома як Правило Байєса або закон Байєса , який використовується для визначення ймовірності гіпотези з попередніми знаннями. Це залежить від умовної ймовірності.
  • Формула теореми Байєса має вигляд:
Алгоритм наївного класифікатора Байєса

Де,

P(A|B) – апостеріорна ймовірність : Ймовірність гіпотези А про спостережувану подію Б.

P(B|A) — ймовірність правдоподібності : ймовірність доказів, враховуючи, що ймовірність гіпотези істинна.

P(A) є попередньою ймовірністю : Ймовірність гіпотези перед спостереженням доказів.

P(B) — гранична ймовірність : ймовірність доказів.

Робота наївного класифікатора Байєса:

Роботу наївного класифікатора Байєса можна зрозуміти за допомогою наведеного нижче прикладу:

Припустимо, у нас є набір даних метеорологічні умови і відповідна цільова змінна ' грати '. Отже, використовуючи цей набір даних, нам потрібно вирішити, чи грати нам у певний день відповідно до погодних умов. Отже, щоб вирішити цю проблему, нам потрібно виконати наступні кроки:

  1. Перетворіть заданий набір даних у частотні таблиці.
  2. Створіть таблицю правдоподібності, знайшовши ймовірності заданих ознак.
  3. Тепер скористайтеся теоремою Байєса, щоб обчислити апостеріорну ймовірність.

проблема : Якщо погода сонячна, гравець має грати чи ні?

Рішення : Щоб вирішити цю проблему, спочатку розгляньте наведений нижче набір даних:

Outlook грати
0 Дощова Так
1 Сонячно Так
2 Похмуро Так
3 Похмуро Так
4 Сонячно Немає
5 Дощова Так
6 Сонячно Так
7 Похмуро Так
8 Дощова Немає
9 Сонячно Немає
10 Сонячно Так
одинадцять Дощова Немає
12 Похмуро Так
13 Похмуро Так

Таблиця частот для погодних умов:

Погода Так Немає
Похмуро 5 0
Дощова 2 2
Сонячно 3 2
Всього 10 5

Таблиця ймовірності погодних умов:

Погода Немає Так
Похмуро 0 5 5/14= 0,35
Дощова 2 2 4/14=0,29
Сонячно 2 3 5/14=0,35
всі 4/14=0,29 10/14=0,71

Застосовуючи теорему Байєса:

P(Так|Сонячно)= P(Сонячно|Так)*P(Так)/P(Сонячно)

P(Сонячно|Так)= 3/10= 0,3

P(сонячно)= 0,35

P(Так)=0,71

Отже, P(Так|Сонячно) = 0,3*0,71/0,35= 0,60

P(Ні|Сонячно)= P(Сонячно|Ні)*P(Ні)/P(Сонячно)

P(Сонячно|НІ)= 2/4=0,5

P(No)= 0,29

P(сонячно)= 0,35

Отже, P(Ні|Сонячно)= 0,5*0,29/0,35 = 0,41

Отже, як ми бачимо з наведених вище розрахунків, що P(Так|Сонячно)>P(Ні|Сонячно)

Тому в сонячний день гравець може грати в гру.

Переваги наївного класифікатора Байєса:

  • Naive Bayes — це один із швидких і простих алгоритмів машинного навчання для прогнозування класу наборів даних.
  • Його можна використовувати як для двійкових, так і для багатокласових класифікацій.
  • Порівняно з іншими алгоритмами, він добре працює в багатокласових передбаченнях.
  • Це найпопулярніший вибір для задачі класифікації тексту .

Недоліки наївного класифікатора Байєса:

  • Наивний Байєс припускає, що всі функції є незалежними або непов’язаними, тому він не може вивчити зв’язок між функціями.

Застосування наївного класифікатора Байєса:

  • Використовується для Кредитний скоринг .
  • Використовується в класифікація медичних даних .
  • Його можна використовувати в прогнози в реальному часі тому що Naive Bayes Classifier охоче навчається.
  • Він використовується в класифікації тексту, наприклад Фільтрація спаму і Аналіз настроїв .

Типи наївної моделі Байєса:

Існує три типи наївної моделі Байєса, наведені нижче:

    гаусівський: модель Гауса припускає, що ознаки мають нормальний розподіл. Це означає, що якщо предиктори приймають безперервні значення замість дискретних, тоді модель припускає, що ці значення взято з розподілу Гауса.Багаточлен: Мультиноміальний наївний класифікатор Байєса використовується, коли дані є мультиноміально розподіленими. Він в основному використовується для проблем класифікації документів, це означає, що певний документ належить до категорії, як-от спорт, політика, освіта тощо.
    Класифікатор використовує частоту слів для предикторів.Бернуллі: Класифікатор Бернуллі працює подібно до мультиноміального класифікатора, але змінні-прогнози є незалежними булевими змінними. Наприклад, чи є певне слово в документі чи ні. Ця модель також відома завданнями класифікації документів.

Реалізація наївного алгоритму Байєса на Python:

Тепер ми реалізуємо простий алгоритм Байєса за допомогою Python. Отже, для цього ми будемо використовувати ' дані користувача ' набір даних , яку ми використали в нашій іншій моделі класифікації. Тому ми можемо легко порівняти модель Наївного Байєса з іншими моделями.

Кроки для реалізації:

  • Етап попередньої обробки даних
  • Пристосування наивного Байєса до навчального набору
  • Прогнозування результату тесту
  • Перевірка точності результату (Створення матриці плутанини)
  • Візуалізація результату тестового набору.

1) Етап попередньої обробки даних:

На цьому кроці ми попередньо обробимо/підготуємо дані, щоб ми могли ефективно використовувати їх у нашому коді. Це схоже на те, що ми робили під час попередньої обробки даних. Код для цього наведено нижче:

символ до рядка java
 Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd # Importing the dataset dataset = pd.read_csv('user_data.csv') x = dataset.iloc[:, [2, 3]].values y = dataset.iloc[:, 4].values # Splitting the dataset into the Training set and Test set from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.25, random_state = 0) # Feature Scaling from sklearn.preprocessing import StandardScaler sc = StandardScaler() x_train = sc.fit_transform(x_train) x_test = sc.transform(x_test) 

У наведеному вище коді ми завантажили набір даних у нашу програму за допомогою ' набір даних = pd.read_csv('user_data.csv') . Завантажений набір даних розділено на навчальний і тестовий набір, а потім ми масштабуємо змінну функції.

Вихід для набору даних подається як:

Алгоритм наївного класифікатора Байєса 1

2) Пристосування наивного Байєса до навчального набору:

Після етапу попередньої обробки тепер ми підберемо модель Наївного Байєса до навчального набору. Нижче наведено його код:

 # Fitting Naive Bayes to the Training set from sklearn.naive_bayes import GaussianNB classifier = GaussianNB() classifier.fit(x_train, y_train) 

У наведеному вище коді ми використали Класифікатор GaussianNB щоб підігнати його до навчального набору даних. Ми також можемо використовувати інші класифікатори відповідно до наших вимог.

Вихід:

 Out[6]: GaussianNB(priors=None, var_smoothing=1e-09) 

3) Прогноз результату тестового набору:

Тепер спрогнозуємо результат тестового набору. Для цього ми створимо нову змінну предиктора y_pred і використовуватиме функцію прогнозування для прогнозування.

 # Predicting the Test set results y_pred = classifier.predict(x_test) 

Вихід:

Алгоритм наївного класифікатора Байєса 2

Наведений вище результат показує результат для вектора передбачення y_pred і дійсний вектор y_test. Ми бачимо, що деякі прогнози відрізняються від реальних значень, які є неправильними прогнозами.

4) Створення матриці плутанини:

Тепер ми перевіримо точність класифікатора Naive Bayes за допомогою матриці Confusion. Нижче наведено його код:

 # Making the Confusion Matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred) 

Вихід:

Алгоритм наївного класифікатора Байєса 3

Як ми бачимо у наведеній вище матриці плутанини, є 7+3=10 неправильних передбачень і 65+25=90 правильних передбачень.

5) Візуалізація результату тренувального набору:

Далі ми візуалізуємо результат навчального набору за допомогою простого класифікатора Байєса. Нижче наведено його код:

 # Visualising the Training set results from matplotlib.colors import ListedColormap x_set, y_set = x_train, y_train X1, X2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step = 0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(X1, X2, classifier.predict(nm.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('purple', 'green'))) mtp.xlim(X1.min(), X1.max()) mtp.ylim(X2.min(), X2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('purple', 'green'))(i), label = j) mtp.title('Naive Bayes (Training set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show() 

Вихід:

Алгоритм наївного класифікатора Байєса 4

У вихідних даних вище ми бачимо, що класифікатор Nave Bayes відокремив точки даних за допомогою тонкої межі. Це крива Гауса, яку ми використовували GaussianNB класифікатор у нашому коді.

6) Візуалізація результатів тестового набору:

 # Visualising the Test set results from matplotlib.colors import ListedColormap x_set, y_set = x_test, y_test X1, X2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step = 0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(X1, X2, classifier.predict(nm.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('purple', 'green'))) mtp.xlim(X1.min(), X1.max()) mtp.ylim(X2.min(), X2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('purple', 'green'))(i), label = j) mtp.title('Naive Bayes (test set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show() 

Вихід:

Алгоритм наївного класифікатора Байєса 5

Наведений вище вихід є остаточним виходом для даних тестового набору. Як ми бачимо, класифікатор створив гаусову криву для розділення змінних «придбаних» і «непридбаних». Є деякі неправильні прогнози, які ми обчислили в матриці плутанини. Але все одно це досить непоганий класифікатор.