- Алгоритъмът на Naive Bayes е алгоритъм за контролирано обучение, който се основава на Теорема на Бейс и се използва за решаване на проблеми с класификацията.
- Използва се основно в класификация на текста който включва многоизмерен набор от данни за обучение.
- Naive Bayes Classifier е един от простите и най-ефективни алгоритми за класификация, който помага при изграждането на модели за бързо машинно обучение, които могат да правят бързи прогнози.
- Някои популярни примери за наивен алгоритъм на Бейс са филтриране на спам, сантиментален анализ и класифициране на статии .
Защо се нарича Naive Bayes?
Алгоритъмът Naive Bayes се състои от две думи Naïve и Bayes, които могат да бъдат описани като:
Теорема на Бейс:
- Теоремата на Бейс е известна още като Правилото на Бейс или Закон на Бейс , който се използва за определяне на вероятността на хипотеза с предварително знание. Зависи от условната вероятност.
- Формулата за теоремата на Байс е дадена като:
Където,
P(A|B) е задна вероятност : Вероятност на хипотеза A за наблюдаваното събитие B.
P(B|A) е вероятността за вероятност : Вероятност на доказателството, като се има предвид, че вероятността на дадена хипотеза е вярна.
P(A) е предходна вероятност : Вероятност за хипотеза преди наблюдение на доказателствата.
P(B) е пределна вероятност : Вероятност на доказателствата.
Работа на наивния класификатор на Бейс:
Работата на класификатора на Naive Bayes може да бъде разбрана с помощта на примера по-долу:
Да предположим, че имаме набор от данни метеорологични условия и съответната целева променлива ' Играйте '. Така че, използвайки този набор от данни, трябва да решим дали да играем или не в определен ден според метеорологичните условия. Така че, за да разрешим този проблем, трябва да следваме следните стъпки:
- Преобразувайте дадения набор от данни в честотни таблици.
- Генерирайте таблица с вероятности, като намерите вероятностите за дадени характеристики.
- Сега използвайте теоремата на Байс, за да изчислите постериорната вероятност.
проблем : Ако времето е слънчево, тогава играчът трябва да играе или не?
Решение : За да разрешите това, първо разгледайте набора от данни по-долу:
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 е нетърпелив за обучение.
- Използва се в класификация на текст като Филтриране на спам и Анализ на настроението .
Видове наивен модел на Бейс:
Съществуват три вида модел на наивен Бейс, които са дадени по-долу:
Класификаторът използва честотата на думите за предиктори.
Внедряване на 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') . Зареденият набор от данни е разделен на тренировъчен и тестов набор и след това сме мащабирали променливата на функцията.
Резултатът за набора от данни е даден като:
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)
Изход:
Горният резултат показва резултата за прогнозен вектор y_pred и реален вектор y_test. Можем да видим, че някои прогнози се различават от реалните стойности, което е неправилното прогнозиране.
4) Създаване на матрица на объркването:
Сега ще проверим точността на класификатора на Naive Bayes с помощта на матрицата на объркване. По-долу е кодът за него:
# Making the Confusion Matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred)
Изход:
Както можем да видим в горния изход на матрицата на объркването, има 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()
Изход:
В горния изход можем да видим, че 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()
Изход:
Горният изход е окончателен изход за данни от набор от тестове. Както виждаме, класификаторът е създал крива на Гаус, за да раздели променливите „закупени“ и „незакупени“. Има някои грешни прогнози, които сме изчислили в матрицата на объркването. Но все пак е доста добър класификатор.