11

我正在研究一个朴素贝叶斯分类器的实现。编程集体智能通过将贝叶斯定理描述为:

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)意思?它看起来像某种功能,但管道(“ |”)是什么意思,等等?

4

8 回答 8

13
  • Pr(A | B) = 假设 B 已经发生,A 发生的概率
  • Pr(A) = A 发生的概率

但以上是关于条件概率的计算。你想要的是一个分类器,它利用这个原理根据之前的概率来决定某物是否属于某个类别。

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

于 2009-12-29T12:01:03.303 回答
4

我认为他们已经为您提供了基础知识。

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

读作:A 给定 B 的概率等于 B 给定 A 的概率乘以 A 的概率除以 B 的概率。通常在您可以测量 B 的概率并且您试图弄清楚 B 的情况下使用导致我们相信A。或者,换句话说,我们真的很关心A,但是我们可以更直接地衡量B,所以让我们从我们可以衡量的东西开始。

让我给你一个推导,使编写代码更容易。它来自朱迪亚珍珠。我对此有点挣扎,但在我意识到 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 代表假设)只是您发现某事为真的次数除以您发现某事不属实的次数。所以,假设每天有一万间房子被抢劫。这意味着您有 1/10,000 的机会被抢劫,而无需考虑任何其他证据。

下一个是测量您正在查看的证据。当你的问题是真的时看到你看到的证据的概率除以当你的问题不是真的时看到你看到的证据的概率是多少。假设您听到防盗警报响起。当它应该响起时(有人在闹钟响起时打开窗户)与不应该响起的时候(风把闹钟关掉),你多久收到一次闹钟。如果您有 95% 的机会让窃贼触发警报,并且有 1% 的机会触发其他东西触发警报,那么您的可能性为 95.0。

您的总体信念只是可能性 * 先验几率。在这种情况下,它是:

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

我不知道这是否使它更清楚,但是拥有一些跟踪先前赔率的代码、查看可能性的其他代码以及组合这些信息的另一段代码往往更容易。

于 2011-03-25T17:06:27.910 回答
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'))
于 2012-12-30T21:25:29.567 回答
2

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

Pr(A) : A 的先验概率

于 2009-12-29T12:02:32.770 回答
1

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

查看维基百科了解详情。

于 2009-12-29T12:02:08.947 回答
1

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

于 2009-12-29T12:03:18.277 回答
1

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

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

于 2009-12-29T12:09:40.153 回答
0

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

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

在这种情况下: Pr(A | B) 是您要找出的内容,即: 鉴于您有某些症状,您出现 XYZ 的概率。

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

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

Pr(B | A) 是您从互联网上查到的,即: 鉴于您患有疾病,出现症状的概率。

于 2017-04-03T06:40:57.980 回答