Naif Bayes Sınıflandırmasının basit bir açıklaması


547

Naive Bayes sürecini anlamakta zorlanıyorum ve birisinin bunu İngilizce adım adım basit bir işlemle açıklayıp açıklayamayacağını merak ediyordum. Bir olasılık olarak meydana gelen zaman karşılaştırmaları gerektirdiğini anlıyorum, ancak eğitim verilerinin gerçek veri kümesiyle nasıl ilişkili olduğu hakkında hiçbir fikrim yok.

Lütfen eğitim setinin nasıl bir rol oynadığını açıklayın. Buradaki meyveler için çok basit bir örnek veriyorum, örneğin muz gibi

training set---
round-red
round-orange
oblong-yellow
round-red

dataset----
round-red
round-orange
round-red
round-orange
oblong-yellow
round-red
round-orange
oblong-yellow
oblong-yellow
round-red

18
Bayes Teoremini anlamanız oldukça kolaydır. Eğer 'Bayes' teoremini okumadıysanız , bu bağlantıyı deneyin yudkowsky.net/rational/bayes .
Çimdikle

1
lütfen örneğinizi açıklayınız. eğitim setinizdeki ilk satır için: yuvarlak kırmızı olarak mı sınıflandırılır, yoksa hem yuvarlak hem de kırmızı değişkenler başka bir şey olarak sınıflandırılır mı? eğer ikinciyse, eğitim setinizdeki her bir giriş için sınıflandırmalar nelerdir?
K Mehta

22
NOT: Aşağıdaki kabul edilen cevap, Naïve Bayes için geleneksel bir örnek değildir. Çoğunlukla ak Yakın Komşu uygulamasıdır. Buna göre okuyun.
chmullig

1
@Jaggerjack: RamNarasimhan'ın cevabı kabul edilen cevaptan daha iyi açıklanmış.
Unmesha SreeVeni

2
Biri gerçekten nokta KNN olduğu anlamına gelmeyen bazı noktalara sahip bir grafik görürse :) Olasılıkları nasıl hesapladığınız tamamen size bağlıdır. Naive Bayes bunu önceden olasılıkla çarpılarak hesaplar, böylece Yavar'ın cevabında gösterdiği şey budur. Bu olasılıklara nasıl ulaşılacağı gerçekten önemli değil. Cevap kesinlikle doğru ve hiçbir sorun görmüyorum.
avinash shah

Yanıtlar:


672

Anladığım kadarıyla sorunuz iki bölüme ayrılmıştır, birinci bölüm Naive Bayes sınıflandırıcısını daha iyi anlamanız gerekir ve ikinci bölüm Eğitim setini çevreleyen karışıklıktır.

Genel olarak, tüm Makine Öğrenimi Algoritmalarının sınıflandırma, tahmin vb. Denetimli öğrenme görevleri veya kümeleme gibi denetlenmemiş öğrenme görevleri için eğitilmesi gerekir.

Eğitim adımı sırasında, algoritmalara belirli bir giriş veri kümesi (eğitim seti) öğretilir, böylece daha sonra bunları (daha önce hiç görmedikleri) vb. öğrenme). Yapay Sinir Ağları, SVM, Bayes vb. Makine Öğrenim tekniklerinin çoğu buna dayanır.

Genel bir Makine Öğrenimi projesinde temel olarak girdi setinizi bir Geliştirme Setine (Eğitim Seti + Geliştirme Testi Seti) ve bir Test Setine (veya Değerlendirme setine) bölmelisiniz. Temel hedefinizin, sisteminizin Dev set veya test setinde daha önce hiç görmedikleri yeni girdileri öğrenmesi ve sınıflandırması olacağını unutmayın.

Test seti tipik olarak egzersiz seti ile aynı formata sahiptir. Bununla birlikte, test setinin eğitim grubundan farklı olması çok önemlidir: eğitim setini test seti olarak yeniden kullanırsak, yeni örneklere nasıl genelleştirileceğini öğrenmeden girdisini ezberleyen bir model yanıltıcı bir şekilde alınır yüksek puanlar.

