文章目录

  • 1、概率基础
    • 1.1 随机事件
    • 1.2 样本空间
    • 1.3 概率
    • 1.4 联合概率
    • 1.5 条件概率
    • 1.6 独立性
    • 1.7 先验概率与后验概率
  • 2、 全概率公式
  • 3、贝叶斯公式
  • 4、 朴素贝叶斯算法
    • 4.1 算法原理
    • 4.2 平滑改进
    • 4.3 算法优点
  • 5、 常用朴素贝叶斯
    • 5.1 高斯朴素贝叶斯(连续变量&高斯分布)
    • 5.2 伯努利朴素贝叶斯(离散变量&伯努利分布)
    • 5.3 多项式朴素贝叶斯(离散变量&多项式分布)
1、概率基础
1.1 随机事件
  • 随机事件,指可能发生,也可能不发生的事件。
  • 例如,当我们抛硬币时,设出现正面为事件A,则事件A可能发生,也可能不发生。
1.2 样本空间
  • 样本空间,即我们进行随机试验时,所有可能结果构成的集合,习惯使用S表示。
1.3 概率
  • 概率,用来反映一个随机事件出现的可能性大小,习惯使用 P(A)来表示事件A的概率。

1.4 联合概率
  • 联合概率,指多个事件同时发生的概率,例如, P(AB) 表示事件A与事件B的联合概率。
1.5 条件概率
  • 条件概率,指在事件A发生的前提下,事件B发生的概率,使用 P(B|A)表示。

  • 关于条件概率,有以下一个重要的定义:

  • 需要注意的是,P(B|A) 与 P(B) 是不同的,二者很可能也不相等。因为在事件A发生的前提下,会导致样本空间的收缩,从而会改变概率。

1.6 独立性
  • 如果两事件A、B, 满足 P(AB) = P(A)P(B) 则称A与B相互独立。
  • 因为 P(AB) = P(A)P(B|A),所以当两事件A,B独立时:P(B|A) = P(B)。
  • 当两个事件独立时,一个事件发生与否,对另外一个事件完全没有任何影响。
1.7 先验概率与后验概率
  • 由以往的数据分析而得到的概率,称为先验概率。
  • 当得到某些信息后,在先验概率的基础上进行修正,从而得到的概率,称为后验概率。
2、 全概率公式
  • 设实验的样本空间为S, A为E的事件,B1 ,B2 ,…,Bn 为S的一个划分(任意两个事件交集为空,所以事件并集为整个样本空间S),且P(Bi) > 0(i=1,2,…,n ),则以下式子称为全概率公式:

  • 有的时候, P(A) 可能不易求出,但是,我们可以在S上寻找一个划分(i=1,2,……),并且 Bi与P(A|Bi) 的概率容易获取,这样,我们就可以使用全概率公式来求解P(A)。

例子:假设张三逃课的概率是0.4,当张三逃课时李四逃课的概率是0.5,当张三上课时李四逃课的概率是0.3,那么李四逃课的概率是多少呢?
这种情况直接求李四逃课的概率不好求,就可以利用全概率公式进行求解:P(李四逃课)= 0.4 x 0.5 + 0.6 x 0.3

3、贝叶斯公式
  • 设实验的样本空间为S, A为E的事件,B1 ,B2 ,…,Bn 为S的一个划分(任意两个事件交集为空,所以事件并集为整个样本空间S),且P(A) > 0 ,P(Bi) >0 (i=1,2,…,n ),则以下式子称为贝叶斯公式:

  • 贝叶斯公式的核心思维就是将求解 P(B|A) 的概率转换成求解 P(A|B) 的概率。有时候,求解P(B|A)难度较大,但是求解P(A|B)比较容易,在这样的情况下,我们就可以考虑应用贝叶斯公式进行转换,从而解决问题。

