Naiwny klasyfikator Bayesa (kodowany w Pythonie) – nauka w sześciu prostych krokach

Metodolog - statystyczna analiza data minig

Metodolog.pl – Analiza Statystyczna w nauce

Firma statystyczna METODOLOG

 

Naiwny klasyfikator Bayesa (kodowany w Pythonie) – nauka w sześciu prostych krokach

 Wprowadzenie 

Znalazłeś się w takiej sytuacji:

Pracujesz nad klasyfikacją problemu i masz wygenerowany swój zestaw hipotez, stworzonych cech i przedyskutowane znaczenie zmiennych. W ciągu godziny interesariusze chcą zobaczyć pierwsze wycinki modelu.

Co robisz? Masz setki tysięcy punktów danych i kilka ładnych zmiennych w swoim treningowym zestawie danych. W takiej sytuacji, gdybym był na twoim miejscu, użyłbym ‘Naiwnego Bayesa’, który może się okazać zadziwiająco szybki w zestawieniu z innymi klasyfikacjami algorytmicznymi. Opiera się on na teorii Bayesa o prawdopodobieństwie przewidywania kategorii w nieznanym zestawie danych.

W tym artykule będę wyjaśniał podstawy tego algorytmu, więc kiedy następnym razem natrafisz na ogromny zestaw danych, możesz wykorzystać ten algorytm. Dodatkowo, jeśli jesteś żółtodziobem w Pythonie, powinieneś zostać przytłoczony obecnością dostępnych kodów w tym artykule.

Co to jest Naiwny klasyfikator Bayesa? 

Jest to technika klasyfikacji oparta na teorii Bayesa z oszacowaniem niezależności pomiędzy wskaźnikami. Mówiąc prościej, Naiwny klasyfikator Bayesa zakłada, że obecność każdej poszczególnej cechy w kategorii jest niezwiązana z obecnością żadnej innej cechy. Np., owoc może być uznany za jabłko jeśli jest czerwony, okrągły i ma około 3 cale średnicy. Nawet jeśli te cechy zależą od siebie nawzajem albo od istnienia innych cech, wszystkie one niezależnie zwiększają prawdopodobieństwo, że ten owoc to jabłko i to właśnie dlatego w nazwie występuje słowo „naiwny”.

Naiwny model Bayesa jest łatwy do zbudowania i szczególnie przydatny dla gigantycznych zestawów danych. Naiwny Bayes, pomimo swojej prostoty, jest znany z przewyższania nawet bardzo wyrafinowanych metod klasyfikacji.

Teoria Bayesa dostarcza sposobu na liczenie tylnego prawdopodobieństwa P(c|x) z P(c), P(x) i P(x|c). Spójrz na poniższe równanie:

Teoria Bayesa dostarcza sposobu na liczenie tylnego prawdopodobieństwa

Powyżej

  • P(c|x) jest tylnym prawdopodobieństwem kategorii (c, obiekt) danego jej wskaźnika (x, atrybuty).
  • P(c) jest przednim prawdopodobieństwem kategorii.
  • P(x|c) jest prawdopodobieństwem jakie jest prawdopodobieństwo wskaźnika danej kategorii.
  • P(x) jest przednim prawdopodobieństwem wskaźnika.

Jak działa Naiwny klasyfikator Bayesa? 

Wytłumaczmy to sobie z użyciem przykładu. Poniżej mam treningowy zestaw danych pogodowych i odpowiadającą mu zmienną docelową „Graj” (sugerującą możliwości rozgrywki). Teraz musimy stwierdzić czy gracze będą grać czy nie na podstawie warunków pogodowych.

Krok 1: Zmienić zestaw danych w tabelę częstotliwości

Krok 2: Stworzyć tabelę prawdopodobieństwa poprzez znalezienie prawdopodobieństw takich jak prawdopodobieństwo zachmurzenia = 0.29 i prawdopodobieństwo zagrania = 0.64.

Naiwny klasyfikator Bayesa

Krok 3: Teraz, użyj Naiwnego równania Bayesa by wyliczyć tylne prawdopodobieństwo dla każdej kategorii. Kategoria z największym tylnym prawdopodobieństwem jest przewidywanym wynikiem.