Genel olarak, bir örnek olarak, verilerimizin% 70'i eğitim seti vakaları olarak kullanılabilir. Ayrıca orijinal seti eğitim ve test setlerine rastgele bölmeyi unutmayın .

Şimdi Naive Bayes hakkındaki diğer sorunuza geliyorum.

Naïve Bayes Sınıflandırması kavramını göstermek için, aşağıda verilen örneği göz önünde bulundurun:

resim açıklamasını buraya girin

Belirtildiği gibi, nesneler ya GREENya olarak sınıflandırılabilir RED. Görevimiz yeni vakaları ulaştıklarında sınıflandırmak, yani mevcut sınıf nesnelerine göre hangi sınıf etiketine ait olduklarına karar vermektir.

İki kat daha fazla GREENnesne REDolduğundan, yeni bir vakanın (henüz gözlemlenmemiş olan) üyeliğe sahip GREENolmaktan iki kat daha fazla olduğuna inanmak mantıklıdır RED. Bayesci analizde bu inanç, önceki olasılık olarak bilinir. Önceki olasılıklar önceki deneyime, bu durumda nesnelerin yüzdesine GREENve REDnesnelere dayanır ve genellikle sonuçları gerçekte gerçekleşmeden önce tahmin etmek için kullanılır.

Böylece şunu yazabiliriz:

Önceki OlasılıkGREEN :number of GREEN objects / total number of objects

Önceki OlasılıkRED :number of RED objects / total number of objects

Toplam 60nesne 40sayısı GREENve 20 olduğu REDiçin, sınıf üyeliği için önceki olasılıklarımız:

Şunlar için Önceden OlasılıkGREEN :40 / 60

Şunlar için Önceden OlasılıkRED :20 / 60

Önceki olasılığımızı formüle ettikten sonra, şimdi yeni bir nesneyi sınıflandırmaya hazırız ( WHITEaşağıdaki şemadaki daire). Nesneler iyi kümelenmiş olduğundan, X'in çevresindeki daha fazla GREEN(veya RED) nesnenin, yeni vakaların belirli bir renge ait olma olasılığının daha yüksek olduğunu varsaymak mantıklıdır . Bu olasılığı ölçmek için X'in çevresine, sınıf etiketlerinden bağımsız olarak bir dizi (a priori seçilecek) noktaları kapsayan bir daire çiziyoruz. Ardından, her sınıf etiketine ait daire içindeki nokta sayısını hesaplıyoruz. Bundan olasılığı hesaplıyoruz:

resim açıklamasını buraya girin

resim açıklamasını buraya girin

Yukarıdaki çizimde bakıldığında, olabilirlik açıktır Xverilen GREENolasılığını daha küçük olan Xbelirli bir REDdaire içine aldığı, 1 GREENnesne ve 3 REDolanlar. Böylece:

resim açıklamasını buraya girin

resim açıklamasını buraya girin