例子: 对以往数据分析结果表明,当机器调整得良好时,产品的合格率是为98%,而当机器发生某种故障时,其合格率为55%。每天早上机器开动时,机器调整良好的概率为95%。试求已知某日早上第一件产品是合格品时,机器调整良好的概率是多少?

设A为事件“产品合格”,B 为事件“机器调整良好”, ~B 为事件“机器发生故障” ,则P(B|A)即为在第一件产品合格下机器调整良好的概率,根据贝叶斯公式可将其转化为以B条件下A发生的概率进行求解,结合全概率公式即可得出答案:

这个例子中, 95%是由以往的数据分析而得到的概率 ,即为先验概率;而97%是在得知第一件产品是合格品时得到的概率,即为后验概率。

4、 朴素贝叶斯算法
  • 朴素贝叶斯算法是基于概率的分类算法,之所以称为“朴素”,是因为其假设特征之间是独立的, 且对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。
  • 朴素贝叶斯算法设计比较简单,实际上使用的就是全概率公式与贝叶斯公式。
4.1 算法原理

(1)假设 x = {x1,x2,…,xn}为一个待分类项,x含有n个特征属性。

(2)假设类别集合 y={y1,y2,…,yn}

(3)想要预测待分类项x所属的类别y,则只需要计算x属于每个类别 y 的概率是多少,预测结果就是概率最大的那个类别,即我们要计算:

然而,有时候以上的概率我们并不容易求解,不过,根据贝叶斯公式,我们可以进行如下的转换:

(4) 因为朴素贝叶斯算法的前提假设为各个特征之间都是独立的,则 P(x1…xn) = P(x1)…P(xn),因此有:

(5)将(2)代入(1)式,可得:

(6)因为分母部分不变,所以比较概率的大小,只需要比较分子部分就可以了,则算法最终预测的类别,就是能够使得分子部分最大的那个类别,即 :

(7)若要预测样本的类别,只需要求解P(y)与P(xi| y)即可,而这两个概率,都可以从训练集中获取。

4.2 平滑改进
  • 由于在计算p(xi|y)时,是各个概率的乘积,因此,一旦有一个概率为0,即使其他的概率值较大,也一律会得到0值。这会严重影响预测的准确性,为了避免这种情况的发生,我们在计算概率时,采用平滑改进:

其中,k 为特征xi可能的取值数, α(α>0 )称为平滑系数,当α=1时,称为拉普拉斯平滑(Laplace smoothing),当α<1时,称为Lidstone smoothing平滑。

4.3 算法优点
  • 即使训练集数据较少,也能够实现预测,并且效果不错。
  • 算法的训练速度非常快,因为算法假设特征之间是独立的,这意味着每个特征可以单独当成一维分布而进行评估,无需考虑与其他特征之间的关联性。

举个栗子:假设某学生上课和逃课情况如下,请根据以下数据算出第11和12条记录属于上课还是逃课?

序号 天气(X1) 上课距离(X2) 学生成绩(X3) 课程类别(X4) 上课情况(Y)
1 选修 逃课
2 必修 上课
3 必修 上课
4 选修 逃课
5 选修 上课
6 必修 上课
7 选修 逃课
8 必修 上课
9 必修 逃课
10 选修 逃课
11 选修
12 选修

根据朴素贝叶斯算法,想要预测这两条记录所属的类别,则只需要计算出X属于每个类别Y的概率是多少,预测结果就是概率最大的那个类别。

(1)对于第11条记录,我们就可以分别计算在上课与逃课的情况下,各自的概率值是多少:

从以上结果可以看出,学生逃课的概率大于上课的概率,则预测结果为逃课。(注意此处计算出来的上课和逃课的概率之和不为1是因为省略了分母,只计算了分子)

(2)对于第12条记录,因为 P(xi = 远 | y = 上课)的值为0,所以需要对数据 采用平滑改进处理,其余计算方式和第11条记录相同。

