朴素贝叶斯算法(带例题解释)

朴素贝叶斯算法(Naive Bayesian algorithm) 是应用最为广泛的分类算法之一,在垃圾邮件分类等场景展露出了非常优秀的性能。

朴素贝叶斯公式来历

朴素贝叶斯,名字中的朴素二字就代表着该算法对概率事件做了很大的简化,简化内容就是各个要素之间是相互独立的。
比如今天刮风和气温低,两个要素导致了不下雨的结果。实际上刮风可能导致气温低,而且刮风对于天晴的影响会更大,朴素贝叶斯认为刮风和气温之间相互独立,且对于是否下雨这个结果的影响没有轻重之分。用公式来表示这种独立性就是:
在这里插入图片描述
在介绍朴素贝叶斯公式前,先介绍一下条件概率公式。条件概率表示在B已经发生的条件下,A发生概率。
在这里插入图片描述
朴素贝叶斯公式就是条件概率的变形。
假设已有数据为
在这里插入图片描述
其中x为属性值,y为分类结果,共有n个已有数据。每个x有多种属性,以第一组数据为例,上标表示第几个属性值,x的具体表示如下
在这里插入图片描述
假设y的可取值为(c1,c2,…,ck)
则贝叶斯公式表示为
在这里插入图片描述
由公式可以看出,贝叶斯公式就是条件概率的公式。贝叶斯公式的解释很简单:在已有数据的基础上,出现了一个新数据,只有X=(a1,a2,…,am),来预测y的取值。贝叶斯公式就是求在目前X发生的情况下,y取不同值的概率大小进行排序,取最大概率的y值。
其中X有多个属性,朴素贝叶斯假设各个属性之间是独立的,因此
在这里插入图片描述
因此朴素贝叶斯公式可以写成
在这里插入图片描述
此公式的含义就是在目前已知历史数据数据的前提下,出现了一个新的X,求在X已经发生的条件下,y取不同值的概率,然后取使得条件概率最大的y作为预测结果。也就是说寻找y的取值Cn,使得上式最大,用公式表示就是
在这里插入图片描述
这里可以看出,不论求y取任何值Ci的概率,分母都不变,为P(x=X),因此该公式可以简化为:(正因为将P(x=X)省略了,所以我就没有将P(x=X)写成全概率公式的样子)
在这里插入图片描述
其中P(y=Cn)是指y取Cn的值的数量占所有y值数量的百分比;P(xi=ai|y=Cn)表示在y取值为Cn的条件下,xi=ai的条件概率。公式表示如下:(I()函数表示当括号内的条件成立时,记为1。)
在这里插入图片描述
在这里插入图片描述
到这里,朴素贝叶斯的基础原理就完了。顺便提一下生成模型和判别模型吧。大家可以看到,朴素贝叶斯算法在进行判断时,每次都要用到历史数据,在求得概率分布的情况下再对新数据预测,这就是生成模型。什么是判别模型呢,简单的说就是像神经网络算法那种,训练完将各种权重保存起来,有了新数据直接使用权重带入进行计算,最后得出判别结果。这只是顺带提了一句,让读着有个大概的认识,语言并不是很严谨,如果读着想了解更多,请寻找相关的专业介绍生成和判别模型的文章。

举例1

这里使用了《统计学习方法-李航》里的例子。
历史数据为
在这里插入图片描述
x是二维向量,第一维度可取值(1,2,3),第二维度可取值(S,M,L),y可取值(-1,1)。目前有一个新数据x(2,S),使用朴素贝叶斯算法确定y的取值。
解:
目标是比较在数据x(2,S)下,不同y值的条件概率,也就是求P(y=1|x=(2,S))和P(y=-1|x=(2,S))的大小。
在这里插入图片描述
由此公式可知,分母相同,只需要对比分子的大小。
在这里插入图片描述
注意:
P(x1=2|y=1)=3/9数错了,不好意思。图片不方便改,望知悉。

在这里插入图片描述
所以y的取值是-1

原始朴素贝叶斯公式的问题

大家在解例子的时候有没有发现一个问题,假如

