- Наивни Бајес алгоритам је надзирани алгоритам учења, који се заснива на Бајесова теорема и користи се за решавање класификационих задатака.
- Углавном се користи у класификација текста који укључује скуп података за обуку високе димензије.
- Наивни Бајесов класификатор је један од једноставних и најефикаснијих класификационих алгоритама који помаже у изградњи брзих модела машинског учења који могу брзо да предвиђају.
- Неки популарни примери наивног Бајесовог алгоритма су филтрирање нежељене поште, сентименталну анализу и класификацију чланака .
Зашто се зове Наивни Бајес?
Наивни Бајес алгоритам се састоји од две речи Наиван и Бајес, које се могу описати као:
штампа са јава
Бајесова теорема:
- Бајесова теорема је такође позната као Бајесово правило или Бајесов закон , који се користи за одређивање вероватноће хипотезе уз претходно знање. Зависи од условне вероватноће.
- Формула за Бајесову теорему је дата као:
Где,
П(А|Б) је Постериорна вероватноћа : Вероватноћа хипотезе А о посматраном догађају Б.
П(Б|А) је вероватноћа вероватноће : Вероватноћа доказа с обзиром да је вероватноћа хипотезе тачна.
П(А) је претходна вероватноћа : Вероватноћа хипотезе пре посматрања доказа.
П(Б) је гранична вероватноћа : Вероватноћа доказа.
Рад наивног Бајесовог класификатора:
Рад наивног Бајесовог класификатора може се разумети уз помоћ следећег примера:
Претпоставимо да имамо скуп података од временски услови и одговарајућу циљну променљиву ' Игра '. Дакле, користећи овај скуп података, морамо да одлучимо да ли треба да играмо или не одређеног дана у складу са временским условима. Дакле, да бисмо решили овај проблем, морамо да следимо следеће кораке:
- Конвертујте дати скуп података у табеле учесталости.
- Генеришите табелу вероватноће тако што ћете пронаћи вероватноће датих карактеристика.
- Сада користите Бајесову теорему да израчунате постериорну вероватноћу.
Проблем : Ако је време сунчано, онда играч треба да игра или не?
Решење : Да бисте ово решили, прво размотрите доњи скуп података:
Изгледи | Игра | |
---|---|---|
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 |
Примена Бајесове теореме:
П(Да|Сунчано)= П(Сунчано|Да)*П(Да)/П(Сунчано)
П(Сунчано|Да)= 3/10= 0,3
П(Сунчано)= 0,35
П(Да)=0,71
стринг.субстринг јава
Дакле, П(Да|Сунчано) = 0,3*0,71/0,35= 0,60
П(Не|Сунчано)= П(Сунчано|Не)*П(Не)/П(Сунчано)
П(Сунчано|НЕ)= 2/4=0,5
П(Не)= 0,29
П(Сунчано)= 0,35
Дакле, П(Не|Сунчано)= 0,5*0,29/0,35 = 0.41
Дакле, као што видимо из горњег прорачуна да П(Да|Сунчано)>П(Не|Сунчано)
Дакле, по сунчаном дану, играч може да игра игру.
листе латекса
Предности наивног Бајесовог класификатора:
- Наивни Бајес је један од брзих и лаких МЛ алгоритама за предвиђање класе скупова података.
- Може се користити за бинарне и вишекласне класификације.
- Добро ради у предвиђањима више класа у поређењу са другим алгоритмима.
- То је најпопуларнији избор за проблеми класификације текста .
Недостаци наивног Бајесовог класификатора:
- Наивни Бајес претпоставља да су све карактеристике независне или неповезане, тако да не може научити однос између карактеристика.
Примене наивног Бајесовог класификатора:
- Користи се за Цредит Сцоринг .
- Користи се у класификација медицинских података .
- Може се користити у предвиђања у реалном времену јер наивни Бајесов класификатор жељно учи.
- Користи се у класификацији текста као нпр Филтрирање нежељене поште и Анализа сентимента .
Врсте наивног Бајесовог модела:
Постоје три типа наивног Бајесовог модела, који су дати у наставку:
Класификатор користи учесталост речи за предикторе.
Питхон имплементација наивног Бајесовог алгоритма:
Сада ћемо имплементирати наивни Бајес алгоритам користећи Питхон. Дакле, за ово ћемо користити ' кориснички подаци ' скуп података , који смо користили у нашем другом моделу класификације. Стога можемо лако упоредити Наиве Баиес модел са осталим моделима.
Кораци за имплементацију:
- Корак претходне обраде података
- Уградња Наиве Баиеса у сет за обуку
- Предвиђање резултата теста
- Тестирајте тачност резултата (матрица стварања конфузије)
- Визуелизација резултата тестног скупа.
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)
У горњем коду, учитали смо скуп података у наш програм користећи ' скуп података = пд.реад_цсв('усер_дата.цсв') . Учитани скуп података је подељен на скуп за обуку и тест, а затим смо скалирали променљиву карактеристике.
Излаз за скуп података је дат као:
2) Уградња Наиве Баиеса у сет за обуку:
Након корака претходне обраде, сада ћемо наивни Бајесов модел уклопити у сет за обуку. Испод је код за то:
# Fitting Naive Bayes to the Training set from sklearn.naive_bayes import GaussianNB classifier = GaussianNB() classifier.fit(x_train, y_train)
У горњем коду смо користили ГауссианНБ класификатор да га прилагоди скупу података за обуку. Такође можемо користити друге класификаторе према нашим захтевима.
Излаз:
Out[6]: GaussianNB(priors=None, var_smoothing=1e-09)
3) Предвиђање резултата тестног скупа:
Сада ћемо предвидети резултат тестног скупа. За ово ћемо креирати нову променљиву предиктора и_пред , и користиће функцију предвиђања за предвиђање.
# Predicting the Test set results y_pred = classifier.predict(x_test)
Излаз:
Горњи излаз показује резултат за вектор предвиђања и_пред и реални вектор и_тест. Видимо да се нека предвиђања разликују од стварних вредности, а то су нетачна предвиђања.
4) Креирање матрице конфузије:
Сада ћемо проверити тачност наивног Бајесовог класификатора помоћу матрице конфузије. Испод је код за то:
# 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()
Излаз:
У горњем излазу можемо видети да је Наве Бајесов класификатор одвојио тачке података фином границом. То је Гаусова крива као што смо користили ГауссианНБ класификатор у нашем коду.
цамелцасе питхон
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()
Излаз:
Горњи излаз је коначни излаз за податке скупа тестова. Као што видимо, класификатор је креирао Гаусову криву да подели 'купљено' и 'некупљено' променљиве. Постоје нека погрешна предвиђања која смо израчунали у матрици конфузије. Али ипак је прилично добар класификатор.