朴素贝叶斯

Posted 努力的孔子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了朴素贝叶斯相关的知识,希望对你有一定的参考价值。

数学基础

朴素贝叶斯的数学理论非常简单,俩公式,三板斧

条件概率

 

贝叶斯定理,也叫贝叶斯公式,由条件概率直接推出

三板斧,先有P(A),称为先验概率,再有P(A|B),称为似然性,最终得到P(B|A),称为后验概率

先验概率:通过经验来判断事情发生的概率,比如说“贝叶死”的发病率是万分之一,就是先验概率。
后验概率:后验概率就是发生结果之后,推测原因的概率。比如说某人查出来了患有“贝叶死”,那么患病的原因可能是 A、B 或 C。**患有“贝叶死”是因为原因 A 的概率就是后验概率。**它是属于条件概率的一种

 

模型原理

朴素贝叶斯是一个分类模型,

假设有N个样本 Xi = [x1,x2,...xd],每个样本有 d 个属性,m个类别为 cm,那么朴素贝叶斯就是计算 P(cm|X),然后取 最大的 P 即可

 

模型假设

在计算 P(cm|X) 时,需要计算 P(X|cm) = P([xi]|cm),显然这是一个联合概率分布,在d很大时,联合概率分布的计算是非常麻烦的,甚至是不可能的;

 

为了简化这一步的运算,模型假设 xi 之间相互独立,即属性之间是完全独立事件,此时 P(AB)=P(A)P(B),于是 P(cm|X)可以很容易计算出来

 

这个假设也是 为什么 朴素贝叶斯 叫 朴素 的原因

 

计算实例 

现有训练数据如下

当 c = 嫁时,P(c) = 6/12 = 1/2 ;

 

 

具体就不算了,但是我们发现,分母上是一个固定值,对所有样本都一样,故可取消 ;

于是朴素贝叶斯模型变成

 

拉普拉斯平滑

接着上面的例子讲,如果有个人 不帅,性格不好,不上进,身高=中,显然是不可以嫁的,

但照上面的公式计算

P(嫁|不帅,性格不好,中,不上进) > 0

P(不嫁|不帅,性格不好,中,不上进) = 0

结果却是嫁,显然不对;

 

原因是 不嫁 类中 身高的属性 没有 取值为 中的,故 P(中|不嫁)=0,导致 P(不帅,性格不好,中,不上进|不嫁) = 0;

为了避免这种问题发生,采用 拉普拉斯平滑 进行修正,具体操作如下

假设 N 表示类别数,Ni 表示第 i 个属性的可能取值数

 

这个思想在很多其他地方也有应用

 

连续属性的处理

上面的理论和例子都是针对离散属性的,但 朴素贝叶斯 也适用于连续属性,只需在计算概率时采用概率密度即可;

如高斯分布

 

连续属性和离散属性可以同时存在 

 

不同场景下的应用策略

预训练:适用场景预测频率较高,响应较快;具体策略是根据训练数据计算所有概率,事先存储起来,预测时查表即可

惰性训练:适用场景为动态训练数据,比如训练数据为从当天开始过去三个月的历史数据;具体策略是在收到预测请求时,临时训练,再预测

增量学习:适用场景训练数据不断增加;具体策略为计算并存储已经存在的训练数据的相关统计量,收到新的训练样本后修正该统计量

 

模型进阶

生成式模型

所有的机器学习模型本质上都是在计算 P(c|X),但现实中这个概率往往很难获得,于是形成了两种策略:

给定 x,直接通过建模来预测 c,如决策树、神经网络等,这样得到的是 判别式模型;

通过 各种方式 来计算不同类别的 先验概率分布,从而得到每个类别的后验概率,这样得到的是 生成式模型;

朴素贝叶斯就属于 生成式模型;

 

判别式模型举例:要确定一个羊是山羊还是绵羊,用判别模型的方法是从历史数据中学习到模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,是绵羊的概率。
生成式模型举例:利用生成模型是根据山羊的特征首先学习出一个山羊的模型,然后根据绵羊的特征学习出一个绵羊的模型,然后从这只羊中提取特征,放到山羊模型中看概率是多少,在放到绵羊模型中看概率是多少,哪个大就是哪个。

 

贝叶斯深度学习

贝叶斯是统计概率学派的代表,几乎可以认为 概率=贝叶斯,那贝叶斯深度学习是什么呢?

其实贝叶斯深度学习很早就提出了,一直在演变过程中,简单介绍下:

我们知道传统的神经网络或者深度学习 可 表达为 f(wx+b),这里 w b 都是 固定值,而 贝叶斯深度学习就是把 w b 改成了概率,类似下图

 

贝叶斯深度学习的难点是如何训练和预测呢?可以采用 蒙特卡罗 思想,有兴趣的可以深入研究下

 

 

 

参考资料:

https://blog.csdn.net/qq_31073871/article/details/81077386  条件概率/全概率/贝叶斯公式

https://www.zhihu.com/question/29155526  如何形象地理解条件概率及运算公式?

https://www.zhihu.com/question/51448623/answer/747656479  怎么简单理解贝叶斯公式?

https://www.cnblogs.com/wuliytTaotao/p/10281766.html  贝叶斯深度学习(bayesian deep learning)

https://www.zhihu.com/question/352295592  贝叶斯深度学习是什么,和传统神经网络有何不同?

周志华 《机器学习》

以上是关于朴素贝叶斯的主要内容,如果未能解决你的问题,请参考以下文章

干货 | 朴素贝叶斯python代码实现

机器学习:贝叶斯分类器——高斯朴素贝叶斯分类器代码实现

朴素贝叶斯分类算法介绍及python代码实现案例

朴素贝叶斯并不朴素

利用朴素贝叶斯算法进行分类-Java代码实现

朴素贝叶斯代码实现python