web-dev-qa-db-ja.com

単純ベイズ分類の簡単な説明

私はNaive Bayesのプロセスを理解するのが難しいと思っています、そして誰かがそれを簡単なステップバイステップのプロセスで英語で説明することができるかどうか疑問に思いました。確率として発生した時間による比較が必要であることはわかっていますが、トレーニングデータが実際のデータセットとどのように関連しているのかわかりません。

トレーニングセットがどのような役割を果たすのか説明してください。ここでは、例えばバナナのような、とても簡単な果物の例を挙げています。

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
524
Jaggerjack

これは古い質問であり、確立された答えがあることを理解しています。私が投稿している理由は、受け入れられた答えが異なるアルゴリズムであるk-NN(k-nearest neighbors)の多くの要素を持っているからです。

K-NNとNaiveBayesはどちらも分類アルゴリズムです。概念的には、k-NNは「近接」という概念を使用して、新しいエンティティを分類します。 k-NNでは、「近さ」はユークリッド距離やコサイン距離などのアイデアでモデル化されます。対照的に、NaiveBayesでは、新しいエンティティを分類するために「確率」の概念が使用されます。

質問は単純ベイズに関するものなので、ここで誰かにアイデアとステップを説明します。できるだけ少ない方程式で、できるだけ平易な英語でやります。

まず、条件付き確率とベイズのルール

誰かがナイーブベイズのニュアンスを理解し、理解する前に、最初にいくつかの関連する概念、つまり条件付き確率のアイデアとベイズのルールを知る必要があります。 (これらの概念に精通している場合は、Getting to Naive Bayes 'というタイトルのセクションにスキップしてください)

条件付き確率簡単な英語:何かが起こる確率は何ですか、何か他のが既に起こっていると仮定します。

いくつかの結果O.といくつかの証拠Eがあるとしましょう。これらの確率が定義される方法から:結果Oと証拠の両方bothを持つ確率Eは:(Oが発生する確率)×(Oが発生した場合のEの確率)

条件付き確率を理解するための1つの例:

米国の上院議員のコレクションがあるとしましょう。上院議員は民主党員または共和党員である可能性があります。また、男性または女性のいずれかです。

1人の上院議員を完全にランダムに選択した場合、この人物が女性民主党員である確率はどのくらいですか?条件付き確率はそれに答えるのに役立ちます。

(民主党と女性上院議員)の確率=確率(上院議員は民主党員)に、彼らが民主党員であるという条件で女性であるという条件付き確率を掛けたもの。

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

まったく同じことを逆の方法で計算できます。

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

ベイズ規則について

概念的には、これはP(エビデンス|既知の結果)からP(アウトカム|既知の証拠)に進む方法です。多くの場合、特定の証拠がどのくらいの頻度で観察されているかがわかっており、既知の結果が与えられました。この既知の事実を使用して、逆を計算し、その証拠の結果が発生する可能性を計算する必要があります

P(Outcome given that we know some Evidence) = P(Evidence given that we know the Outcome) times Prob(Outcome), scaled by the P(Evidence)

ベイズの規則を理解する古典的な例:

Probability of Disease D given Test-positive = 

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

さて、Naive Bayesにたどり着くには、これはすべて前文でした。

ナイーブベイズへの行き方

これまでのところ、1つの証拠についてのみ説明してきました。現実には、与えられた結果を予測する必要があります複数の証拠。その場合、数学は非常に複雑になります。その複雑さを回避するための1つのアプローチは、複数の証拠を「分離」し、各証拠を独立したものとして扱うことです。このアプローチが、これがnaiveBayesと呼ばれる理由です。

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

多くの人々はこれを次のように覚えることを選択します。

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

この方程式に関するいくつかのことに注意してください。

  • Prob(evidence | outcome)が1の場合、1を乗算しています。
  • Prob(何らかの特定の証拠|結果)が0の場合、prob全体。矛盾する証拠が見られる場合、その結果を除外できます。
  • すべてをP(Evidence)で割るので、計算せずに逃げることさえできます。
  • priorで乗算する背後にある直観は、より一般的な結果に高い確率を与え、起こりそうにない結果に低い確率を与えることです。これらはbase ratesとも呼ばれ、予測確率をスケーリングする方法です。

NaiveBayesを適用して結果を予測する方法は?

考えられる結果ごとに上記の式を実行するだけです。 classifyを試みているため、各結果はclassと呼ばれ、class label.があります。証拠。このクラスまたはそのクラスである可能性を考慮し、各エンティティにラベルを割り当てます。繰り返しますが、非常に単純なアプローチを取ります。最も確率の高いクラスが「勝者」と宣言され、そのクラスラベルが証拠のその組み合わせに割り当てられます。

フルーツの例

理解を深めるために例を試してみましょう。OPは「果物」の識別例を求めました。

1000個の果物に関するデータがあるとしましょう。それらはたまたまバナナオレンジまたはいくつかのその他の果物です。私たちは各果物について3つの特徴を知っています:

  1. 長いかどうか
  2. 甘くて
  3. 色が黄色の場合。

これが「トレーニングセット」です。これを使用して、遭遇するフルーツnewのタイプを予測します。

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
             ___________________________________________________________________

フルーツコレクションに関する多くのことを事前に計算できます。

いわゆる「事前」確率。 (フルーツの属性がわからない場合、これは推測になります。)これらはbase rates.です

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

「証拠」の確率

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

「可能性」の確率

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

フルーツが与えられた場合、どのように分類するのですか?

未知の果物の特性が与えられ、分類を求められたとしましょう。果実は長く、甘く、黄色であると言われています。バナナですか?オレンジですか?それとも他の果物ですか?

3つの結果のそれぞれについて、数字を1つずつ実行するだけです。次に、最も高い確率を選択し、未知の果物を、以前の証拠(私たちの1000個の果物トレーニングセット)に基づいて、最も高い確率を持つクラスに属するものとして「分類」します。

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)

