En naiv Bayes-klassificerare, en familj av algoritmer baserade på Bayes' teorem. Trots det naiva antagandet om funktionsoberoende, används dessa klassificerare i stor utsträckning för sin enkelhet och effektivitet i maskininlärning. Artikeln fördjupar sig i teori, implementering och tillämpningar och belyser deras praktiska användbarhet trots alltför förenklade antaganden.
Vad är Naiva Bayes Classifiers?
Naiva Bayes-klassificerare är en samling klassificeringsalgoritmer baserade på Bayes sats. Det är inte en enda algoritm utan en familj av algoritmer där alla delar en gemensam princip, det vill säga varje par av funktioner som klassificeras är oberoende av varandra. Till att börja med, låt oss överväga ett dataset.
En av de mest enkla och effektiva klassificeringsalgoritmerna, Naiv Bayes-klassificeraren hjälper till med den snabba utvecklingen av maskininlärningsmodeller med snabba förutsägelsemöjligheter.
Naiv Bayes-algoritm används för klassificeringsproblem. Det används mycket i textklassificering. I textklassificeringsuppgifter innehåller data hög dimension (eftersom varje ord representerar en egenskap i datan). Den används för skräppostfiltrering, sentimentdetektering, klassificering etc. Fördelen med att använda naiva Bayes är dess snabbhet. Det är snabbt och att göra förutsägelser är lätt med hög datadimension.
Denna modell förutsäger sannolikheten för att en instans tillhör en klass med en given uppsättning funktionsvärden. Det är en probabilistisk klassificerare. Det beror på att den antar att en egenskap i modellen är oberoende av existensen av en annan egenskap. Med andra ord, varje funktion bidrar till förutsägelserna utan någon relation mellan varandra. I den verkliga världen är detta tillstånd sällan tillfredsställande. Den använder Bayes teorem i algoritmen för träning och förutsägelse
Varför heter det Naive Bayes?
Den naiva delen av namnet indikerar det förenklade antagandet som gjorts av den naiva Bayes-klassificeraren. Klassificeraren antar att funktionerna som används för att beskriva en observation är villkorligt oberoende, givet klassetiketten. Bayes-delen av namnet syftar på pastor Thomas Bayes, en 1700-talsstatistiker och teolog som formulerade Bayes teorem.
Tänk på en fiktiv datauppsättning som beskriver väderförhållandena för att spela golf. Med tanke på väderförhållandena klassificerar varje tuppel förhållandena som lämpliga (Ja) eller olämpliga (Nej) för att spela golf. Här är en representation i tabellform av vår datauppsättning.
Syn | Temperatur | Fuktighet | Blåsigt | Spela golf | |
---|---|---|---|---|---|
0 | Regnig | Varm | Hög | Falsk | Nej |
1 | Regnig | Varm | Hög | Sann | Nej |
2 | Mulen | Varm | Hög | Falsk | Ja |
3 | Solig | Mild | Hög | Falsk | Ja |
4 | Solig | Häftigt | Vanligt | Falsk | Ja |
5 | Solig | Häftigt | Vanligt | Sann | Nej |
6 | Mulen | Häftigt | Vanligt | Sann | Ja |
7 | Regnig | Mild | Hög | Falsk | Nej |
8 | Regnig | Häftigt | Vanligt | Falsk | Ja |
9 | Solig | Mild | Vanligt | Falsk | Ja |
10 | Regnig | Mild | Vanligt | Sann | Ja |
elva | Mulen | Mild | Hög | Sann | Ja |
12 | Mulen | Varm | Vanligt | Falsk | Ja |
13 | Solig | Mild | Hög | Sann | Nej |
Datauppsättningen är uppdelad i två delar, nämligen funktionsmatris och den svarsvektor .
- Funktionsmatris innehåller alla vektorer(rader) av dataset där varje vektor består av värdet av beroende funktioner . I ovanstående datauppsättning är funktionerna 'Outlook', 'Temperatur', 'Fuktighet' och 'Bindigt'.
- Svarsvektor innehåller värdet av klassvariabel (förutsägelse eller utdata) för varje rad med funktionsmatris. I ovanstående datauppsättning är klassvariabelns namn 'Spela golf'.
Antagande av Naive Bayes
Det grundläggande naiva Bayes antagande är att varje funktion gör en:
- Funktionsoberoende: Funktionerna i datan är villkorligt oberoende av varandra, givet klassetiketten.
- Kontinuerliga funktioner är normalt fördelade: Om en funktion är kontinuerlig antas den vara normalfördelad inom varje klass.
- Diskreta funktioner har multinomialfördelningar: Om en funktion är diskret, antas den ha en multinomial fördelning inom varje klass.
- Funktioner är lika viktiga: Alla funktioner antas bidra lika mycket till förutsägelsen av klassetiketten.
- Inga saknade data: Data bör inte innehålla några saknade värden.
Med relation till vår datauppsättning kan detta koncept förstås som:
- Vi antar att inget par funktioner är beroende. Till exempel har temperaturen 'het' ingenting att göra med luftfuktigheten eller att utsikten är 'regnig' har ingen effekt på vindarna. Därför antas funktionerna vara oberoende .
- För det andra ges varje funktion samma vikt (eller betydelse). Om du till exempel bara känner till temperatur och luftfuktighet kan det inte förutsäga resultatet exakt. Inget av attributen är irrelevant och antas vara bidragande lika till resultatet.
De antaganden som Naive Bayes gör är generellt sett inte korrekta i verkliga situationer. I själva verket är antagandet om oberoende aldrig korrekt men fungerar ofta bra i praktiken. Nu, innan du går vidare till formeln för Naiva Bayes, är det viktigt att känna till Bayes teorem.
Bayes sats
Bayes teorem finner sannolikheten för att en händelse inträffar givet sannolikheten för en annan händelse som redan har inträffat. Bayes teorem anges matematiskt som följande ekvation:
där A och B är händelser och P(B) ≠ 0
- I grund och botten försöker vi hitta sannolikheten för händelse A, givet att händelse B är sann. Händelse B benämns också som bevis .
- P(A) är priori av A (den tidigare sannolikheten, d.v.s. sannolikheten för händelse innan bevis ses). Beviset är ett attributvärde för en okänd instans (här är det händelse B).
- P(B) är Marginal Probability: Probability of Evidence.
- P(A|B) är a posteriori sannolikhet för B, det vill säga sannolikheten för händelse efter att bevis har setts.
- P(B|A) är sannolikhet sannolikhet, dvs sannolikheten att en hypotes kommer att besannas baserat på bevisen.
Nu, när det gäller vår datauppsättning, kan vi tillämpa Bayes sats på följande sätt:
där y är klassvariabel och X är en beroende egenskapsvektor (av storlek n ) var:
Bara för att rensa, ett exempel på en funktionsvektor och motsvarande klassvariabel kan vara: (se första raden av dataset)
X = (Rainy, Hot, High, False)>
y = No>
Så i princip,
Med relation till vår datauppsättning kan detta koncept förstås som:
- Vi antar att inget par funktioner är beroende. Till exempel har temperaturen 'het' ingenting att göra med luftfuktigheten eller att utsikten är 'regnig' har ingen effekt på vindarna. Därför antas funktionerna vara oberoende .
- För det andra ges varje funktion samma vikt (eller betydelse). Om du till exempel bara känner till temperatur och luftfuktighet kan det inte förutsäga resultatet exakt. Inget av attributen är irrelevant och antas vara bidragande lika till resultatet.
Nu är det dags att sätta ett naivt antagande till Bayes teorem, vilket är, oberoende bland funktionerna. Så nu skiljer vi oss bevis in i de oberoende delarna.
Nu, om två händelser A och B är oberoende, då,
P(A,B) = P(A)P(B)>
Så vi når resultatet:
som kan uttryckas som:
Nu, eftersom nämnaren förblir konstant för en given ingång, kan vi ta bort den termen:
Nu måste vi skapa en klassificeringsmodell. För detta hittar vi sannolikheten för en given uppsättning indata för alla möjliga värden för klassvariabeln och och plocka upp resultatet med maximal sannolikhet. Detta kan uttryckas matematiskt som:
Så, äntligen, har vi uppgiften att beräkna
Vänligen notera att
De olika naiva Bayes-klassificerarna skiljer sig främst genom de antaganden de gör om fördelningen av
c++ strängdelning
Låt oss försöka tillämpa ovanstående formel manuellt på vår väderdatauppsättning. För detta måste vi göra några förberäkningar på vår datauppsättning.
Vi måste hitta
Så i figuren ovan har vi beräknat
Vi måste också hitta klasssannolikheter
Så nu är vi klara med våra förberäkningar och klassificeraren är klar!
Låt oss testa det på en ny uppsättning funktioner (låt oss kalla det idag):
today = (Sunny, Hot, Normal, False)>
och sannolikheten att inte spela golf ges av:
Eftersom P(idag) är vanligt i båda sannolikheterna, kan vi ignorera P(idag) och hitta proportionella sannolikheter som:
och
Nu, sedan
Dessa tal kan omvandlas till en sannolikhet genom att göra summan lika med 1 (normalisering):
och
Eftersom
Så förutsägelsen att golf skulle spelas är 'Ja'.
Metoden som vi diskuterade ovan är tillämplig för diskreta data. Vid kontinuerliga data måste vi göra några antaganden om fördelningen av värden för varje funktion. De olika naiva Bayes-klassificerarna skiljer sig främst genom de antaganden de gör om fördelningen av
Typer av naiva Bayes-modeller
Det finns tre typer av naiva Bayes-modeller:
Gaussisk Naiv Bayes klassificerare
I Gaussiska Naive Bayes antas kontinuerliga värden associerade med varje funktion vara fördelade enligt en Gaussisk fördelning. En gaussisk fördelning kallas också Normal distribution När den plottas ger den en klockformad kurva som är symmetrisk kring medelvärdet av funktionsvärdena som visas nedan:
Uppdaterad tabell över tidigare sannolikheter för Outlook-funktionen är följande:
Sannolikheten för funktionerna antas vara Gaussisk, därför ges villkorlig sannolikhet av:
Nu tittar vi på en implementering av Gaussian Naive Bayes klassificerare med hjälp av scikit-learn.
| Ja | Nej | P(Ja) | P(Nej) |
---|---|---|---|---|
Solig | 3 | 2 | 3/9 | 2/5 |
Regnig | 4 | 0 | 4/9 | 0/5 |
Mulen | 2 | 3 | 2/9 | 3/5 |
Total | 9 | 5 | 100 % | 100 % |
Pytonorm
# load the iris dataset> from> sklearn.datasets> import> load_iris> iris> => load_iris()> > # store the feature matrix (X) and response vector (y)> X> => iris.data> y> => iris.target> > # splitting X and y into training and testing sets> from> sklearn.model_selection> import> train_test_split> X_train, X_test, y_train, y_test> => train_test_split(X, y, test_size> => 0.4> , random_state> => 1> )> > # training the model on training set> from> sklearn.naive_bayes> import> GaussianNB> gnb> => GaussianNB()> gnb.fit(X_train, y_train)> > # making predictions on the testing set> y_pred> => gnb.predict(X_test)> > # comparing actual response values (y_test) with predicted response values (y_pred)> from> sklearn> import> metrics> print> (> 'Gaussian Naive Bayes model accuracy(in %):'> , metrics.accuracy_score(y_test, y_pred)> *> 100> )> |
Output: Gaussian Naive Bayes model accuracy(in %): 95.0 Multinomial Naive Bayes Feature vectors represent the frequencies with which certain events have been generated by a multinomial distribution. This is the event model typically used for document classification. Bernoulli Naive Bayes In the multivariate Bernoulli event model, features are independent booleans (binary variables) describing inputs. Like the multinomial model, this model is popular for document classification tasks, where binary term occurrence(i.e. a word occurs in a document or not) features are used rather than term frequencies(i.e. frequency of a word in the document). Advantages of Naive Bayes ClassifierEasy to implement and computationally efficient.Effective in cases with a large number of features.Performs well even with limited training data.It performs well in the presence of categorical features. For numerical features data is assumed to come from normal distributionsDisadvantages of Naive Bayes ClassifierAssumes that features are independent, which may not always hold in real-world data.Can be influenced by irrelevant attributes.May assign zero probability to unseen events, leading to poor generalization.Applications of Naive Bayes Classifier Spam Email Filtering : Classifies emails as spam or non-spam based on features. Text Classification : Used in sentiment analysis, document categorization, and topic classification. Medical Diagnosis: Helps in predicting the likelihood of a disease based on symptoms. Credit Scoring: Evaluates creditworthiness of individuals for loan approval. Weather Prediction : Classifies weather conditions based on various factors.As we reach to the end of this article, here are some important points to ponder upon: In spite of their apparently over-simplified assumptions, naive Bayes classifiers have worked quite well in many real-world situations, famously document classification and spam filtering. They require a small amount of training data to estimate the necessary parameters.Naive Bayes learners and classifiers can be extremely fast compared to more sophisticated methods. The decoupling of the class conditional feature distributions means that each distribution can be independently estimated as a one dimensional distribution. This in turn helps to alleviate problems stemming from the curse of dimensionality.ConclusionIn conclusion, Naive Bayes classifiers, despite their simplified assumptions, prove effective in various applications, showcasing notable performance in document classification and spam filtering. Their efficiency, speed, and ability to work with limited data make them valuable in real-world scenarios, compensating for their naive independence assumption. Frequently Asked Questions on Naive Bayes ClassifiersWhat is Naive Bayes real example?Naive Bayes is a simple probabilistic classifier based on Bayes’ theorem. It assumes that the features of a given data point are independent of each other, which is often not the case in reality. However, despite this simplifying assumption, Naive Bayes has been shown to be surprisingly effective in a wide range of applications. Why is it called Naive Bayes?Naive Bayes is called naive because it assumes that the features of a data point are independent of each other. This assumption is often not true in reality, but it does make the algorithm much simpler to compute. What is an example of a Bayes classifier?A Bayes classifier is a type of classifier that uses Bayes’ theorem to compute the probability of a given class for a given data point. Naive Bayes is one of the most common types of Bayes classifiers. What is better than Naive Bayes?There are several classifiers that are better than Naive Bayes in some situations. For example, logistic regression is often more accurate than Naive Bayes, especially when the features of a data point are correlated with each other. Can Naive Bayes probability be greater than 1?No, the probability of an event cannot be greater than 1. The probability of an event is a number between 0 and 1, where 0 indicates that the event is impossible and 1 indicates that the event is certain.>