5、 常用朴素贝叶斯
  • 在sklearn中,提供了若干种朴素贝叶斯的实现算法,不同的朴素贝叶斯算法,主要是对 P(xi | y) 的分布假设不同,进而采用不同的参数估计方式。
  • 常用的三种朴素贝叶斯为:高斯朴素贝叶斯,伯努利朴素贝叶斯,多项式朴素贝叶斯。
5.1 高斯朴素贝叶斯(连续变量&高斯分布)
  • 高斯朴素贝叶斯,适用于连续变量。其假定各个特征xi在各个类别y下是服从高斯分布(正态分布),算法内部使用正态分布的概率密度函数来计算概率P(xi | y),如下:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNBX, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
model = GaussianNB()
model.fit(X_train, y_train)
print("高斯朴素贝叶斯:",model.score(X_test, y_test))
--------------------------------------------------
高斯朴素贝叶斯: 1.0
5.2 伯努利朴素贝叶斯(离散变量&伯努利分布)
  • 设实验E只有两个可能的结果: A与非A,则称E为伯努利实验。

  • 伯努利朴素贝叶斯,适用于离散变量,其假设各个特征xi 在各个类别y下是服从n 重伯努利分布(二项分布)的,因为伯努利试验仅有两个结果,因此,算法会首先对特征值进行二值化处理(假设二值化的结果为1与0)。
    P(xi | y)计算方式如下:

在训练集中,会进行如下的估计:

因为在数据集中,只有两种取值(1与0),因此,对于给定的类别与特征,只需要计算P(xi =1 | y)就可以了,而P(xi = 0 | y)的概率,用1减去P(xi =1 | y)即可得出。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import BernoulliNBX, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
model = BernoulliNB()
model.fit(X_train, y_train)
print("伯努利朴素贝叶斯:",model.score(X_test, y_test))
-------------------------------------------------------
伯努利朴素贝叶斯: 0.23684210526315788
5.3 多项式朴素贝叶斯(离散变量&多项式分布)
  • 多项式朴素贝叶斯,适用于离散变量,其假设各个特征xi在各个类别y下是服从多项式分布的,故每个特征值不能是负数。
    P(xi | y)计算如下:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNBX, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
model = MultinomialNB()
model.fit(X_train, y_train)
print("多项式朴素贝叶斯:",model.score(X_test, y_test))
---------------------------------------------------
多项式朴素贝叶斯: 0.5789473684210527