Problem: Gracze zagrają jeśli będzie słonecznie. Czy to twierdzenie jest prawidłowe?

Możemy rozwiązać ten problem używając omówionej powyżej metody tylnego prawdopodobieństwa.

P(Yes | Sunny) = P( Sunny | Yes) * P(Yes) / P (Sunny)

Teraz mamy P (Sunny |Yes) = 3/9 = 0.33, P(Sunny) = 5/14 = 0.36, P( Yes)= 9/14 = 0.64

Teraz, P (Yes | Sunny) = 0.33 * 0.64 / 0.36 = 0.60 co jest wyższym prawdopodobieństwem.

Naiwny Bayes używa podobnej metody by przewidzieć prawdopodobieństwo różnych kategorii opartych na rozmaitych cechach. Ten algorytm jest głównie używany w klasyfikacji tekstów i w razie problemów z mnogością kategorii.

Plusy i minusy Naiwnego Bayesa: 

Plusy:

  • Można łatwo i szybko przewidzieć kategorie testów w zestawie danych. Również dobrze się sprawdza w przewidywaniu wielu kategorii.
  • Mając na uwadze założenie o niezależności, Naiwny klasyfikator Bayesa wypada lepiej w porównaniu z innymi modelami, takimi jak regresja logistyczna i wymaga mniej danych treningowych.
  • Dobrze wypada w przypadku kategorialnego wkładu zmiennych porównanych do zmiennych liczbowych. Dla zmiennej liczbowej, założona jest rozkład normalny, co jest silnym założeniem.

Minusy: 

  • Jeżeli zmienna kategorialna ma kategorię (w testowanym zestawie danych), która nie została zaobserwowana w treningowym zestawie danych, wtedy model ustali zerowe prawdopodobieństwo i nie będzie w stanie niczego przewidzieć. Taką sytuację nazywa się często „Zerową Frekwencją”. By to rozwiązać, możemy użyć techniki wygładzającej. Jedną z najprostszych technik wygładzających jest tzw. oszacowanie Laplace’a.
  • Z drugiej strony Naiwny Bayes jest także znany jako kiepski oszacowywacz, więc nie zawsze należy na jego podstawie wnioskować ze śmiertelną powagą.
  • Innym ograniczeniem Naiwnego Bayesa jest założenie o niezależności wskaźników. W prawdziwym życiu, w zasadzie niemożliwym jest uzyskanie zestawu wskaźników kompletnie od siebie niezależnych.

4 aplikacje Naiwnego klasyfikatora Bayesa 

  • Przewidywanie w czasie rzeczywistym: Naiwny Bayes jest skorym do nauki klasyfikatorem i z pewnością szybkim. Z tego powodu, może zostać wykorzystany do przewidywania w czasie rzeczywistym.
  • Przewidywanie wielu kategorii: Ten algorytm jest również dobrze znany z cechy jaką jest przewidywanie wielu kategorii. Tutaj możemy przewidzieć prawdopodobieństwo wielu kategorii zmiennej docelowej.
  • Klasyfikacja tekstu/filtrowanie spamu/analiza opinii: Naiwny Bayes klasyfikuje głównie użyte w tekście klasyfikacje (z uwagi na lepsze wyniki w problemach z wieloma kategoriami i zasadą niezależności), ma większe wskaźniki sukcesu w porównaniu z innymi algorytmami. W wyniku tego, ma szerokie zastosowanie w filtrowaniu spamu (rozpoznawanie maili ze spamem) i w analizie opinii (w analizach statystycznych dla mediów społecznościowych, by zidentyfikować pozytywne i negatywne odczucia konsumentów).
  • System rekomendacyjny: Naiwny klasyfikator Bayesa razem z ‘Collaborative Filtering’ tworzą system rekomendacyjny, który używa uczenia się maszyn i technik eksploracji danych by filtrować niewidziane wcześniej informacje i przewidzieć czy użytkownik chciałby mieć podane źródło czy nie.

Jak zbudować podstawowy model wykorzystując Naiwnego Bayesa w Pythonie? 