Her ne kadar önceki olasılıklar bununla Xilişkili olabileceğini göstermesine rağmen GREEN( GREENkarşılaştırıldığında iki kat daha fazla olduğu göz önüne alındığında RED), olasılık başka türlü belirtir; sınıf üyelik olduğunu XIS RED(daha orada verilen REDçevresinde nesneler Xdaha GREEN). Bayesci analizde, son sınıflandırma, Bayes kuralı (Rev. Thomas Bayes 1702-1761'den sonra adlandırılır) kullanılarak posterior bir olasılık oluşturmak için her iki bilgi kaynağının, yani önceki ve olasılığın birleştirilmesiyle üretilir.

resim açıklamasını buraya girin

Son olarak, X'i RED, sınıf üyeliği en büyük posterior olasılığı yakaladığı için sınıflandırıyoruz .


39
bu algoritma k-en yakın komşularına benzemiyor mu?
Renaud

251
Bu cevap kafa karıştırıcı - KNN'yi (en yakın komşular) ve saf koyları karıştırıyor.
Michal Illich

7
Cevap, olasılık ortaya çıkana kadar iyi ilerliyordu. Yani @Yavar, olasılığını hesaplamak için K'ye en yakın komşuları kullandı. Bu ne kadar doğru? Eğer öyleyse, olasılığı hesaplamak için başka yöntemler nelerdir?
ganimet

1
Olasılık örneği olarak bir daire kullandınız. Olasılığın gaussian olduğu Gauss Naive koylarını okudum. Bu nasıl açıklanabilir?
umair durrani

1
Aslında, knn ile cevap doğrudur. Dağılımı ve dolayısıyla böyle bir dağılımın olasılık yoğunluğunu bilmiyorsanız, bir şekilde bulmanız gerekir. Bu, kNN veya Çekirdekler aracılığıyla yapılabilir. Bence bazı şeyler eksik. Yine de bu sunuyu kontrol edebilirsiniz .
CS

1053

Bunun eski bir soru, yerleşik bir cevabı olduğunu fark ettim. Göndermemin nedeni, kabul edilen cevabın farklı bir algoritma olan k- NN'nin ( k-en yakın komşuları) birçok unsuru olmasıdır .

Hem k-NN hem de NaiveBayes sınıflandırma algoritmalarıdır. Kavramsal olarak, k-NN yeni varlıkları sınıflandırmak için "yakınlık" fikrini kullanır. K-NN'de 'yakınlık' Öklid Uzaklığı veya Kosinüs Uzaklığı gibi fikirlerle modellenir. Buna karşılık, NaiveBayes'te 'olasılık' kavramı yeni varlıkları sınıflandırmak için kullanılır.

Soru Naive Bayes ile ilgili olduğu için, birisine fikirleri ve adımları nasıl tarif edeceğim. Mümkün olduğunca az denklem ve sade İngilizce ile yapmaya çalışacağım.

İlk olarak, Koşullu Olasılık ve Bayes Kuralı

Birisi Naive Bayes'in nüanslarını anlayabilmeden ve takdir etmeden önce, önce birkaç ilgili kavramı, yani Koşullu Olasılık ve Bayes Kuralı'nı bilmeleri gerekir. (Bu kavramlara aşina iseniz Bayes'e Ulaşmak başlıklı bölüme geçin )

Basit İngilizcede Koşullu Olasılık : Başka bir şeyin zaten gerçekleştiği göz önüne alındığında, bir şeyin gerçekleşme olasılığı nedir .

Diyelim ki bazı Sonuç O var ve bazı Kanıt E. Bu olasılıkların tanımlandığı yoldan: Hem Sonuç O hem de Kanıt E'ye sahip olma olasılığı : (O oluşma olasılığı) ile (E'nin Olası) Ey oldu)

Koşullu Olasılığı anlamak için bir örnek:

ABD Senatörlerinden oluşan bir koleksiyonumuz olduğunu varsayalım. Senatörler Demokratlar veya Cumhuriyetçiler olabilir. Ayrıca erkek ya da kadın.

Bir senatörü tamamen rastgele seçersek, bu kişinin kadın bir Demokrat olma olasılığı nedir? Koşullu Olasılık buna cevap vermemize yardımcı olabilir.

(Demokrat ve Kadın Senatör) Olasılığı = Prob (Senatör Demokrattır) bir Demokrat oldukları sürece Koşullu Kadın Olma Olasılığı ile çarpılır.

  P(Democrat & Female) = P(Democrat) * P(Female | Democrat) 

Aynı şeyi tersine hesaplayabiliriz:

  P(Democrat & Female) = P(Female) * P(Democrat | Female) 

Bayes Kuralını Anlama

Kavramsal olarak, bu P (Kanıt | Bilinen Sonuç) 'dan P (Sonuç | Bilinen Kanıt)' a gitmenin bir yoludur. Genellikle, bilinen bir sonuç göz önüne alındığında , bazı belirli kanıtların ne sıklıkta gözlemlendiğini biliyoruz . Bu bilinen gerçeği , kanıt göz önüne alındığında, tersi hesaplamak, sonucun gerçekleşme şansını hesaplamak için kullanmalıyız .