在这里插入图片描述
标红框的连乘中有一项为0,也就是说在y取值为Cn的条件下,ai的值没有出现过,所以P(x=X|y=Cn)=0,也就是说y取Cn的可能性为0,与实际不符。很明显这种情况产生了严重的偏差。
为了纠正这种情况产生的偏差,对等式右边的概率计算进行了改进

  1. 先验概率改进计算公式:
    在这里插入图片描述
    式中λ>=0,K是y可取值的总数。当λ=0时,和原来的公式一样,当λ=1时称为拉普拉斯平滑(这个名词的背后历史就不提了,λ尝取的值就是1)。
    不难看出有如下规律
    在这里插入图片描述
    说明Pλ也是一种概率分布,既解决了某些值概率可能为0的问题,又基本符合原来的概率分布。
    2. 条件概率改进计算公式
    在这里插入图片描述
    同样的,λ>=0,Sj表示x第j个维度可取值的总数。同样的对于Pλ(xj=aj|y=Cn)也是一种概率分布,近似代表着改进之前的概率分布。
    有了改进后的先验概率和条件概率的公式,便可以解决了单一条件概率为0时,判断不准确的问题。

举例2

对于例子1,使用拉普拉斯平滑后的概率计算公式来预测。我把题目复制一下,虽然看着累赘,省的回去一直翻着看。
历史数据为
在这里插入图片描述
x是二维向量,第一维度可取值(1,2,3),第二维度可取值(S,M,L),y可取值(-1,1)。目前有一个新数据x(2,S),使用朴素贝叶斯算法确定y的取值。
解:
在这里插入图片描述
在这里插入图片描述
因此可以看出y=-1的概率更大,因此预测结果为-1。这个结果与例子1的结果相同。
本文主要参考了《统计学习方法》这本书,只希望把学习结果能分享给对的人,总结的内容比较浅显简单。

  • 40
    点赞
  • 246
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
好的,让我给你讲一下朴素叶斯算法在打网球例题中的应用。 假设我们有一个数据集,其中包含有天气情况和是否打网球的记录,如下表所示: | 天气 | 气温 | 湿度 | 是否打网球 | | --- | --- | --- | --- | | 晴 | 热 | 高 | 否 | | 晴 | 热 | 高 | 否 | | 多云 | 热 | 高 | 是 | | 雨 | 温 | 高 | 是 | | 雨 | 凉 | 正常 | 是 | | 雨 | 凉 | 正常 | 否 | | 多云 | 凉 | 正常 | 是 | | 晴 | 温 | 高 | 否 | | 晴 | 凉 | 正常 | 是 | | 雨 | 温 | 正常 | 是 | | 晴 | 温 | 正常 | 是 | | 多云 | 温 | 高 | 是 | | 多云 | 热 | 正常 | 是 | | 雨 | 温 | 高 | 否 | 现在我们想要预测在某一天的特定天气情况下是否会打网球。我们可以使用朴素叶斯算法来解决这个问题。 首先,我们需要对数据集进行处理,将其转换为可以用于朴素叶斯算法的格式。具体来说,我们需要将每个属性值转换为数字,并将其保存为一个向量。例如,将天气情况转换为数字后,我们就可以得到以下向量: 晴:[1, 0, 0] 多云:[0, 1, 0] 雨:[0, 0, 1] 接下来,我们需要计算在给定的天气情况下打网球的概率。我们可以使用朴素叶斯算法中的条件概率公式来计算这个概率: P(PlayTennis=Yes | Weather) = P(Weather | PlayTennis=Yes) * P(PlayTennis=Yes) / P(Weather) 其中,P(PlayTennis=Yes) 是打网球的概率,P(Weather | PlayTennis=Yes) 是在打网球的情况下出现某种天气情况的概率,P(Weather) 是出现某种天气情况的概率。 为了计算这些概率,我们需要使用训练数据集计算先验概率和条件概率。具体来说,我们可以使用以下公式来计算这些概率: P(PlayTennis=Yes) = Number of Yes / Total Number of Records P(Weather = Sunny | PlayTennis=Yes) = Number of Sunny and Yes / Number of Yes P(Weather = Overcast | PlayTennis=Yes) = Number of Overcast and Yes / Number of Yes P(Weather = Rainy | PlayTennis=Yes) = Number of Rainy and Yes / Number of Yes P(Weather = Sunny | PlayTennis=No) = Number of Sunny and No / Number of No P(Weather = Overcast | PlayTennis=No) = Number of Overcast and No / Number of No P(Weather = Rainy | PlayTennis=No) = Number of Rainy and No / Number of No 其中,Number of Yes 和 Number of No 分别表示打网球和不打网球的记录数目,Number of Sunny and Yes 表示在打网球的情况下出现晴天的记录数目,Number of Sunny and No 表示在不打网球的情况下出现晴天的记录数目,以此类推。 最后,我们可以使用上述公式计算在给定的天气情况下打网球的概率,并根据这个概率来预测是否会打网球。 以上就是朴素叶斯算法在打网球例题中的应用。希望能对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值