python数据分析之朴素贝叶斯实践相关推荐

  1. Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报 分类: 机器学习(19) 听说

    Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报  分类: 机器学习(19)  听说朴 ...

  2. Python+sklearn使用朴素贝叶斯算法识别中文垃圾邮件

    总体思路与步骤: 1.从电子邮箱中收集垃圾和非垃圾邮件训练集. 2.读取全部训练集,删除其中的干扰字符,例如[]*..,等等,然后分词,删除长度为1的单个字. 3.统计全部训练集中词语的出现次数,截取 ...

  3. 【数据科学系统学习】机器学习算法 # 西瓜书学习记录 [6] 朴素贝叶斯实践

    本篇内容为<机器学习实战>第 4 章 基于概率论的分类方法:朴素贝叶斯程序清单.所用代码为 python3. 朴素贝叶斯 优点:在数据较少的情况下仍然有效,可以处理多类别问题. 缺点:对于 ...

  4. python推荐系统算法朴素贝叶斯_机器学习经典算法之朴素贝叶斯分类

    很多人都听说过贝叶斯原理,在哪听说过?基本上是在学概率统计的时候知道的.有些人可能会说,我记不住这些概率论的公式,没关系,我尽量用通俗易懂的语言进行讲解. 贝叶斯原理是英国数学家托马斯·贝叶斯提出的. ...

  5. Python机器学习06——朴素贝叶斯

    本系列所有的代码和数据都可以从陈强老师的个人主页上下载:Python数据程序 参考书目:陈强.机器学习及Python应用. 北京:高等教育出版社, 2021. 本系列基本不讲数学原理,只从代码角度去让 ...

  6. Python自然语言处理—朴素贝叶斯

    一贝叶斯公式 公式很好理解,当我们相求已知状态X下打上ý标签的概率的时候,可以将问题分以下三个问题 1,求标签ÿ下X状态的概率 2,求标签ÿ的概率 3,求X状态的概率 以上三个问题可以简单的统计已知样 ...

  7. python:基于朴素贝叶斯算法的垃圾邮件过滤分类

    目录 一.朴素贝叶斯算法 1.概述 2.推导过程 二.实现垃圾邮件过滤分类 1.垃圾邮件问题背景 2.朴素贝叶斯算法实现垃圾邮件分类的步骤 3.python实现 参考学习网址:https://blog ...

  8. 朴素贝叶斯python代码_朴素贝叶斯模型及python实现

    1 朴素贝叶斯模型 朴素贝叶斯法是基于贝叶斯定理.特征条件独立假设的分类方法.在预测时,对输入x,找出对应后验概率最大的 y 作为预测. NB模型: 输入: 先验概率分布:P(Y=ck),k=1,2, ...

  9. python 机器学习 sklearn 朴素贝叶斯

    首先介绍一个非常好的博主和博客,大家可以去这学习,我收获很大优秀的博客 朴素贝叶斯下面包括三个方法 分别是高斯朴素贝叶斯.多项式朴素贝叶斯.伯努利朴素贝叶斯 这三种方式都有不同的应用场所,比如你要预测 ...

  10. python推荐系统算法朴素贝叶斯_朴素贝叶斯算法在人才盘点中的应用(之一)

    一.识别人才首先是处理不确定性问题 做招聘面试的HR应该会认同这样的经历. 打开应聘者简历,赫然写着TOP10名学毕业.抬头一瞧,小伙长得一表人才,精神抖擞,朝气蓬勃.HR兴趣大增. 再一看,研究方向 ...

最新文章

  1. Linux 性能分析的前 60 秒
  2. mysql日期加减问题
  3. nvidia nvlink互联与nvswitch介绍
  4. Fiori Launchpad etag retrieve logic - UI5 Repository
  5. wordpress安装及使用
  6. web业务系统权限控制
  7. 中文巨量模型“源1.0”的学习优化方法
  8. 实验二Step1-有序顺序表
  9. 阿里技术专家加多:Java异步编程实战之基于JDK中的Future实现异步编程
  10. mysql 5.7 安装_MySQL 5.7 的安装历程
  11. HALCON: HALCON 20.11.0.0 Progress主要新特性
  12. idea 生成sdk_如何安装独立的Android SDK,然后将其添加到Windows上的IntelliJ IDEA?
  13. 2015(4)软件工程,软件运行与维护,新旧系统转换策略,遗留系统的演化策略,数据转换与数据迁移...
  14. 加载中_Spring Boot 2.2 中的延迟加载
  15. 查看linux系统日志某一天,linux系统日志查看
  16. JavaScript 对象的创建与继承——创建篇
  17. Redis主从复制架构初步探索 http://www.sxt.cn/info-1750-u-324.html#SXT_h2_11
  18. 苹果关闭 iOS 14.4.2 系统验证通道
  19. 深耕硬科技,香港科大百万创赛与八大投资机构签署合作意向
  20. APP上架各大应用市场教程:所需材料与注意事项

热门文章

  1. 51单片机程序下载失败原因排查
  2. 中科院2020计算机sci分区,2020年中科院最新SCI分区表.pdf
  3. Redis学习三:设计与实现之单机数据库的实现
  4. 【Java 微信公众号开发】① 介绍、测试号、接入
  5. idea的HttpClient工具,发送post/get请求,可以发送json
  6. html 复选框 不能选,启用或禁用html中的复选框
  7. 简单快速的UG编程入门操作
  8. iOS自带的GPS 定位
  9. 小程序页面调用服务器接口授权,小程序的授权和登陆
  10. python 读取geotiff_python gdal 写GeoTiff文件