理解贝叶斯定理

问题描述 投票:11回答:8

我正在研究朴素贝叶斯分类器的实现。 Programming Collective Intelligence通过将贝叶斯定理描述为:

Pr(A | B) = Pr(B | A) x Pr(A)/Pr(B)

以及与文档分类相关的特定示例:

Pr(Category | Document) = Pr(Document | Category) x Pr(Category) / Pr(Document)

我希望有人可以向我解释这里使用的符号,Pr(A | B)Pr(A)是什么意思?它看起来像某种功能,但那么管道(“|”)是什么意思,等等?

statistics bayesian naivebayes document-classification
8个回答
12
投票
  • Pr(A | B)=假设B已经发生,发生A的可能性
  • Pr(A)= A发生的可能性

但以上是关于条件概率的计算。你想要的是一个分类器,它使用这个原理来决定某些东西是否属于基于先前概率的类别。

有关完整示例,请参阅http://en.wikipedia.org/wiki/Naive_Bayes_classifier


4
投票

我认为他们已经让你了解了基础知识。

Pr(A | B) = Pr(B | A) x Pr(A)/Pr(B)

读取:A给定B的概率与给出A的概率A的概率A乘以A的概率除以B的概率。当你可以测量B的概率并且你试图弄清楚是否B时,通常会使用它的概率。让我们相信A.或者,换句话说,我们真的关心A,但我们可以更直接地衡量B,所以让我们从我们可以衡量的东西开始。

让我给你一个推导,使编写代码更容易。它来自Judea Pearl。我有点挣扎,但是在我意识到Pearl如何帮助我们将理论转化为代码之后,我开始关注这个问题。

优先赔率:

O(H) = P(H) / 1 - P(H)

似然比:

L(e|H) = P(e|H) / P(e|¬H)

后验赔率:

O(H|e) = L(e|H)O(H)

在英语中,我们说你感兴趣的东西(H代表假设)的几率只是你发现某事真实的次数除以你发现不真实的次数。所以,据说每天有一所房子被抢劫了10,000。这意味着你有1 / 10,000的机会被抢劫,没有任何其他证据被考虑。

下一个是衡量你正在看的证据。当您的问题为真时,看到您所看到的证据的概率除以您在问题不正确时看到您所看到的证据的概率除以什么。假设您正在听到您的防盗警报响起。当闹钟响起时(有人在闹钟开启时打开一个窗口)与不应该关闭的时候(风将闹钟关闭),你多久会得到一次警报。如果您有95%的机会将防盗设置为警报并且有1%的机会触发警报,那么您的可能性为95.0。

你的整体信念只是先验赔率的可能性。在这种情况下,它是:

((0.95/0.01) * ((10**-4)/(1 - (10**-4))))
# => 0.0095009500950095

我不知道这是否会让它变得更加清晰,但是更容易让一些代码跟踪先前的赔率,其他代码可以查看可能性,还有一段代码可以组合这些信息。


4
投票

我用Python实现了它。这很容易理解,因为贝叶斯定理的所有公式都在不同的函数中:

#Bayes Theorem

def get_outcomes(sample_space, f_name='', e_name=''):
    outcomes = 0
    for e_k, e_v in sample_space.items():
        if f_name=='' or f_name==e_k:
            for se_k, se_v in e_v.items():
                if e_name!='' and se_k == e_name:
                    outcomes+=se_v
                elif e_name=='':
                    outcomes+=se_v
    return outcomes

def p(sample_space, f_name):
    return get_outcomes(sample_space, f_name) / get_outcomes(sample_space, '', '')

def p_inters(sample_space, f_name, e_name):
    return get_outcomes(sample_space, f_name, e_name) / get_outcomes(sample_space, '', '')

def p_conditional(sample_space, f_name, e_name):
    return p_inters(sample_space, f_name, e_name) / p(sample_space, f_name)

def bayes(sample_space, f, given_e):
    sum = 0;
    for e_k, e_v in sample_space.items():
        sum+=p(sample_space, e_k) * p_conditional(sample_space, e_k, given_e)
    return p(sample_space, f) * p_conditional(sample_space, f, given_e) / sum

sample_space = {'UK':{'Boy':10, 'Girl':20},
                'FR':{'Boy':10, 'Girl':10},
                'CA':{'Boy':10, 'Girl':30}}

print('Probability of being from FR:', p(sample_space, 'FR'))
print('Probability to be French Boy:', p_inters(sample_space, 'FR', 'Boy'))
print('Probability of being a Boy given a person is from FR:', p_conditional(sample_space, 'FR', 'Boy'))
print('Probability to be from France given person is Boy:', bayes(sample_space, 'FR', 'Boy'))

sample_space = {'Grow' :{'Up':160, 'Down':40},
                'Slows':{'Up':30, 'Down':70}}

print('Probability economy is growing when stock is Up:', bayes(sample_space, 'Grow', 'Up'))

2
投票

Pr(A | B):A的条件概率:即A的概率,假设我们所知道的都是B

Pr(A):A的先验概率


1
投票

Pr是概率,Pr(A | B)是条件概率。

Check wikipedia for details.


1
投票

管道(|)表示“给定”。 A给定B的概率等于给定A的概率A x Pr(A)/ Pr(B)


1
投票

根据您的问题,我可以强烈建议您首先阅读一些关于概率论的本科书。如果没有这个,你将无法在朴素贝叶斯分类器上正确完成任务。

我会推荐你​​这本书http://www.athenasc.com/probbook.html或看看MIT OpenCourseWare


0
投票

管道用于表示条件概率。 Pr(A | B)=给定B的概率

示例:假设您感觉不舒服并且您在网上冲浪了解症状。互联网告诉你,如果你有这些症状,那么你有XYZ疾病。

在这种情况下:Pr(A | B)是你想要找到的,这是:你有XYZ的概率,因为你有某些症状。

Pr(A)是患有XYZ疾病的概率

Pr(B)是出现这些症状的概率

Pr(B | A)是你从互联网上发现的,它是:有症状的可能性给你带来了这种疾病。

© www.soinside.com 2019 - 2024. All rights reserved.