P (Biraz Kanıt bildiğimizden elde edilen sonuç) = P (Sonucu bildiğimiz göz önüne alındığında kanıt) çarpı P (Kanıt) ile ölçeklendirilmiş Prob (Sonuç)

Bayes Kuralını anlamak için klasik örnek:

Probability of Disease D given Test-positive = 

               Prob(Test is positive|Disease) * P(Disease)
     _______________________________________________________________
     (scaled by) Prob(Testing Positive, with or without the disease)

Şimdi, tüm bunlar Naive Bayes'e ulaşmak için önsözdü.

Naif Bayes'e Ulaşım

Şimdiye kadar sadece bir parça kanıttan bahsettik. Gerçekte, birden fazla kanıtın verildiği bir sonucu tahmin etmeliyiz . Bu durumda, matematik çok karmaşıklaşır. Bu komplikasyonun üstesinden gelmek için bir yaklaşım, birden fazla kanıt parçasını 'ayırmak' ve her bir kanıt parçasını bağımsız olarak ele almaktır. Bu yaklaşım buna naif Bayes denir .

P(Outcome|Multiple Evidence) = 
P(Evidence1|Outcome) * P(Evidence2|outcome) * ... * P(EvidenceN|outcome) * P(Outcome)
scaled by P(Multiple Evidence)

Birçok kişi bunu hatırlamayı seçer:

                      P(Likelihood of Evidence) * Prior prob of outcome
P(outcome|evidence) = _________________________________________________
                                         P(Evidence)

Bu denklem hakkında birkaç şeye dikkat edin:

  • Prob (kanıt | sonuç) 1 ise, o zaman sadece 1 ile çarpıyoruz.
  • Prob (bazı özel kanıtlar | sonuç) 0 ise, tüm prob. Eğer çelişkili kanıtlar görürseniz, bu sonucu göz ardı edebiliriz.
  • Her şeyi P'ye (Kanıt) böldüğümüzden, hesaplamadan bile kurtulabiliriz.
  • İle çarpılması arkasında sezgi önce biz daha yaygın sonuçlara yüksek olasılık ve olası sonuçlara küçük olasılık vermek öyle mi. Bunlar da denir base ratesve tahmin edilen olasılıklarımızı ölçeklendirmenin bir yoludur.

Bir Sonuçları Tahmin Etmek İçin NaiveBayes Nasıl Uygulanır?

Her olası sonuç için yukarıdaki formülü çalıştırmanız yeterlidir. Sınıflandırmaya çalıştığımız için , her sonuca a denir classve bunun bir class label.İşi vardır . Yine çok basit bir yaklaşımı ele alıyoruz: En yüksek olasılığa sahip olan sınıf "kazanan" olarak ilan edilir ve bu sınıf etiketi bu kanıt kombinasyonuna atanır.

Meyve Örneği

Anlayışımızı artırmak için bir örnek üzerinde deneyelim: OP bir 'meyve' tanımlama örneği istedi.

Diyelim ki 1000 adet meyve hakkında verilerimiz var. Muz , Portakal veya Diğer Meyveler olurlar . Her meyve hakkında 3 özellik biliyoruz:

  1. Uzun olup olmadığı
  2. Tatlı olup olmadığı ve
  3. Rengi Sarı ise.

Bu bizim 'eğitim setimiz'. Bunu karşılaştığımız yeni meyvelerin türünü tahmin etmek için kullanacağız .

Type           Long | Not Long || Sweet | Not Sweet || Yellow |Not Yellow|Total
             ___________________________________________________________________
Banana      |  400  |    100   || 350   |    150    ||  450   |  50      |  500
Orange      |    0  |    300   || 150   |    150    ||  300   |   0      |  300
Other Fruit |  100  |    100   || 150   |     50    ||   50   | 150      |  200
            ____________________________________________________________________
Total       |  500  |    500   || 650   |    350    ||  800   | 200      | 1000
             ___________________________________________________________________

Meyve koleksiyonumuzla ilgili birçok şeyi önceden hesaplayabiliriz.

