朴素贝叶斯算法原理

(作者:陈玓玏)

1. 损失函数

假设我们使用0-1损失函数,函数表达式如下:
在这里插入图片描述
Y Y 为真实值,有 c 1 , c 2 , . . . , c K {c_1,c_2,...,c_K} K K 个类标记, f ( X ) f(X) 是决策函数,其输出值就是类标记的预测值,那么对应的代价函数,也就是期望损失函数为:
R e x p ( X ) = E ( L ( Y , f ( X ) ) ) R_exp(X) = E(L(Y,f(X)))
因为这里的期望是对联合概率取的,所以有如下关系:
R e x p ( X ) = k = 1 K L ( c k , f ( X ) ) P ( c k , X ) = E x k = 1 K L ( c k , f ( X ) ) P ( c k 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)
L ( Y , f ( X ) ) L(Y,f(X)) 代入,得到:
R e x p ( X ) = k = 1 K P ( Y c k X ) = k = 1 K ( 1 P ( Y = c k X ) ) R_exp(X) = \sum_{k=1}^{K}P(Y \neq c_k|X) = \sum_{k=1}^{K}(1-P(Y=c_k|X))
要让损失函数最小化,只需要和项中的每一项都是最小即可:
m i n k = 1 K ( 1 P ( Y = c k X ) ) = m a x k = 1 K P ( Y = c k X ) = m a x P ( Y = c k 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)
这也就是我们之后朴素贝叶斯算法的依据:求得最大后验概率即能最小化代价函数!

2. 求最大化后验概率

基于上面的分析我们知道,对于数据集 D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) D = {(x_1,y_1),(x_2,y_2),...,(x_N,y_N)} ,当 y i y_i 的可取值为 c 1 , c 2 , . . . , c K {c_1,c_2,...,c_K} 时,我们对每个样本 x i x_i 求其对应不同类标记 c k c_k 的后验概率值,并选择最后的后验概率值对应的类标号 c k c_k 作为样本的分类结果,我们就能以最小的代价函数获得最优的分类。

那么,我们可以根据贝叶斯公式来求后验概率:
P ( Y = c k X = x i ) = P ( X = x i Y = c k ) P ( Y = c k ) k = 1 K P ( X = x i Y = c k ) P ( Y = c k ) 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)}
这里有些犯难了,样本 x i x_i J J 个属性,怎么求得先验概率呢?这时候朴素贝叶斯的优势就体现出来了,朴素贝叶斯和贝叶斯最重要的区别就在于,朴素贝叶斯假设在类确定的条件下,样本的特征之间是相互独立的!因此,上面的公式就可以拆分成以下形式:
P ( Y = c k X = x i ) = P ( Y = c k ) j = 1 J P ( X j = x i j Y = c k ) k = 1 K P ( Y = c k ) j = 1 J P ( X j = x i j Y = c k ) 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)}
因为分母对于同一个样本来说都是一样的,因此我们在具体算法流程中是可以不考虑分母的大小的。

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

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

4. 贝叶斯估计

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

5. 朴素贝叶斯使用场景

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

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

6. 朴素贝叶斯优缺点

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

猜你喜欢

转载自blog.csdn.net/weixin_39750084/article/details/83514114
今日推荐