Scikit learn (biblioteka Pythona) pomoże w zbudowaniu Naiwnego modelu Bayesa w Pythonie. Są trzy typy modeli Naiwnego Bayesa w pakiecie scikit learn:

  • Gaussa: jest wykorzystywany w klasyfikacji i zakłada, że cechy wynikają z rozkładu normalnego.
  • Wielomianowy: używa się go do odrębnych wyliczeń. Na przykład, powiedzmy że mamy problem z klasyfikacją tekstu. Tutaj możemy rozważyć próby Bernoullego, które są jeden krok dalej i zamiast „słowo występujące w tekście”, mamy „policz jak często słowo występuje w tekście”, możesz pomyśleć o tym jak o „ilość razy gdy liczba wyników x_i jest zaobserwowana przez n prób”.
  • Bernoullego: dwumianowy model przydaje się jeśli twoje cechy wektorów są binarne (np. zera i jedynki). Jedna aplikacja będzie klasyfikacją tekstu z modelem „torbą słów” gdzie jedynki i zera są „słowami występującymi w tekście” i odpowiednio „słowami niewystępującymi w tekście”.

Opierając się na swoim zestawie danych, możesz wybrać którykolwiek z powyżej omówionych modeli. Poniżej jest przykład modelu Gaussa (ang.).

Kodowanie w Pythonie 

#Import Library of Gaussian Naive Bayes model

from sklearn.naive_bayes import GaussianNB

import numpy as np

#assigning predictor and target variables

x= np.array([[-3,7],[1,5], [1,2], [-2,0], [2,3], [-4,0], [-1,1], [1,1], [-2,2], [2,7], [-4,1], [-2,7]])

Y = np.array([3, 3, 3, 3, 4, 3, 3, 4, 3, 4, 4, 4])

#Create a Gaussian Classifier

model = GaussianNB()

# Train the model using the training sets

model.fit(x, y)

#Predict Output

predicted= model.predict([[1,2],[3,4]])

print predicted

Output: ([3,4])

Powyżej widzieliśmy podstawowy model Naiwnego Bayesa. Możesz poprawić moc tego modelu przez ustawienie parametrów i inteligentne obchodzenie się z założeniami. Spójrzmy na metody służące usprawnieniu wydajności modelu Naiwnego Bayesa.

Wskazówki jak zwiększyć moc Naiwnego modelu Bayesa 

Poniżej kilka wskazówek jak poprawić moc Naiwnego modelu Bayesa:

  • Jeżeli ciągłe cechy nie mają rozkładu normalnego, powinniśmy użyć transformacji albo innej metody by przekonwertować je w rozkład normalny.
  • Jeżeli testowy zestaw danych ma problem zerowej frekwencji, zastosuj technikę wygładzającą „Korektę Laplace’a” by przewidzieć kategorię testowego zestawu danych.
  • Usuń skorelowane cechy, ponieważ wysoko skorelowane cechy są liczone podwójnie w modelu i mogą prowadzić do nadmuchiwania oszacowań modelu.
  • Klasyfikatory Naiwnego Bayesa mają ograniczone możliwości dla strojenia parametrów takich jak alfa=1 dla wygładzania, fit_prior=[true|false] do uczenia się albo nie kategorii wcześniejszych prawdopodobieństw i kilku innych opcji. Radziłbym skupić się na wstępnym przetwarzaniu danych i na selekcji cech.
  • Możesz pomyśleć o zastosowaniu klasyfikacyjnej kombinacyjnej techniki jak enembling, pakowanie i przyspieszanie ale te metody nie pomogą. Właściwie ensembling, bagging i boosting nie pomoże dlatego iż ich celem jest redukcja zmienności. Naiwny Bayes nie ma zmienności do zmniejszania.

Uwagi końcowe 

W tym tekście przyjrzeliśmy się algorytmowi „Naiwnego Bayesa”, którego używa się głównie do klasyfikacji. Gratuluję jeśli przebrnąłeś przez ten artykuł i jeszcze coś z niego zrozumiałeś. Oznacza to, że wykonałeś pierwszy krok do osiągnięcia mistrzostwa w tym algorytmie. Od teraz wszystko czego potrzebujesz, to praktyka.

Następnie sugerowałbym większe skupienie się na wstępnym przetwarzaniu danych i selekcji cech do zaaplikowania Naiwnemu klasyfikatorowi Bayesa. W przyszłości omówię klasyfikację tekstów i dokumentów z użyciem Naiwnego Bayesa bardziej szczegółowo.