朴素贝叶斯

1、定义:

有些时间的概率事先是不知道的,但可以根据手上的资料和相应的经验来估计其发生的概率,这样的概率称为先验概率;如果是通过手上资料得到的,则称为客观先验概率,如果是通过经验(依规律总结)确定的概率,则称为主观先验概率。与先验概率相对应的就是后验概率,后验是通过贝叶斯公式和调查,对原先的先验概率进行修正,得到的更加准确的概率。

如何确定后验概率?用朴素贝叶斯

2、公式

P ( A ∣ B ) = P ( A ) P ( B ∣ A ) P ( B ) P(A \mid B)=\frac{P(A) P(B \mid A)}{P(B)} P(AB)=P(B)P(A)P(BA)
其中 P ( A ∣ B ) P(A \mid B) P(AB)表示B已经发生时A发生的概率, P ( A ) P(A) P(A)表示没有前提条件时A发生的概率。
朴素是一种假设:“所有的特征都是独立的”。
朴素贝叶斯是基于概率思想的分类模型,根据某特征的先验概率,利用贝叶斯公式计算出其后验概率,然后选择具有最大后验概率的类作为该特征所属的类。“朴素”在于假设:所有的特征之间是统计独立的P(A,B)=P(A)P(B)。

3、要素

P(A)称为“先验概率”,即在B事件发生之前,我们对A事件概率的一个判断;
P(A|B)称为“后验概率”,即在B发生之后,我们对A时间概率的重新评估;
P(B|A)P(B)称为“可能性函数”,这是一个调整因子,使得预估概率更接近真实概率。

所以条件概率可以理解为:后验概率=先验概率*调整因子

4、引例

假设有两个各装了100个球的箱子,甲箱子中有70个红球,30个绿球,乙箱子中有30个红球,70个绿球。假设随机选择其中一个箱子,从中拿出一个球记下球色再放回原箱子,如此重复12次,记录得到8次红球,4次绿球。求解下一次选择的箱子是甲箱子的概率。

(思考:若两个箱子完全一样,无论哪次取,取的球来自甲箱子概率都是1/2,但根据12次取球的规律,猜想取球人是否有某种偏好?如:更倾向于甲箱子。)

1、在初始状态下,甲和乙一样,先验概率:都是0.5。
P(A)=0.5,P(B)=0.5
在取出一个球是红球的情况下,更新先验概率。(后验概率=先验概率*调整因子)

P ( 甲 ∣ 红 球 1 ) = P ( 红 球 ∣ 甲 ) P ( 甲 ) P ( 红 球 ) P(甲 \mid 红球1)=\frac{ P(红球 \mid 甲)P(甲)}{P(红球)} P(1)=P()P()P()
P ( 甲 ∣ 红 球 1 ) = P ( 红 球 ∣ 甲 ) P ( 甲 ) P ( 红 球 ∣ 甲 ) P ( 甲 ) + P ( 红 球 ∣ 乙 ) P ( 乙 ) P(甲 \mid 红球1)=\frac{ P(红球 \mid 甲)P(甲)}{P(红球 \mid 甲)P(甲)+P(红球 \mid 乙)P(乙)} P(1)=P()P()+P()P()P()P()
因此,出现一个红球情况下,选择的是甲箱子的先验概率会被修正为:
P(甲|红球1) = 0.7 × 0.5 / (0.7 × 0.5 + 0.3 × 0.5) = 0.7
即在出现一个红球之后,甲乙箱子被选中的先验概率就被修正为:
P(甲) = 0.7, P(乙) = 1 - P(甲) = 0.3;

2、继续取球,当前已经取了一个球是红球了,P(甲) = 0.7, P(乙) = 0.3;若又取得1红球,则继续使用朴素贝叶斯调整先验概率(此时的先验概率是:P(甲) = 0.7, P(乙) = 0.3):
P ( 甲 ∣ 红 球 2 ) = P ( 红 球 ∣ 甲 ) P ( 甲 ) P ( 红 球 ) P(甲 \mid 红球2)=\frac{ P(红球 \mid 甲)P(甲)}{P(红球)} P(2)=P()P()P()
P ( 甲 ∣ 红 球 2 ) = P ( 红 球 ∣ 甲 ) P ( 甲 ) P ( 红 球 ∣ 甲 ) P ( 甲 ) + P ( 红 球 ∣ 乙 ) P ( 乙 ) P(甲 \mid 红球2)=\frac{ P(红球 \mid 甲)P(甲)}{P(红球 \mid 甲)P(甲)+P(红球 \mid 乙)P(乙)} P(2)=P()P()+P()P()P()P()
因此,第二个球为红球情况下,选择的是甲箱子的先验概率会被修正为:
P(甲|红球2) = 0.7 × 0.7 / (0.7 × 0.7 + 0.3 × 0.3) =0.84482
即在出现一个红球之后,甲乙箱子被选中的先验概率就被修正为:
P(甲) = 0.84482, P(乙) = 1 - P(甲) = 0.155172;

3、继续使用贝叶斯,经历8次红球修正,四次绿球修正,先验概率被调整为:
P(甲) = 0.967
4、python代码:

def bayesianfunc(pIsBox1, pBox1, pBox2): #pIsBox1表示为甲箱,pBox1/2表示甲/乙箱中的信息
    return ((pIsBox1 * pBox1)/(pBox1 * pIsBox1 + pBox2*(1 - pIsBox1)))
    
def RedGreenBallproblem():
    pIsBox1 = 0.5
#对pIsBox1进行8次红球修正
    for i in range(1,9):
        pIsBox1 = bayesianfunc(pIsBox1, 0.7, 0.3)
        print ("拿到 %d 个球是红球,则选择的箱子是甲箱的概率为:%f" %(i, pIsBox1))
 #对pIsBox1进行4次绿球修正
    for i in range(1,5):
        pIsBox1 = bayesianfunc(pIsBox1, 0.3, 0.7)
        print ("拿到 %d 个球是绿球,则选择的箱子是甲箱的概率为:%f" %(i, pIsBox1))

RedGreenBallproblem()
'''
拿到 1 个球是红球,则选择的箱子是甲箱的概率为:0.700000
拿到 2 个球是红球,则选择的箱子是甲箱的概率为:0.844828
拿到 3 个球是红球,则选择的箱子是甲箱的概率为:0.927027
拿到 4 个球是红球,则选择的箱子是甲箱的概率为:0.967365
拿到 5 个球是红球,则选择的箱子是甲箱的概率为:0.985748
拿到 6 个球是红球,则选择的箱子是甲箱的概率为:0.993842
拿到 7 个球是红球,则选择的箱子是甲箱的概率为:0.997351
拿到 8 个球是红球,则选择的箱子是甲箱的概率为:0.998863
拿到 1 个球是绿球,则选择的箱子是甲箱的概率为:0.997351
拿到 2 个球是绿球,则选择的箱子是甲箱的概率为:0.993842
拿到 3 个球是绿球,则选择的箱子是甲箱的概率为:0.985748
拿到 4 个球是绿球,则选择的箱子是甲箱的概率为:0.967365
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值