- Наївний алгоритм Байєса — це алгоритм навчання під наглядом, який базується на Теорема Байєса і використовується для вирішення проблем класифікації.
- В основному використовується в класифікація тексту який включає багатовимірний набір навчальних даних.
- Наївний класифікатор Байєса — це один із простих і найефективніших алгоритмів класифікації, який допомагає створювати швидкі моделі машинного навчання, які можуть робити швидкі прогнози.
- Деякі популярні приклади наївного алгоритму Байєса фільтрація спаму, сентиментальний аналіз і класифікація статей .
Чому це називається Наївний Байєс?
Алгоритм Naive Bayes складається з двох слів Naive та Bayes, які можна описати так:
Теорема Байєса:
- Теорема Байєса також відома як Правило Байєса або закон Байєса , який використовується для визначення ймовірності гіпотези з попередніми знаннями. Це залежить від умовної ймовірності.
- Формула теореми Байєса має вигляд:
Де,
P(A|B) – апостеріорна ймовірність : Ймовірність гіпотези А про спостережувану подію Б.
P(B|A) — ймовірність правдоподібності : ймовірність доказів, враховуючи, що ймовірність гіпотези істинна.
P(A) є попередньою ймовірністю : Ймовірність гіпотези перед спостереженням доказів.
P(B) — гранична ймовірність : ймовірність доказів.
Робота наївного класифікатора Байєса:
Роботу наївного класифікатора Байєса можна зрозуміти за допомогою наведеного нижче прикладу:
Припустимо, у нас є набір даних метеорологічні умови і відповідна цільова змінна ' грати '. Отже, використовуючи цей набір даних, нам потрібно вирішити, чи грати нам у певний день відповідно до погодних умов. Отже, щоб вирішити цю проблему, нам потрібно виконати наступні кроки:
- Перетворіть заданий набір даних у частотні таблиці.
- Створіть таблицю правдоподібності, знайшовши ймовірності заданих ознак.
- Тепер скористайтеся теоремою Байєса, щоб обчислити апостеріорну ймовірність.
проблема : Якщо погода сонячна, гравець має грати чи ні?
Рішення : Щоб вирішити цю проблему, спочатку розгляньте наведений нижче набір даних:
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') . Завантажений набір даних розділено на навчальний і тестовий набір, а потім ми масштабуємо змінну функції.
Вихід для набору даних подається як:
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)
Вихід:
Наведений вище результат показує результат для вектора передбачення 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)
Вихід:
Як ми бачимо у наведеній вище матриці плутанини, є 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()
Вихід:
У вихідних даних вище ми бачимо, що класифікатор 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()
Вихід:
Наведений вище вихід є остаточним виходом для даних тестового набору. Як ми бачимо, класифікатор створив гаусову криву для розділення змінних «придбаних» і «непридбаних». Є деякі неправильні прогнози, які ми обчислили в матриці плутанини. Але все одно це досить непоганий класифікатор.