经典机器学习模型——朴素贝叶斯(Navie Bayes)

  |   0 评论   |   1,903 浏览

贝叶斯公式

公式

image.png

其中:

  • P(y):没有数据支持下,y发生的概率:先验概率。

  • P(y|x):在数据x的支持下,y发生的概率:后验概率。

  • P(x|y):给定某参数y的概率分布:似然函数。

分析

条件概率:后验概率 = 先验概率 * 调整因子

P(x|y)/P(x)称为”可能性函数“,这是一个调整因子,使得预估概率更接近真实概率。

我们先预估一个”先验概率“,然后加入实验结果,看这个实验到底是增强还是消弱了”先验概率“,由此得到更接近事实的”后验概率“。

用途

如果”可能性函数“P(x|y)/P(x)>1,意味着”先验概率“增强,事件y的发生的可能性变大

如果”可能性函数“P(x|y)/P(x)=1,意味着x事件无助于事件y的可能性;

如果”可能性函数“P(x|y)/P(x)<1,意味着”先验概率“被消弱,事件y发生的可能性变小。

推导

由联合概率公式

P(x ∩y)=P(x | y)P(y)

P(x ∩y)=P(y | x)P(x)

等式连接

P(x | y)P(y)=P(y | x)P(x)

P(x | y)=P(y | x)P(x) / P(y)

贝叶斯公式的应用

步枪问题

  • 8支步枪中有5支已校准过, 3支未校准。

  • 一名射手用校准过的枪射击,中靶概率为0.8;用未校准的枪射击,中靶概率为0.3;

  • 现从8支枪中随机取一支射击,结果中靶。

  • 求该枪是已校准过的概率。

解:

image.png

朴素贝叶斯

假设

  1. 各个特征是相互独立的,各个特征出现与其出现的顺序无关,如对于给定的y,xi之间条件独立

  2. 各个特征地位同等重要

假设保证了下面式子的成立

image.png


上述假设是一个很强的假设,因为在实际中很少会出现完全独立的情况,比如在一片文章中的单词,很可能与前面出现过的单词有关。

但是,重点来了,虽然做了假设,但实际效果却很不错。

打网球问题

问题描述

根据不同的气象情况,决定是否去打网球

image.png

现在有一条新的记录到来,image.png

问现在是否应该去打网球

分析

是一个典型的分类问题,根据给定特征值,分为两类,Yes/No

解题步骤

在14条数据中,共有9条数据是去打,即image.png

将x'表示为某一具体特征的表示形式

P(Yes|x')=P(Yes|(Sunny, Cool, High, Strong))

P(No|x')=P(No|(Sunny, Cool, High, Strong))

再表示为条件概率乘积的形式

P(Yes|x')∝[P(Sunny|Yes)P(Cool|Yes)P(High|Yes)P(Strong|Yes)]

P(No|x')∝[P(Sunny|No)P(Cool|No)P(High|No)P(Strong|No)]

计算相关的条件概率

image.png

由贝叶斯公式知:

P(Yes|x')=2/9 * 3/9 * 3/9 * 3/9 * 9/14≈0.0053,其中9/14是先验概率,即总的Yes的概率

P(No|x')=3/5 * 1/5 * 4/5 * 3/5 * 5/14≈0.0206,其中5/14是先验概率,即总的Yes的概率

比较概率的大小

P(No|x')>P(Yes|x')

特征归一化(normalization)

P(Yes|x')=0.0053/(0.0053 + 0.0206)

P(No|x')=0.0206/(0.0053 + 0.0206)

垃圾邮件分类

描述

假定有数千封标记好的两类邮件:normal、spam,如下图

image.png

现在有一类test邮件,已知文件名长度大于1000的为垃圾邮件,希望利用朴素贝叶斯模型将其分类,并计算正确率

解题思路

确定一个表示方法,将邮件向量化

将邮件分词,假定单词间是独立的,然后表示为所有包含单词的向量形式,如果邮件包含词典中第i个词语,那我们就设置向量第i个位置的元素为1。

image.png

如上所示,说明我们的email中包含a和buy这两个词语并且不包括aardvark、aardwolf和zygmurgy。因此我们的输入参数x是一个n维向量,这个n就是上述词典的大小(n的值可能为几千至上万)。如果我们使用多项式分布,对p(x|y)进行建模,那么所有可能的情况就会有2n种,对应2n−1个参数,这是完全不可想象的。因此我们需要对模型做一个很强的假设:

对于给定的y,xi之间条件独立。

上面的假设称为朴素贝叶斯假设

2.png

对于参数的最大似然估计

根据贝叶斯公式,我们的模型有三个参数:

image.png

可以写出似然函数如下:

image.png

对于参数的最大似然估计为:

image.png

上面的三个参数有很明显的现实意义

  1. ϕj|y=1就代表着在垃圾邮件中,词典中第j个单词出现的比例

  2. ϕy=1是先验概率,代表在所有邮件中,垃圾邮件所占的比例

计算后验概率

有了上面三个参数,我们就可以写出这个垃圾邮件分类器的贝叶斯公式了

image.png

拉普拉斯平滑(Laplace Smoothing)

对于前面的分类器,依赖于单词的词典,如果新的邮件中出现了词典中没有的单词,则会导致参数为0

因此,需要使用拉普拉斯平滑

拉普拉斯平滑的用法非常简单,举个例子:假设国足在过去5场比赛中全部输球,现在我们要预测第六场国足获胜的概率。因此根据我们的样本,国足获胜的概率为

image.png

这显然不是一个很好的预测(而且很不得人心),即使国足再怎么输球,我们也不能预测说下一场国足取胜的概率就是0。因此我们使用拉普拉斯平滑对上面的公式做一个修正:

image.png

这样还算是一个皆大欢喜的结果,虽然可能性很小但不是完全不可能。当然如果目标结果并不是二元值而是k种可能,那么在分母部分只要加上k就好了。个人对拉普拉斯平滑的粗浅理解就是为每种可能的结果预先引入了一个相等的概率,其最终目的还是为了防止过拟合。


读后有收获可以支付宝请作者喝咖啡