我正在开发朴素贝叶斯分类器的实现。 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)
是什么意思?它看起来像某种功能,但管道(“|
”)的含义是什么,等等?
答案 0 :(得分:12)
但以上是关于条件概率的计算。你想要的是一个分类器,它使用这个原理来决定某些东西是否属于基于先前概率的类别。
有关完整示例,请参阅http://en.wikipedia.org/wiki/Naive_Bayes_classifier
答案 1 :(得分:4)
我认为他们已经让你了解了基础知识。
Pr(A | B) = Pr(B | A) x Pr(A)/Pr(B)
读取:给定B的概率与B的概率相同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
我不知道这是否会让它变得更加清晰,但是更容易让一些代码跟踪先前的赔率,其他代码可以查看可能性,还有一段代码可以合并这些信息
答案 2 :(得分: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'))
答案 3 :(得分:2)
Pr(A | B):A的条件概率:即A的概率,假设我们所知道的都是B
Pr(A):A的先验概率
答案 4 :(得分:1)
Pr是概率,Pr(A | B)是条件概率。
答案 5 :(得分:1)
管道(|)表示“给定”。 给定B的概率等于给定A×Pr(A)/ Pr(B)
的B的概率答案 6 :(得分:1)
根据您的问题,我可以强烈建议您首先阅读一些关于概率论的本科书。如果没有这个,你就无法在朴素贝叶斯分类器上正确地完成任务。
我会向您推荐这本书http://www.athenasc.com/probbook.html或查看MIT OpenCourseWare。
答案 7 :(得分:0)
管道用于表示条件概率。 Pr(A | B)=给定B的概率
实施例: 让我们说你感觉不舒服,你在网上冲浪了症状。互联网告诉你,如果你有这些症状,那么你有XYZ疾病。
在这种情况下: Pr(A | B)是你想要找到的,它是: 您有XYZ的可能性,因为您有某些症状。
Pr(A)是患有疾病XYZ的可能性
Pr(B)是出现这些症状的可能性
Pr(B | A)是你从互联网上找到的,它是: 出现症状的可能性给您带来了疾病。