Sözde "Önceki" olasılıklar. (Meyve özelliklerinden hiçbirini bilmeseydik, bu bizim tahminimiz olurdu.) Bunlar bizimbase rates.

 P(Banana)      = 0.5 (500/1000)
 P(Orange)      = 0.3
 P(Other Fruit) = 0.2

"Kanıt" olasılığı

p(Long)   = 0.5
P(Sweet)  = 0.65
P(Yellow) = 0.8

"Olabilirlik" olasılığı

P(Long|Banana) = 0.8
P(Long|Orange) = 0  [Oranges are never long in all the fruit we have seen.]
 ....

P(Yellow|Other Fruit)     =  50/200 = 0.25
P(Not Yellow|Other Fruit) = 0.75

Bir Meyve verildiğinde, nasıl sınıflandırılır?

Diyelim ki bize bilinmeyen bir meyvenin özellikleri verildi ve onu sınıflandırmamız istendi. Bize meyvenin Uzun, Tatlı ve Sarı olduğu söylenir. Muz mu? Portakal mı? Yoksa başka bir meyve mi?

3 sonucun her biri için sayıları tek tek çalıştırabiliriz. Daha sonra en yüksek olasılığı seçeriz ve bilinmeyen meyvemizi önceki kanıtlarımıza (1000 meyve eğitim setimiz) dayanarak en yüksek olasılığa sahip olan sınıfa ait olarak sınıflandırırız:

P(Banana|Long, Sweet and Yellow) 
      P(Long|Banana) * P(Sweet|Banana) * P(Yellow|Banana) * P(banana)
    = _______________________________________________________________
                      P(Long) * P(Sweet) * P(Yellow)

    = 0.8 * 0.7 * 0.9 * 0.5 / P(evidence)

    = 0.252 / P(evidence)


P(Orange|Long, Sweet and Yellow) = 0


P(Other Fruit|Long, Sweet and Yellow)
      P(Long|Other fruit) * P(Sweet|Other fruit) * P(Yellow|Other fruit) * P(Other Fruit)
    = ____________________________________________________________________________________
                                          P(evidence)

    = (100/200 * 150/200 * 50/200 * 200/1000) / P(evidence)

    = 0.01875 / P(evidence)

Ezici bir farkla ( 0.252 >> 0.01875), bu Tatlı / Uzun / Sarı meyveyi bir Muz olarak sınıflandırıyoruz.

Bayes Sınıflandırıcısı neden bu kadar popüler?

Sonunda neyin aşağı indiğine bakın. Sadece sayma ve çarpma. Tüm bu terimleri önceden hesaplayabiliriz ve böylece sınıflandırma kolay, hızlı ve verimli hale gelir.

Let z = 1 / P(evidence). Şimdi aşağıdaki üç miktarı hızla hesaplıyoruz.

P(Banana|evidence) = z * Prob(Banana) * Prob(Evidence1|Banana) * Prob(Evidence2|Banana) ...
P(Orange|Evidence) = z * Prob(Orange) * Prob(Evidence1|Orange) * Prob(Evidence2|Orange) ...
P(Other|Evidence)  = z * Prob(Other)  * Prob(Evidence1|Other)  * Prob(Evidence2|Other)  ...

En yüksek sayı olan sınıf etiketini atayın ve işiniz bitti.

İsme rağmen, Naive Bayes bazı uygulamalarda mükemmel görünüyor. Metin sınıflandırma, gerçekten parladığı bir alandır.

Naive Bayes algoritmasının arkasındaki kavramların anlaşılmasına yardımcı olan umarım.


14
Çok açık bir açıklama için teşekkürler! Kolayca web etrafında yüzen daha iyi olanlardan biri. Soru: Her P (sonuç / kanıt) 1 / z = p (kanıt) ile çarpıldığı için (meyve durumunda, her biri esasen yalnızca önceki kanıtlara dayanan olasılık anlamına gelir), z'nin Naïve Bayes için hiç önemli değil mi? Bu da demek oluyor ki, biri muz olmayan uzun / tatlı / sarı bir meyveye rastlarsa, yanlış sınıflandırılır.
kovaryans

