568

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

トレーニングセットが果たす役割について説明してください。ここでは、バナナなどの果物の非常に簡単な例を示します。

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
4

5 に答える 5

1078

受け入れられた回答には、異なるアルゴリズムであるk-NN(k最近傍)の多くの要素が含まれています。

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

質問はナイーブベイズに関するものなので、これが私が誰かにアイデアとステップを説明する方法です。できるだけ少ない方程式で、平易な英語でそれをやろうと思います。

まず、条件付き確率とベイズの定理

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

平易な英語での条件付き確率:何か他のことがすでに起こっているとすると、何かが起こる確率はどれくらいですか。

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

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

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

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

(民主党と女性の上院議員)の確率= Prob(上院議員は民主党)に、民主党であると仮定した場合の女性であるという条件付き確率を掛けたもの。

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

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

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

ベイズの定理を理解する

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

P(エビデンスがわかっている場合の結果)= P(結果がわかっている場合のエビデンス)×Prob(結果)、P(エビデンス)でスケーリング

ベイズの定理を理解するための典型的な例:

Probability of Disease D given Test-positive = 

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

さて、これはすべて、ナイーブベイズに到達するための前文にすぎませんでした。

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

これまでのところ、1つの証拠についてのみ話しました。実際には、複数の証拠が与えられた場合の結果を予測する必要があります。その場合、計算は非常に複雑になります。この複雑さを回避するための1つのアプローチは、複数の証拠を「切り離し」、各証拠を独立したものとして扱うことです。このアプローチが、これが単純ベイズと呼ばれる理由です

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 | result)が1の場合、1を掛けているだけです。
  • 確率(いくつかの特定の証拠|結果)が0の場合、確率全体。矛盾する証拠が見られる場合は、その結果を除外できます。
  • すべてをP(Evidence)で割るので、計算せずに逃げることもできます。
  • 事前の乗算の背後にある直感は、より一般的な結果に高い確率を与え、ありそうもない結果に低い確率を与えるためです。これらはまた呼ばれbase rates、予測された確率をスケーリングする方法です。

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

考えられる結果ごとに、上記の式を実行するだけです。分類しようとしているので、各結果はaclassと呼ばclass label.れ、証拠を調べて、このクラスまたはそのクラスである可能性を検討し、各エンティティにラベルを割り当てることが私たちの仕事です。ここでも、非常に単純なアプローチを採用しています。確率が最も高いクラスが「勝者」と宣言され、そのクラスラベルがその証拠の組み合わせに割り当てられます。

果物の例

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

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

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

これが私たちの「トレーニングセット」です。これを使用して、遭遇する新しい果​​物の種類を予測します。

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)で、この甘い/長い/黄色の果物をバナナである可能性が高いと分類します。

ベイズ分類器がとても人気があるのはなぜですか?

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

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

番号が最も大きい方のクラスラベルを割り当てると、完了です。

名前にもかかわらず、ナイーブベイズは特定のアプリケーションで優れていることが判明しました。テキスト分類は、それが本当に輝いている領域の1つです。

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

于 2013-12-12T23:54:43.227 に答える
681

私が理解しているあなたの質問は2つの部分に分かれています。1つは単純ベイズ分類器をよりよく理解する必要があるということ、もう1つはトレーニングセットを取り巻く混乱です。

一般に、すべての機械学習アルゴリズムは、分類、予測などの教師あり学習タスク、またはクラスタリングなどの教師なし学習タスク用にトレーニングする必要があります。

トレーニングステップでは、特定の入力データセット(トレーニングセット)を使用してアルゴリズムを学習します。これにより、後で分類または予測できる未知の入力(教師ありの場合)についてアルゴリズムをテストできます。学習)彼らの学習に基づいています。これは、ニューラルネットワーク、SVM、ベイジアンなどのほとんどの機械学習手法が基づいているものです。

したがって、一般的な機械学習プロジェクトでは、基本的に、入力セットを開発セット(トレーニングセット+開発テストセット)とテストセット(または評価セット)に分割する必要があります。基本的な目的は、システムが開発セットまたはテストセットのいずれかでこれまでに見たことのない新しい入力を学習して分類することであることを忘れないでください。

テストセットは通常、トレーニングセットと同じ形式です。ただし、テストセットをトレーニングコーパスと区別することは非常に重要です。トレーニングセットをテストセットとして再利用した場合、新しい例に一般化する方法を学習せずに、入力を単に記憶したモデルは誤解を招く可能性があります。高得点。

一般に、たとえば、データの70%をトレーニングセットのケースとして使用できます。また、元のセットをトレーニングセットとテストセットにランダムに分割することを忘れないでください。

さて、ナイーブベイズについてのあなたの他の質問に行きます。

ナイーブベイズ分類の概念を示すために、以下の例を検討してください。

ここに画像の説明を入力してください

GREEN示されているように、オブジェクトはまたはのいずれかに分類できますRED。私たちのタスクは、新しいケースが到着したときに分類することです。つまり、現在存在するオブジェクトに基づいて、それらが属するクラスラベルを決定します。

GREENオブジェクトの数はの2倍でREDあるため、新しいケース(まだ観察されていない)は、GREENではなくメンバーシップを持つ可能性が2倍であると考えるのが妥当ですRED。ベイズ分析では、この信念は事前確率として知られています。事前確率は、以前の経験(この場合はオブジェクトのパーセンテージ)に基づいておりGREENRED実際に発生する前に結果を予測するためによく使用されます。

したがって、次のように書くことができます。

事前確率GREENnumber of GREEN objects / total number of objects

事前確率REDnumber of RED objects / total number of objects

60オブジェクトの総数は4020GREENREDあるため、クラスメンバーシップの事前確率は次のようになります。

