第八十七篇 朴素贝叶斯

心得: 还是需要记录一下,自己的学习历程,平时学到的比较杂,在此能全面总结一下自己学到的,看到的,理解的东西。

一、公式原理

  1. 条件概率

    条件概率是指事件A在事件B发生的条件下发生的概率。条件概率表示为:P(A|B),读作“A在B发生的条件下发生的概率”。若只有两个事件A,B,那么,在这里插入图片描述

在这里插入图片描述

  1. 全概率公式(知因求果)
    如图;从家到公司有三条路,选择第一条路的概率为P(L1),选择第一条路且不堵车的概率为P(C|L1)
    在这里插入图片描述
    假设遇到拥堵会迟到,那么从Home到Company不迟到的概率是多少?

    选择每条路都有可能,且不迟到的概率,所以要将所有可能的结果相加,得到最终不迟到的概率:

    P(不迟到) = P(C|L2)+P(C|L2)+P(C|L3)

    全概率公式:

    设事件是一个完备事件组,则对于任意一个事件C,若有如下公式成立:

在这里插入图片描述

  1. 贝叶斯公式(知果求因)

    贝叶斯要解决的问题是:到达公司且不迟到选择第一条路的概率是多少?

    根据贝叶斯公式:

    根据公式得出结果为:
    P(L1|C) = P(L1) P(C|L1)  / P(C)

从此处可以看得出来全概率公式和贝叶斯公式是想通的,全概率公式计算的结果就是把各个路径得到的概率求和;而贝叶斯公式啊计算的结果是:已知最终计算的结果,求某一条路径上的发生的概率是多少

B站中某一博主的截图,诠释的透彻,有兴趣可以去看看:
https://www.bilibili.com/video/BV1a4411B7B4/?spm_id_from=333.788.videocard.0

在这里插入图片描述

二、朴素贝叶斯分类器的公式

假设某个体有n项特征(Feature),分别为F1、F2、…、Fn。现有m个类别(Category),分别为C1、C2、…、Cm。贝叶斯分类器就是计算出概率最大的那个分类,也就是求下面这个算式的最大值:

P(C|F1F2...Fn) = P(F1F2...Fn|C)P(C) / P(F1F2...Fn)

由于 P(F1F2…Fn) 对于所有的类别都是相同的,可以省略,问题就变成了求

P(F1F2...Fn|C)P(C)

的最大值。
朴素贝叶斯分类器则是更进一步,假设所有特征都彼此独立,因此

P(F1F2...Fn|C)P(C) = P(F1|C)P(F2|C) ... P(Fn|C)P(C)

上式等号右边的每一项,都可以从统计资料中得到,由此就可以计算出每个类别对应的概率,从而找出最大概率的那个类。
虽然”所有特征彼此独立”这个假设,在现实中不太可能成立,但是它可以大大简化计算,而且有研究表明对分类结果的准确性影响不大

三、垃圾邮件是如何用贝叶斯方法过滤掉的

现在我们收到一封新邮件,我们假定它是正常邮件和垃圾邮件的概率各是50%。即:

P(正常)= P(垃圾)=50%

然后,对这封新邮件的内容进行解析,发现其中含有“发票”这个词,那么这封邮件属于垃圾邮件的概率提高到多少?其实就是计算一个条件概率,在有“发票”词语的条件下,邮件是垃圾邮件的概率:P(垃圾|发票)。直接计算肯定是无法计算了,这时要用到贝叶斯定理:

在这里插入图片描述

发票的概率为:
在这里插入图片描述
最终概率为:
在这里插入图片描述

这种过滤方法还具有自我学习能力,会根据新收到的邮件,不断调整发票这个词是垃圾邮件的概率和发票是正常邮件的概率。收到的垃圾邮件越多,它的准确率就越高。

四、sklearn中的朴素贝叶斯模型及其应用

  1. 使用朴素贝叶斯模型对iris数据集进行花分类
from sklearn.datasets import load_iris
iris=load_iris()
from sklearn.naive_bayes import BernoulliNB #伯努利型
from sklearn.naive_bayes import GaussianNB #高斯分布型
from sklearn.naive_bayes import MultinomialNB #多项式型

gnb=GaussianNB() #构造
pred=gnb.fit(iris.data,iris.target) #拟合
y_pred=pred.predict(iris.data) #预测

print(iris.data.shape[0],(iris.target !=y_pred).sum()) #iris.target科学家给出的分类,y_pred建模型产生的预测,比较两个有什么不一样,
                                                       #然后将不同的值的个数求出来,150个结果中,有6个和科学家的值不同
  1. 使用sklearn.model_selection.cross_val_score(),对模型进行验证。
from sklearn.naive_bayes import GaussianNB #高斯分布型
from sklearn.model_selection import cross_val_score
gnb=GaussianNB()
scores=cross_val_score(gnb,iris.data,iris.target,cv=10) #将数据集分为10份,其中9份作为训练模型,1份用来做评估
                                                        #score是交叉验证的对象
                                                        #结果是返回准确率的概念,结果是33.3%
print("Accuracy:%.3f"%scores.mean())

结果:
Accuracy:0.953

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值