logo

Алгоритъм на наивен класификатор на Бейс

  • Алгоритъмът на Naive Bayes е алгоритъм за контролирано обучение, който се основава на Теорема на Бейс и се използва за решаване на проблеми с класификацията.
  • Използва се основно в класификация на текста който включва многоизмерен набор от данни за обучение.
  • Naive Bayes Classifier е един от простите и най-ефективни алгоритми за класификация, който помага при изграждането на модели за бързо машинно обучение, които могат да правят бързи прогнози.
  • Това е вероятностен класификатор, което означава, че прогнозира въз основа на вероятността за обект.
  • Някои популярни примери за наивен алгоритъм на Бейс са филтриране на спам, сантиментален анализ и класифициране на статии .

Защо се нарича Naive Bayes?

Алгоритъмът Naive Bayes се състои от две думи Naïve и Bayes, които могат да бъдат описани като:

    наивен: Нарича се наивен, защото предполага, че появата на определена характеристика е независима от появата на други характеристики. Например, ако плодът се идентифицира въз основа на цвят, форма и вкус, тогава червеният, сферичен и сладък плод се разпознава като ябълка. Следователно всяка характеристика поотделно допринася за идентифицирането, че е ябълка, без да зависи една от друга.Бейс: Нарича се Bayes, защото зависи от принципа на теоремата на Bayes.

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

  • Теоремата на Бейс е известна още като Правилото на Бейс или Закон на Бейс , който се използва за определяне на вероятността на хипотеза с предварително знание. Зависи от условната вероятност.
  • Формулата за теоремата на Байс е дадена като:
Алгоритъм на наивен класификатор на Бейс

Където,

P(A|B) е задна вероятност : Вероятност на хипотеза A за наблюдаваното събитие B.

P(B|A) е вероятността за вероятност : Вероятност на доказателството, като се има предвид, че вероятността на дадена хипотеза е вярна.

P(A) е предходна вероятност : Вероятност за хипотеза преди наблюдение на доказателствата.

P(B) е пределна вероятност : Вероятност на доказателствата.

Работа на наивния класификатор на Бейс:

Работата на класификатора на Naive Bayes може да бъде разбрана с помощта на примера по-долу:

Да предположим, че имаме набор от данни метеорологични условия и съответната целева променлива ' Играйте '. Така че, използвайки този набор от данни, трябва да решим дали да играем или не в определен ден според метеорологичните условия. Така че, за да разрешим този проблем, трябва да следваме следните стъпки:

  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

Времето в таблицата на вероятностите:

java със суинг
Метеорологично време Не да
Облачно 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(No|Sunny)= 0,5*0,29/0,35 = 0,41

Както можем да видим от горното изчисление, че P(Да|Слънчево)>P(Не|Слънчево)

Следователно в слънчев ден играчът може да играе играта.

Предимства на Naive Bayes Classifier:

  • Naïve Bayes е един от бързите и лесни ML алгоритми за прогнозиране на клас набори от данни.
  • Може да се използва както за двоични, така и за многокласови класификации.
  • Той се представя добре при многокласови прогнози в сравнение с другите алгоритми.
  • Това е най-популярният избор за проблеми с класификацията на текста .

Недостатъци на Naive Bayes Classifier:

  • Naive Bayes приема, че всички функции са независими или несвързани, така че не може да научи връзката между характеристиките.

Приложения на Naive Bayes Classifier:

  • Използва се за Кредитен скоринг .
  • Използва се в класификация на медицински данни .
  • Може да се използва в прогнози в реално време тъй като Naive Bayes Classifier е нетърпелив за обучение.
  • Използва се в класификация на текст като Филтриране на спам и Анализ на настроението .

Видове наивен модел на Бейс:

Съществуват три вида модел на наивен Бейс, които са дадени по-долу:

    Гаус: Моделът на Гаус предполага, че характеристиките следват нормално разпределение. Това означава, че ако предикторите приемат непрекъснати стойности вместо дискретни, тогава моделът приема, че тези стойности са взети от разпределението на Гаус.Мултином: Класификаторът Multinomial Naive Bayes се използва, когато данните са многочленно разпределени. Използва се основно за проблеми с класификацията на документи, означава, че определен документ принадлежи към коя категория като спорт, политика, образование и др.
    Класификаторът използва честотата на думите за предиктори.Бернули: Класификаторът на Бернули работи подобно на многочленния класификатор, но предикторните променливи са независими булеви променливи. Например дали определена дума присъства или не в документ. Този модел е известен и със задачи за класификация на документи.

Внедряване на Python на алгоритъма Naive Bayes:

Сега ще приложим наивен алгоритъм на Bayes, използвайки Python. Така че за това ще използваме „ потребителски данни ' набор от данни , който сме използвали в нашия друг класификационен модел. Следователно можем лесно да сравним модела на Naive Bayes с другите модели.

Стъпки за прилагане:

  • Стъпка на предварителна обработка на данни
  • Монтиране на Naive Bayes към комплекта за обучение
  • Прогнозиране на резултата от теста
  • Тествайте точността на резултата (Създаване на матрица за объркване)
  • Визуализиране на резултата от тестовия набор.

1) Стъпка на предварителна обработка на данни:

В тази стъпка ще обработим предварително/подготвим данните, за да можем да ги използваме ефективно в нашия код. Подобно е на това, което направихме при предварителната обработка на данни. Кодът за това е даден по-долу:

 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) Поставяне на Naive Bayes към комплекта за обучение:

След стъпката на предварителната обработка сега ще напаснем модела на Naive Bayes към набора за обучение. По-долу е кодът за него:

 # 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 с помощта на матрицата на объркване. По-долу е кодът за него:

 # 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) Визуализиране на резултата от тренировъчния набор:

След това ще визуализираме резултата от обучителния набор с помощта на Na�ve Bayes Classifier. По-долу е кодът за него:

 # 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

В горния изход можем да видим, че Na�ve 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

Горният изход е окончателен изход за данни от набор от тестове. Както виждаме, класификаторът е създал крива на Гаус, за да раздели променливите „закупени“ и „незакупени“. Има някои грешни прогнози, които сме изчислили в матрицата на объркването. Но все пак е доста добър класификатор.