7
@ E.Chow Evet, z bilgisayarının Naive Bayes için önemli olmadığı konusunda haklısınız. (Olasılıkları 0 ile 1 arasında ölçeklendirmenin bir yoludur.) Z'nin eldeki tüm kanıtların olasılıklarının ürünü olduğunu unutmayın. ( Sınıfların taban oranı olan öncekilerden farklıdır .) Doğru: Muz olmayan bir Uzun / Tatlı / Sarı meyve bulursanız, NB bunu bir muz olarak yanlış bir şekilde sınıflandırır, buna göre Eğitim Seti. Algoritma 'kanıta dayalı en iyi olasılıklı tahmindir' ve dolayısıyla zaman zaman yanlış sınıflandırır.
Ram Narasimhan

1
@ Jasper Tabloda toplam 200 "Diğer meyve" var ve bunların 50'si Sarı. Meyvenin "Diğer Meyve" olduğu düşünüldüğünde evren 200'dür. 50 tanesi Sarıdır. Bu nedenle 50/200. 800'ün toplam Sarı meyve sayısı olduğuna dikkat edin. Eğer P (diğer meyve / Sarı) isteseydik önerisini yapardık: 50/800.
Ram Narasimhan

3
Kesinlikle harika bir açıklama. Bu algoritmayı akademik makalelerden ve kitaplardan anlamıyorum. Çünkü ezoterik açıklama genellikle yazı stili olarak kabul edilebilir. Hepsi bu ve çok kolay. Teşekkürler.
Suat Atan Doktora

3
Neden olasılıklar 1'e kadar eklenmiyor? Örnekte kanıtlar 0.26'dır (500/100 * 650/1000 * 800/1000) ve bu nedenle nihai P (muz | ...) = 0.252 / 0.26 = 0.969 ve P (diğer | ...) = 0.01875 / 0.26 = 0.072. Birlikte 1,04'e kadar ekliyorlar!
Mauricio

18