事前確率GREEN40 / 60

事前確率RED20 / 60

事前確率を定式化したので、新しいオブジェクトを分類する準備が整いました(WHITE下の図の円)。GREENオブジェクトは十分にクラスター化されているため、Xの近くにある(またはRED)オブジェクトが多いほど、新しいケースがその特定の色に属する可能性が高くなると考えるのが妥当です。この可能性を測定するために、クラスラベルに関係なく、(事前に選択される)ポイントの数を含むXの周りに円を描きます。次に、各クラスラベルに属する円内のポイントの数を計算します。これから、尤度を計算します。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

上の図から、円はオブジェクトとオブジェクトを含むため、 givenの尤度はgivenXGREEN尤度よりも小さいことが明らかです。したがって:XRED1 GREEN3 RED

ここに画像の説明を入力してください

ここに画像の説明を入力してください

事前確率は、にX属する可能性があることを示していますが(と比較しGREENて2倍の数がある場合)、尤度はそうでないことを示します。のクラスメンバーシップは(の近くにより多くのオブジェクトがある場合)です。ベイズ分析では、最終的な分類は、両方の情報源、つまり事前確率と尤度を組み合わせて、いわゆるベイズの法則(トーマスベイズ牧師1702-1761にちなんで名付けられた)を使用して事後確率を形成することによって生成されます。GREENREDXREDREDXGREEN

ここに画像の説明を入力してください

最後に、XをRED、そのクラスメンバーシップが最大の事後確率を達成するために分類します。

于 2012-04-08T12:13:17.883 に答える
20

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

彼らはそれをナイーブと呼んでいます。なぜなら、その仮定(データセット内のすべての機能が等しく重要で独立していると仮定している)は本当に楽観的であり、ほとんどの実際のアプリケーションではめったに真実ではないからです。

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

下の図は、単純ベイズがどのように機能するかを示しています

ここに画像の説明を入力してください

NBを予測する式:

ここに画像の説明を入力してください

ナイーブベイズアルゴリズムの使用方法は?

NBがどのように中華鍋を作ったかの例を見てみましょう

ステップ1:最初に、下の図で「はい」または「いいえ」の確率を示す表の尤度を見つけます。ステップ2:各クラスの事後確率を見つけます。

ここに画像の説明を入力してください

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.

詳細については、これらのブログを参照してください。

GitHubリポジトリのNaive-Bayes-Examplesを参照してください

于 2017-02-17T04:02:28.103 に答える
19

Ram Narasimhanは、この概念を非常にうまく説明しました。以下は、動作中のNaive Bayesのコード例による代替の説明です。これは、 351ページ
のこの本の問題の例を使用しています。これは、 上記のデータセット で使用するデータセットです。仮説=それでは、彼がコンピューターを購入する、または購入しない確率はどのくらいですか。 以下のコードは、その質問に正確に答えます。 namedという名前のファイルを作成し、次のコンテンツを貼り付けるだけです。

ここに画像の説明を入力してください
{"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 __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()

出力:

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
于 2016-03-29T11:15:23.417 に答える
14

ベイズの定理を例を挙げて説明しようと思います。

社会から選ばれたランダムな人が喫煙者である可能性はどのくらいですか?

あなたは10%と答えることができます、そしてそれが正しいと仮定しましょう。

さて、ランダムな人が男性15歳だと言ったらどうなるでしょうか?

15%または20%と言うかもしれませんが、なぜですか。

実際、最初の推測を新しい証拠で更新しようとしています(P(smoker) vs. P(smoker | evidence))。ベイズの定理は、これら2つの確率を関連付ける方法です。

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

それぞれの証拠は、このチャンスを増減させる可能性があります。たとえば、彼が男性であるというこの事実は、非喫煙者のこの割合(男性である)が低い場合、チャンスを増やす可能性があります。

言い換えれば、男性であることは、非喫煙者ではなく喫煙者であることの指標でなければなりません。したがって、証拠が何かの指標である場合、それはチャンスを増やします。

しかし、これが指標であることをどうやって知ることができますか?

各機能について、特定の条件下でのその機能の共通性(確率)をその共通性のみと比較できます。(P(f | x) vs. P(f))

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

たとえば、喫煙者の90%が男性であることがわかっている場合でも、男性であることが喫煙者であるかどうかの指標であるかどうかを判断するだけでは不十分です。たとえば、社会で男性である確率も90%である場合、誰かが男性であることを知っていても役に立ちません((90% / 90%) = 1。しかし、男性が社会の40%、喫煙者の90%に貢献している場合、誰かが男性であることを知っていると喫煙者になる可能性が(90% / 40%) = 2.25高くなるため、初期推定値(10%)が2.25増加し、22.5%になります。

しかし、社会で男性である確率が95%だったとしたら、喫煙者に占める男性の割合が高い(90%)にもかかわらず!誰かが男性であるという証拠は、彼が喫煙者である可能性を減らします!(90% / 95%) = 0.95)

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

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

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

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

分類器にはいくつかの機能があり(男性であり、20歳未満である)、喫煙者であるかどうかを判断する必要があります(これらは2つのクラスです)。上記の式を使用して、証拠(特徴)の下で各クラスの確率を計算し、最も確率の高いクラスを入力に割り当てます。必要な確率(90%、10%、80%...)を提供するために、トレーニングセットを使用します。たとえば、トレーニングセット内で喫煙者である人をカウントし、サンプルの10%を提供していることがわかります。次に、喫煙者は、男性または女性の数を確認します。20歳以上または20歳未満の人は何人ですか。つまり、トレーニングに基づいて、各クラスの特徴の確率分布を作成しようとします。データ。

于 2016-03-12T16:13:48.523 に答える