圧倒的なマージン(0.252 >> 0.01875)により、この甘い/長い/黄色い果物をバナナである可能性が高いと分類します。

なぜBayes Classifierはそんなに人気があるのですか?

最終的に何が起こるかを見てください。カウントと乗算だけです。これらすべての用語を事前に計算できるため、分類が簡単、迅速、効率的になります。

Let z = 1 / P(evidence).ここで、次の3つの量をすばやく計算します。

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)  ...

どちらか大きい方のクラスラベルを割り当てれば完了です。

名前にもかかわらず、Naive Bayesは特定のアプリケーションで優れていることがわかりました。テキスト分類は、それが本当に輝く分野の1つです。

Naive Bayesアルゴリズムの背後にある概念を理解するのに役立つことを願っています。

1035
Ram Narasimhan

Naive Bayes: Naive Bayesは、データセットの分類を行うために使用されていた機械学習を監視します。これは、以前の知識と独立性の仮定に基づいて物事を予測するために使用されます。

naive と言うのは、仮定(データセット内のすべての機能が等しく重要で独立していることを前提としている)が本当に楽観的であり、ほとんどの現実のアプリケーションではほとんど当てはまらないためです。

未知のデータセットを決定するのは分類アルゴリズムです。これは Bayes Theorem に基づいています。これは、以前の知識に基づいてイベントの確率を表します。

下の図は、単純ベイズの仕組みを示しています

enter image description here

NBを予測する式:

enter image description here

Naive Bayesアルゴリズムの使い方

N.Bが何をしているかの例を見てみましょう。

ステップ1:最初に、下の図でyesまたはnoの確率を示すテーブルの尤度を見つけます。ステップ2:各クラスの事後確率を見つけます。

enter image description here

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.

詳しくは blog。 を参照してください。

GitHubリポジトリ Naive-Bayes-Examples を参照

17
jitesh mohite

Ram Narasimhan氏は、コンセプトを非常にわかりやすく説明しました。これは、Naive Bayesのコード例を実行中の別の説明です。
351ページのこの の本からの問題例を使用しています
これは私たちが使用する予定のデータセットです。
enter image description here
上記のデータセットで仮説= {"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

これが私たちがここで行っていることすべてをコメントが説明するコードです。 [python]

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 __== "__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()

出力:

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

問題の理解に役立つことを願っています

平和

17

例でベイズ規則を説明しようとします。

10%の人が喫煙者であることを知っているとします。また、喫煙者の90%が男性であり、80%が20歳以上であることも知っています。

manおよび15歳の人が表示されます。あなたは彼が喫煙者である可能性を知りたい:

 X = smoker | he is a man and under 20

10%の人が喫煙者であることを知っているので、最初の推測は10%(prior potential、その人について何も知らない) 証拠の断片(彼が男性であり、彼が15歳であること)は、この推測に影響を与える可能性があります。

各証拠は、この機会を増加または減少させる場合があります。たとえば、彼が男性であるという事実mayは、非喫煙者のこの割合(男性であること)が低い場合、たとえば40%である場合、チャンスを増やします。言い換えれば、男性であることは、非喫煙者ではなく喫煙者であることの良い指標でなければなりません。

この貢献を別の方法で示すことができます。各機能について、その機能(f)のみの共通性(確率)を、特定の条件下での共通性と比較する必要があります。 (P(f) vs. P(f | x)。たとえば、社会で男性である確率が90%であり、喫煙者の90%も男性であることがわかっている場合、誰かが男性であることを知っていても助けにはならない(10% * (90% / 90%) = 10%)。しかし、男性が社会の40%、喫煙者の90%に貢献している場合、誰かが男性であることを知ると喫煙者になる可能性が増加します(10% * (90% / 40%) = 22.5% )。同様に、社会では男性であることは95%でしたが、喫煙者の男性の割合が高いという事実(90%)にかかわらず!誰かが男性であるという証拠は、彼が喫煙者である可能性を減らします!(10% * (90% / 95%) = 9.5%)

だから私たちは持っています:

P(X) = 
P(smoker)* 
(P(being a man | smoker)/P(being a man))*
(P(under 20 | smoker)/ P(under 20))

この式では、男であること20未満は独立した特徴であると仮定したため、それらを乗算したことは、誰かが20未満であることを知ることは、彼が男性か女性かを推測しています。しかし、それは真実ではないかもしれません、例えば、多分社会の青年期のほとんどは男性です...

分類子でこの式を使用するには

分類子にはいくつかの機能(男性で20歳未満)が付与されており、喫煙者かどうかを判断する必要があります。上記の式を使用してそれを見つけます。必要な確率(90%、10%、80%...)を提供するために、トレーニングセットを使用します。たとえば、トレーニングセット内の喫煙者をカウントし、サンプルの10%を提供していることがわかります。それから喫煙者のために、それらのうちの何人が男性または女性であるかをチェックします。

13
Ahmad