朴素贝叶斯算法原理

(作者:陈玓玏)

1. 损失函数

假设我们使用0-1损失函数,函数表达式如下:
在这里插入图片描述
YYY为真实值,有c1,c2,...,cK{c_1,c_2,...,c_K}c1,c2,...,cKKKK个类标记,f(X)f(X)f(X)是决策函数,其输出值就是类标记的预测值,那么对应的代价函数,也就是期望损失函数为:
Rexp(X)=E(L(Y,f(X)))R_exp(X) = E(L(Y,f(X)))Rexp(X)=E(L(Y,f(X)))
因为这里的期望是对联合概率取的,所以有如下关系:
Rexp(X)=∑k=1KL(ck,f(X))P(ck,X)=Ex∑k=1KL(ck,f(X))P(ck∣X)R_exp(X) = \sum_{k=1}^{K}L(c_k,f(X))P(c_k,X) = E_x\sum_{k=1}^{K}L(c_k,f(X))P(c_k|X)Rexp(X)=k=1KL(ck,f(X))P(ck,X)=Exk=1KL(ck,f(X))P(ckX)
L(Y,f(X))L(Y,f(X))L(Y,f(X))代入,得到:
Rexp(X)=∑k=1KP(Y≠ck∣X)=∑k=1K(1−P(Y=ck∣X))R_exp(X) = \sum_{k=1}^{K}P(Y \neq c_k|X) = \sum_{k=1}^{K}(1-P(Y=c_k|X))Rexp(X)=k=1KP(Y̸=ckX)=k=1K(1P(Y=ckX))
要让损失函数最小化,只需要和项中的每一项都是最小即可:
min∑k=1K(1−P(Y=ck∣X))=max∑k=1KP(Y=ck∣X)=maxP(Y=ck∣X)min\sum_{k=1}^{K}(1-P(Y=c_k|X)) = max\sum_{k=1}^{K}P(Y=c_k|X) = maxP(Y=c_k|X)mink=1K(1P(Y=ckX))=maxk=1KP(Y=ckX)=maxP(Y=ckX)
这也就是我们之后朴素贝叶斯算法的依据:求得最大后验概率即能最小化代价函数!

2. 求最大化后验概率

基于上面的分析我们知道,对于数据集D=(x1,y1),(x2,y2),...,(xN,yN)D = {(x_1,y_1),(x_2,y_2),...,(x_N,y_N)}D=(x1,y1),(x2,y2),...,(xN,yN),当yiy_iyi的可取值为c1,c2,...,cK{c_1,c_2,...,c_K}c1,c2,...,cK时,我们对每个样本xix_ixi求其对应不同类标记ckc_kck的后验概率值,并选择最后的后验概率值对应的类标号ckc_kck作为样本的分类结果,我们就能以最小的代价函数获得最优的分类。

那么,我们可以根据贝叶斯公式来求后验概率:
P(Y=ck∣X=xi)=P(X=xi∣Y=ck)P(Y=ck)∑k=1KP(X=xi∣Y=ck)P(Y=ck)P(Y=c_k|X=x_i) = \frac{P(X=x_i|Y=c_k)P(Y=c_k)}{\sum_{k=1}^{K}P(X=x_i|Y=c_k)P(Y=c_k)}P(Y=ckX=xi)=k=1KP(X=xiY=ck)P(Y=ck)P(X=xiY=ck)P(Y=ck)
这里有些犯难了,样本xix_ixiJJJ个属性,怎么求得先验概率呢?这时候朴素贝叶斯的优势就体现出来了,朴素贝叶斯和贝叶斯最重要的区别就在于,朴素贝叶斯假设在类确定的条件下,样本的特征之间是相互独立的!因此,上面的公式就可以拆分成以下形式:
P(Y=ck∣X=xi)=P(Y=ck)∏j=1JP(Xj=xij∣Y=ck)∑k=1KP(Y=ck)∏j=1JP(Xj=xij∣Y=ck)P(Y=c_k|X=x_i) = \frac{P(Y=c_k)\prod_{j=1}^{J} P(X^j=x_i^j|Y=c_k)}{\sum_{k=1}^{K}P(Y=c_k)\prod_{j=1}^{J} P(X^j=x_i^j|Y=c_k)}P(Y=ckX=xi)=k=1KP(Y=ck)j=1JP(Xj=xijY=ck)P(Y=ck)j=1JP(Xj=xijY=ck)
因为分母对于同一个样本来说都是一样的,因此我们在具体算法流程中是可以不考虑分母的大小的。

3. 极大似然完成参数估计

在上一小节,我们已经计算好了最大后验概率的公式,但是公式中还有两个重要的部分没有得到解答,一个是类别概率,一个是先验概率,我们通过极大似然估计来完成这两个参数的估计:
在这里插入图片描述
完成先验概率及条件概率的估算后,我们就可以完成后验概率(不需要计算分母)的计算了。针对不同的类标号计算后验概率,计算结果最大的后验概率对应的类标号即为样本对应的类标号。

4. 贝叶斯估计

用极大似然估计的先验概率及条件概率可能出现概率值为0的情况,比如计算先验概率时,发现没有ckc_kck类型的样本,那么先验概率P(Y=ck)P(Y=c_k)P(Y=ck)的估计结果将会为0,那么条件概率P(Xj=ajl∣Y=ck)P(X^j=a_{jl}|Y=c_k)P(Xj=ajlY=ck)的分母将会为0,计算不出结果,后验概率自然也就无法计算了。这种情况下,可以在条件概率中加入一个参数来做平滑,公式如下:
在这里插入图片描述
式中sjs_jsj为样本的第jjj个特征的可取值个数,也就是可取值aj1,aj2,…,ajSja_{j1}, a_{j2},…, a_{jS_j}aj1,aj2,,ajSj的个数,λ=0\lambda=0λ=0时,公式就是条件概率的极大似然估计,λ=1\lambda=1λ=1时,称为拉普拉斯平滑。对先验概率也要做平滑:
在这里插入图片描述
式中NNN为样本个数,KKK为类标号个数。

5. 朴素贝叶斯使用场景

(个人理解,有不对请提出来讨论,谢谢)朴素贝叶斯适用于给文章加标签这样的场景,假设有十万篇文章需要加标签,我们可以先对每篇文章进行分词,提取重复度高的关键词,然后生成关键词向量,如下表所示:
在这里插入图片描述
下表提取了文章中出现频率最高的关键词,并根据事先定义好的关键词向量,如果这个关键词在文中出现频率高,则标记为1,频率不高,则标记为0,然后就可以通过朴素贝叶斯算法进行分类了。比如新来一篇文章6,其出现频率最高的关键词是“吃饭”,我们需要分别计算P(“经济”∣文章6)P(“经济”|文章6)P(6)P(“美食”∣文章6)P(“美食”|文章6)P(6),…,P(“数据分析”∣文章6)P(“数据分析”|文章6)P(6),根据公式计算就好。

我也想过是不是不用是否出现作为特征的值,而是用出现的频率作为特征的值,但是这样的话每个特征可取的值就非常多,计算条件概率时会很复杂,所以还是采用了这种造变量的方法。

6. 朴素贝叶斯优缺点

优点:计算简单,高效;
缺点:分类性能不一定高,要求特征相互独立的条件太强。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值