Ram Narasimhan kavramı çok güzel aşağıda eylem Naif Bayes kod örneği yoluyla alternatif açıklama açıkladı
Bunun bir örneği sorunu kullanan sayfa 351 üzerinde kitabın
Bu kullandığımız olacağı veri kümesidir biz verirsek Yukarıdaki veri kümesi içinde hipotez = o zaman bilgisayar satın alma ya da satın alma olasılığı nedir? Aşağıdaki kod tam olarak bu soruya cevap veriyor. Sadece adlı bir dosya oluşturun ve aşağıdaki içeriği yapıştırın.
resim açıklamasını buraya girin
{"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'}

new_dataset.csv

Age,Income,Student,Creadit_Rating,Buys_Computer
<=30,high,no,fair,no
<=30,high,no,excellent,no
31-40,high,no,fair,yes
>40,medium,no,fair,yes
>40,low,yes,fair,yes
>40,low,yes,excellent,no
31-40,low,yes,excellent,yes
<=30,medium,no,fair,no
<=30,low,yes,fair,yes
>40,medium,yes,fair,yes
<=30,medium,yes,excellent,yes
31-40,medium,no,excellent,yes
31-40,high,yes,fair,yes
>40,medium,no,excellent,no

İşte burada yaptığımız her şeyi açıklayan kod! [Piton]

import pandas as pd 
import pprint 

class Classifier():
    data = None
    class_attr = None
    priori = {}
    cp = {}
    hypothesis = None


    def __init__(self,filename=None, class_attr=None ):
        self.data = pd.read_csv(filename, sep=',', header =(0))
        self.class_attr = class_attr

    '''
        probability(class) =    How many  times it appears in cloumn
                             __________________________________________
                                  count of all class attribute
    '''
    def calculate_priori(self):
        class_values = list(set(self.data[self.class_attr]))
        class_data =  list(self.data[self.class_attr])
        for i in class_values:
            self.priori[i]  = class_data.count(i)/float(len(class_data))
        print "Priori Values: ", self.priori

    '''
        Here we calculate the individual probabilites 
        P(outcome|evidence) =   P(Likelihood of Evidence) x Prior prob of outcome
                               ___________________________________________
                                                    P(Evidence)
    '''
    def get_cp(self, attr, attr_type, class_value):
        data_attr = list(self.data[attr])
        class_data = list(self.data[self.class_attr])
        total =1
        for i in range(0, len(data_attr)):
            if class_data[i] == class_value and data_attr[i] == attr_type:
                total+=1
        return total/float(class_data.count(class_value))

    '''
        Here we calculate Likelihood of Evidence and multiple all individual probabilities with priori
        (Outcome|Multiple Evidence) = P(Evidence1|Outcome) x P(Evidence2|outcome) x ... x P(EvidenceN|outcome) x P(Outcome)
        scaled by P(Multiple Evidence)
    '''
    def calculate_conditional_probabilities(self, hypothesis):
        for i in self.priori:
            self.cp[i] = {}
            for j in hypothesis:
                self.cp[i].update({ hypothesis[j]: self.get_cp(j, hypothesis[j], i)})
        print "\nCalculated Conditional Probabilities: \n"
        pprint.pprint(self.cp)

    def classify(self):
        print "Result: "
        for i in self.cp:
            print i, " ==> ", reduce(lambda x, y: x*y, self.cp[i].values())*self.priori[i]

if __name__ == "__main__":
    c = Classifier(filename="new_dataset.csv", class_attr="Buys_Computer" )
    c.calculate_priori()
    c.hypothesis = {"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'}

    c.calculate_conditional_probabilities(c.hypothesis)
    c.classify()

çıktı:

Priori Values:  {'yes': 0.6428571428571429, 'no': 0.35714285714285715}

Calculated Conditional Probabilities: 

{
 'no': {
        '<=30': 0.8,
        'fair': 0.6, 
        'medium': 0.6, 
        'yes': 0.4
        },
'yes': {
        '<=30': 0.3333333333333333,
        'fair': 0.7777777777777778,
        'medium': 0.5555555555555556,
        'yes': 0.7777777777777778
      }
}

Result: 
yes  ==>  0.0720164609053
no  ==>  0.0411428571429

Umarım sorunu daha iyi anlamaya yardımcı olur

Barış


18

Naif Bayes: Naive Bayes, veri kümelerinin sınıflandırılmasında kullanılan makine öğrenimini denetler. Ön bilgi ve bağımsızlık varsayımlarına dayanarak olayları tahmin etmek için kullanılır.

Buna naif diyorlar çünkü varsayımlar (veri kümesindeki tüm özelliklerin eşit derecede önemli ve bağımsız olduğunu varsayar), çoğu gerçek dünyadaki uygulamalarda gerçekten iyimser ve nadiren doğrudur.

Bilinmeyen veri kümesi için karar veren sınıflandırma algoritmasıdır. Bu dayanmaktadır Bayes Teoremi onun ön bilgilere dayalı bir olayın olasılığını açıklar.

Aşağıdaki diyagram saf Bayes'in nasıl çalıştığını göstermektedir

resim açıklamasını buraya girin

NB'yi tahmin etmek için formül:

resim açıklamasını buraya girin

Naive Bayes Algoritması nasıl kullanılır?

NB'nin nasıl çalıştığına bir örnek verelim

Adım 1: Öncelikle, aşağıdaki şemada evet veya hayır olasılığını gösteren tablo olasılığını öğreniyoruz. Adım 2: Her sınıfın arka olasılığını bulun.

resim açıklamasını buraya girin

Problem: Find out the possibility of whether the player plays in Rainy condition?

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

P(Rainy|Yes) = 2/9 = 0.222
P(Yes) = 9/14 = 0.64
P(Rainy) = 5/14 = 0.36

Now, P(Yes|Rainy) = 0.222*0.64/0.36 = 0.39 which is lower probability which means chances of the match played is low.

Daha fazla referans için bu bloga bakın .

GitHub Deposu Naif-Bayes-Örneklerine bakın


14

Bayes kuralını bir örnekle anlatmaya çalışıyorum.

Toplumdan seçilen rastgele bir insanın sigara içen olma şansı nedir?

% 10 cevap verebilirsiniz.

Şimdi, eğer kişi bir erkek ve 15 yaşındaysa?

Sigara içenlerin yüzdesinin çok düşük olduğunu biliyoruz, ancak% 60 olamaz. Ayrıca% 10'dan az olamaz. % 15 veya 20 daha iyi tahminlerdir.

Aslında, ilk tahmininizi yeni kanıt parçalarıyla güncellemeye çalışıyoruz ( P(smoker) vs. P(smoker | evidence)) .Bayes kuralı bu iki olasılığı birleştirmenin bir yoludur.

P(smoker | evidence) = P(smoker)* p(evidence | smoker)/P(evidence)

Her kanıt bu şansı artırabilir veya azaltabilir. Örneğin, bu gerçeği o bir erkek olduğunu edebilir sigara içmeyenler arasında bu yüzde (erkek olmak) alt şartıyla şansını artırmak. Diğer bir deyişle, erkek olmak sigara içmemek yerine sigara içmenin iyi bir göstergesi olmalıdır.

Bu katkıyı başka bir şekilde de gösterebiliriz. Her özellik için, belirli koşullar altında o özelliğin ortaklığını (olasılığını) yalnızca yaygınlığıyla karşılaştırabilirsiniz. ( P(f | x) vs. P(f)).

P(smoker | evidence) / P(smoker) = P(evidence | smoker)/P(evidence)

Örneğin, sigara içenlerin% 90'ının erkek olduğunu bilersek, erkek olmanın sigara içmenin bir göstergesi olup olmadığını söylemek hala yeterli değildir. Örneğin, toplumda erkek olma olasılığı da% 90 ise, o zaman birinin erkek olduğunu bilmek bize yardımcı olmaz ((90% / 90%) = 1. Ancak erkekler toplumun% 40'ına, ancak sigara içenlerin% 90'ına katkıda bulunursa, o zaman birisinin erkek olduğunu bilmek sigara içen olma şansını arttırır (90% / 40%) = 2.25, bu nedenle ilk tahminde (% 10) 2,25 oranında ve% 22,5 artar.

Bununla birlikte, toplumda erkek olma olasılığı% 95 ise, sigara içenler arasındaki erkek oranının yüksek (% 90) olmasına bakılmaksızın! birinin erkek olduğuna dair kanıt, sigara içen olma şansını azaltır! (90% / 95%) = 0.95).

Böylece sahibiz:

P(smoker | f1, f2, f3,... ) = P(smoker) * contribution of f1* contribution of f2 *... =
P(smoker)* 
(P(being a man | smoker)/P(being a man))*
(P(under 20 | smoker)/ P(under 20))

Bu formülde biz farz olduğunu Not erkek olmakla ve 20 yaşın altındaki olmak onları çarpılır kadar bağımsız özelliklerdir, birilerinin 20 yaşından küçük olduğunu bilerek o erkek ya da kadın olduğunu tahmin üzerinde etkisi yoktur anlamına gelir. Ama bu doğru olmayabilir, örneğin bir toplumdaki ergenlik çağının çoğu erkektir ...

Bu formülü sınıflandırıcıda kullanmak için

Sınıflandırıcı bazı özelliklerle (erkek olmak ve 20 yaşın altında olmak) verilir ve sigara içip içmediğine karar vermelidir (bunlar iki sınıftır). Kanıt (özellikler) altındaki her sınıfın olasılığını hesaplamak için yukarıdaki formülü kullanır ve girdiye en yüksek olasılığı olan sınıfı atar. Gerekli olasılıkları (% 90,% 10,% 80 ...) sağlamak için eğitim setini kullanır. Örneğin, eğitim setinde sigara içen ve örneklemin% 10'una katkıda bulunduğunu düşünen insanları sayar. Sonra sigara içenler için kaç erkek ya da kadın olduğunu kontrol eder .... kaç tanesi 20 yaşın altında ya da 20 yaşın altında ... Başka bir deyişle, her sınıf için özelliklerin eğitime dayalı olasılık dağılımını oluşturmaya çalışır. veri.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.