数学角度解析朴素贝叶斯算法

本文深入探讨了朴素贝叶斯算法,一种广泛应用于文本分析和分类任务的有监督学习方法。介绍了算法原理,包括数学预备知识、求极值问题、拉格朗日乘法项及最大似然估计。详细解析了朴素贝叶斯算法的目标函数求解过程,从预备知识到最终优化问题的建立。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

朴素贝叶斯算法仍然是流行的十大挖掘算法之一,也是是文本分析领域最为常用的算法之一,该算法是有监督的学习算法,解决的是分类问题,如客户是否流失、是否值得投资、信用等级评定等多分类问题。该算法的优点在于简单易懂、学习效率高、在某些领域的分类问题中能够与决策树、神经网络相媲美。但由于该算法以自变量之间的独立(条件特征独立)性和连续变量的正态性假设为前提,就会导致算法精度在某种程度上受影响。

1. 预备数学知识
1.1 求极值问题

人工智能中札核心的数学环节是求出一个目标函数最小值或最大值。我们高中时学过的将导数设置成0,然后求出极值点,以及用极值点求出最大值或最小值的方法就是其中之一。
例1:求 f ( x ) = x 2 − 2 x + 3 f(x)=x^2-2x+3 f(x)=x22x+3的最小值。 f ′ ( x ) = 2 x − 2 = 0 f'(x)=2x-2=0 f(x)=2x2=0即可以得到 x = 1 x=1 x=1,求得最小值为f(1)=-1.
但是,并不一定所有的函数的极值都可以通过设置导数为0的方式求出,有时候需要利用数值计算相关的技术(如梯度下降法,牛顿法)

1.2 拉格朗日乘法项

有些求极值问题,函数会带有一些条件。如下面的例子:
例2:求 f ( x , y ) = x + y f(x, y)=x+y f(x,y)=x+y的最大值,且 x 2 + y 2 = 1 x^2+y^2=1 x2+y2=1,那这个时候怎么求出最大值呢?
根据拉格朗日乘法项,将限制条件转变到目标函数中,此时问题就变成: m a x i m i z e   L = x + y + λ ( x 2 + y 2 − 1 ) maximize \,L=x+y+λ(x^2+y^2-1) maximizeL=x+y+λ(x2+y21)
剩下的过程就跟上面类似,设定导数为0,即可以得到以下三个方程:
f x ′ ( x , y , λ ) = 1 + 2 λ x = 0 (1) f'_x(x,y,λ) =1+2λx=0\tag{1} fx(x,y,λ)=1+2λx=0(1) f y ′ ( x , y , λ ) = 1 + 2 λ y = 0 (2) f'_y(x,y,λ)=1+2λy=0\tag{2} fy(x,y,λ)=1+2λy=0(2) f λ ′ ( x , y , λ ) = x 2 + y 2 − 1 = 0 (3) f'_λ(x,y,λ)=x^2+y^2-1=0\tag{3} fλ(x,y,λ)=x2+y21=0(3)
解完后,得到 λ 1 = 2 2 λ_1=\frac {\sqrt{2}}{2} λ1=22 λ 1 = − 2 2 λ_1=-\frac {\sqrt{2}}{2} λ1=22 。然后再求得 ( x = 2 2 , y = 2 2 ) (x=\frac {\sqrt{2}}{2},y=\frac {\sqrt{2}}{2}) (x=22 ,y=22 ), ( x = − 2 2 , y = − 2 2 ) (x=-\frac {\sqrt{2}}{2},y=-\frac {\sqrt{2}}{2}) (x=22 ,y=22 )。把两个解带入到原来函数里并做比较即可得到最优解。

1.3 最大似然估计

最大似然估计时机器学习领域最为常见的用来构建目标函数的方法。它的核心思想时根据观测到的结果来预测其中的未知参数。我们举一个投掷硬币的例子。假设有一枚硬币,他是不均匀的,也就是说出现正面和反面的概率是不同的。假设我们设定这枚硬币出现正面的概率为P(H)=θ,这里的H指的是正面,类似的会有反面。假设我们投掷6次之后得到了以下的结果,而且我们假定每次投掷都是相互独立事件: D = { H , T , T , H , H , H } D=\{H, T, T, H, H, H\} D={H,T,T,H,H,H}其中D表示所观测到的所有样本。从这个结果其实谁都可以很容易说出θ,也就是出现正面的概率为 4 6 \frac{4}{6} 64,其实我们在无意识中使用了最大似然估计法。接下来,我们从严谨的角度来定义最大似然下的目标函数。
基于最大似然估计法,我们需要最大化观测到的样本概率,即P(D)。进一步可以写成: P ( D ) = P ( H T T H H H ) = θ ∗ ( 1 − θ ) ∗ ( 1 − θ ) ∗ θ ∗ θ ∗ θ P(D)=P(HTTHHH)=θ*(1-θ)*(1-θ)*θ*θ*θ P(D)=P(HTTHHH)=θ(1θ)(1θ)θθθ我们的目标是最大化概率值 L = θ ∗ ( 1 − θ ) ∗ ( 1 − θ ) ∗ θ ∗ θ ∗ θ L=θ*(1-θ)*(1-θ)*θ*θ*θ L=θ(1θ)(1θ)θθθ。那这部分的优化既可以采用上面所提到的方法。 L ′ ( θ ) = 4 θ 3 ( 1 − θ ) 2 − θ 4 ∗ 2 ∗ ( 1 − θ ) = 0 L'(θ)=4θ^3(1-θ)^2-θ^4*2*(1-θ)=0 L(θ)=4θ3(1θ)2θ42(1θ)=0把这个式子整理完之后即可得到 θ = 2 3 θ=\frac {2}{3} θ=32,结果跟一开始算出来的一致。

2 朴素贝叶斯
2.1 求目标函数

假设给定一批训练数据 D = ( x 1 , y 1 ) , . . . , ( x N , y N ) D={(x^1,y^1),...,(x^N,y^N)} D=(x1,y1),...,(xN,yN),其中 x i x^i xi指的是第 i i i个样本(句子或文章),而且这个样本(句子或文章)包含了 m i m_i mi个单词,所以 x i = ( x 1 i , x 2 i , . . . , x m i i ) x_i=(x_1^i,x_2^i,...,x_{m_i}^i) xi=(x1i,x2i,...,xmii),假设x^i的内容为“今天很高兴学习自然语言处理技术”,切分词后为“今天,很,高兴,学习,自然语言处理,技术”,则 x 1 i x_1^i x1i=“今天”, x 2 i x_2^i x2i=“很”, x 3 i x_3^i x3i=“高兴”, x 4 i x_4^i x4i=“学习”, x 5 i x_5^i x5i=“自然语言处理”, x 6 i x_6^i x6i=“技术”, m i m_i mi=6。此外, y i y^i yi代表 x i x^i xi的标签。比如在垃圾邮件的应用上,它代表“垃圾邮件”或“正常邮件”。我们用K来代表分类的个数。比如在垃圾邮件应用上K=2。但在这里,我们考虑普遍的情况,很有可能K>2,也称之为是多分类问题。最后,我们再设V为词典库的大小。
朴素贝叶斯是生成模型,它的目标函数是要最大化概率P(D),也就是说P(x,y)。(判别模型目标函数为P(y|x))我们把前几步的推导先写下: P ( D ) = ∏ i = 1 N P ( x i , y i ) = ∏ i = 1 N P ( x i ∣ y i ) P ( y i ) (4) P(D)=\prod_{i=1}^N P(x^i, y^i)=\prod_{i=1}^N P(x^i|y^i)P(y^i) \tag{4} P(D)=i=1NP(xi,yi)=i=1NP(xiyi)P(yi)(4)这里利用贝叶斯公式转化,其中 P ( x i ∣ y i ) = P ( x i , y i ) P ( y i ) P(x^i|y^i)=\frac{P(x^i, y^i)}{P(y^i)} P(xiyi)=P(yi)P(xi,yi)
= ∏ i = 1 n P ( x 1 i , x 2 i . . . x m i ∣ y i ) P ( y i ) (5) \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad=\prod_{i=1}^n P(x_1^i,x_2^i...x_m^i|y^i)P(y^i) \tag{5} =i=1nP(x1i,x2i...xmiyi)P(yi)(5)式子(4)到(5)的变化是利用利用事实,样本 x i x^i xi由多个单词组成,每个 x j i x_j^i xji看做一个单词。
  = ∏ i = 1 N ∏ j = 1 m i P ( x j i ∣ y i ) P ( y i ) (6) \,\quad\quad\quad\quad\quad\quad\quad\quad\quad=\prod_{i=1}^N \prod_{j=1}^{m^i}P(x^i_j|y^i)P(y^i) \tag{6} =i=1Nj=1miP(xjiyi)P(yi)(6)式子(5)到(6)是利用了朴素贝叶斯的独立性假设,也就是说每个单词是相互独立的。比如给定一个句子“我们今天运功”,在给定一个标签y的情况下,概率可以写成P(“我们今天运动”|y)=P(“我们”|y)∗P(“今天”|y)*P(“运动”|y)。
为了减缓多个乘法项下出现overflow或un
derflow的问题发生,我们需要将公式两边转化为log形式,因为log函数是严格单调递增的函数,不影响我们对结果的比较。加上log后的形式如下: P ( D ) = l o g ( ∏ i = 1 N ∏ j = 1 m i P ( x j i ∣ y i ) P ( y i ) ) (7) P(D)=log(\prod_{i=1}^N \prod_{j=1}^{m^i}P(x^i_j|y^i)P(y^i) \tag{7}) P(D)=log(i=1Nj=1miP(xjiyi)P(yi))(7)   = l o g ( ∏ i = 1 N ∏ j = 1 V P ( w j i ∣ y i ) n i j P ( y i ) ) (8) \,\quad\quad\quad\quad=log(\prod_{i=1}^N \prod_{j=1}^{V}P(w^i_j|y^i)^{n_{ij}}P(y^i) \tag{8}) =log(i=1Nj=1VP(wjiyi)nijP(yi))(8)公式(7)到(8)是利用了一些技巧。举例子,假设一个文章内容为“我们 天 天 运动”,按照之前的逻辑这句话的概率为P(“我们天天运动”|y)=P(“我们”|y)P(“天”|y)P(“天”|y)P(“运动”|y)。但另一方面,也可以利用词典库的所有词来代表这个概率。 P ( " 我 们 天 天 运 动 " ∣ y ) = P ( " 啊 " ∣ y ) 0 P ( " 哎 " ∣ y ) 0 . . . P ( " 天 " ∣ y ) 2 . . . P ( " 我 们 " ∣ y ) 1 . . . P ( “ 运 动 ” ∣ y ) 1 . . . P("我们天天运动"|y)=P("啊"|y)^0P("哎"|y)^0...P("天"|y)^2...P("我们"|y)^1...P(“运动”|y)^1... P(""y)=P(""y)0P(""y)0...P(""y)2...P(""y)1...P(y)1...,这两者是等价的,因为没有出现在句子中的词,只不过我们从词典库的角度把所有单词都考虑进来,并数下每个单词在文档i里出现的次数。如果没有出现,相当于0次,0次幂等于1,不影响惩罚项。所以从这个角度我们可以把 ∏ j = 1 m i P ( x j i ∣ y i ) \prod_{j=1}^{m^i}P(x^i_j|y^i) j=1miP(xjiyi)写成 ∏ j = 1 V P ( w j i ∣ y i ) n i j \prod_{j=1}^{V}P(w^i_j|y^i)^{n_{ij}} j=1VP(wjiyi)nij,其中 n i j n_{ij} nij代表单词j出现在文档i的次数。这里 w j w_j wj代表词典库里的第j个单词。   = ∑ i = 1 N ∑ j = 1 V n i j l o g P ( w j ∣ y i ) + ∑ i = 1 N l o g P ( y i ) (9) \,\quad\quad\quad\quad\quad\quad\quad\quad\quad=\sum_{i=1}^N \sum_{j=1}^V n_{ij} logP(w_j|y^i) +\sum_{i=1}^NlogP(y^i) \tag{9} =i=1Nj=1VnijlogP(wjyi)+i=1NlogP(yi)(9)从式子(8)到(9)利用了log的性质。比如 l o g x y = y l o g x logx^y=ylogx logxy=ylogx l o g ∏ i = 1 P ( x i ) = ∑ i = 1 l o g P ( x i ) log\prod_{i=1}P(x^i)=\sum_{i=1}logP(x^i) logi=1P(xi)=i=1logP(xi),且 l o g P ( y i ) logP(y^i) logP(yi)没有包含单词j,所以只需要用 ∑ i = 1 N \sum_{i=1}^N i=1N累加各类文档的对数概率即可。   = ∑ k = 1 K ∑ i : y i = k ∑ j = 1 V n i j l o g P ( w j ∣ y i = k ) + ∑ k = 1 K ∑ i : y i = k l o g P ( y i = k ) (10) \,\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad=\sum_{k=1}^K\sum_{i:y^i=k}\sum_{j=1}^Vn_{ij}logP(w_j|y^i=k)+\sum_{k=1}^K\sum_{i:y^i=k}logP(y^i=k) \tag{10} =k=1Ki:yi=kj=1VnijlogP(wjyi=k)+k=1Ki:yi=klogP(yi=k)(10)将公式(9)的 ∑ i = 1 N \sum_{i=1}^N i=1N拆分成 ∑ k = 1 K ∑ i : y i = k \sum_{k=1}^K\sum_{i:y^i=k} k=1Ki:yi=k,这里的 i : y i = k i:y^i=k i:yi=k代表属于类别k的所有文档。所以这里 ∑ i : y i = k l o g P ( y i = k ) \sum_{i:y^i=k}logP(y^i=k) i:yi=klogP(yi=k)表示类别k在所有类别中的对数概率, ∑ i : y i = k \sum_{i:y^i=k} i:yi=k表示属于类别k的每个文档逐个加和。   = ∑ k = 1 K ∑ i : y i = k ∑ j = 1 V n i j l o g Θ k j + ∑ k = 1 k ∑ i : y i = k l o g π k (11) \,\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad=\sum_{k=1}^K\sum_{i:y^i=k}\sum_{j=1}^Vn_{ij}logΘ_{kj}+\sum_{k=1}^k\sum_{i:y^i=k}logπ_{k} \tag{11} =k=1Ki:yi=kj=1VnijlogΘkj+k=1ki:yi=klogπk(11) Θ k j Θ_{kj} Θkj代替 P ( w j ∣ y i = k ) P(w_{j}|y^i=k) P(wjyi=k),用 π k π_{k} πk代替 P ( y i = k ) P(y^i=k) P(yi=k) ∑ k = 1 K ∑ i : y i = k ∑ j = 1 V n i j l o g Θ k j + ∑ k = 1 K n k l o g π k (12) \sum_{k=1}^K\sum_{i:y^i=k}\sum_{j=1}^Vn_{ij}logΘ_{kj}+\sum_{k=1}^K n_{k}logπ_{k} \tag{12} k=1Ki:yi=kj=1VnijlogΘkj+k=1Knklogπk(12) n k n_{k} nk表示属于类别k的文件个数,因为 ∑ i : y i = k \sum_{i:y^i=k} i:yi=k表示属于类别k的每个文档逐个加和,所有可表示成属于类别k的文档总数,即 ∑ i : y i = k π k = n k π k \sum_{i:y^i=k}π_{k}=n_{k}π_{k} i:yi=kπk=nkπk。另外,有两个约束条件需要满足,分别是: ∑ u = 1 K π u = 1 (13) \sum_{u=1}^Kπ_{u}=1 \tag{13} u=1Kπu=1(13) ∑ v = 1 V Θ k v = 1 , f o r k = 1 , 2 , . . . , K (14) \sum_{v=1}^VΘ_{kv}=1,for\quad k=1,2,...,K \tag{14} v=1VΘkv=1,fork=1,2,...,K(14)条件(13)表示所有的类别的概率加在一起等于1,比如P(垃圾)+P(正常)=1。条件(14)表示的是对于任意一个分类k,出现在词典里的所有单词的总概率为1。
所以,这是个有约束条件的优化问题。把约束条件和目标函数写在一起即可以得到: M a x i m i z e L = ∑ k = 1 K ∑ i : y i = k ∑ j = 1 V n i j l o g Θ k j + ∑ k = 1 K n k l o g π k Maximize \quad L=\sum_{k=1}^K\sum_{i:y^i=k}\sum_{j=1}^Vn_{ij}logΘ_{kj}+\sum_{k=1}^K n_{k}logπ_{k} MaximizeL=k=1Ki:yi=kj=1VnijlogΘkj+k=1Knklogπk s . t . ∑ u = 1 K π u = 1 (15) s.t.\sum_{u=1}^Kπ_{u}=1 \tag{15} s.t.u=1Kπu=1(15) ∑ v = 1 V Θ k v = 1 , f o r k = 1 , 2 , . . . , K (16) \sum_{v=1}^VΘ_{kv}=1,for\quad k=1,2,...,K \tag{16} v=1VΘkv=1,fork=1,2,...,K(16)利用拉格朗日乘法项,我们可以把目标函数写成: M a x i m i z e   L = ∑ k = 1 K ∑ i : y i = k ∑ j = 1 V n i j l o g Θ k j + ∑ k = 1 K n k l o g π k + λ ( ∑ u = 1 K π u − 1 ) + ∑ k = 1 K λ k ( ∑ v = 1 V Θ k v − 1 ) (17) Maximize \, L=\sum_{k=1}^K\sum_{i:y^i=k}\sum_{j=1}^Vn_{ij}logΘ_{kj}+\sum_{k=1}^K n_{k}logπ_{k}+λ(\sum_{u=1}^Kπ_{u}-1)+\sum_{k=1}^Kλ_k(\sum_{v=1}^VΘ_{kv}-1) \tag{17} MaximizeL=k=1Ki:yi=kj=1VnijlogΘkj+k=1Knklogπk+λ(u=1Kπu1)+k=1Kλk(v=1VΘkv1)(17) λ λ λ为拉格朗日乘数,是一个实数,而 ∑ k = 1 K λ k ( ∑ v = 1 V Θ k v − 1 ) \sum_{k=1}^Kλ_k(\sum_{v=1}^VΘ_{kv}-1) k=1Kλk(v=1VΘkv1)表示对每个 ∑ v = 1 V Θ k v − 1 \sum_{v=1}^VΘ_{kv}-1 v=1VΘkv1分别乘以对应的λ,然后加和。

2.2 找出最优解 π k π_{k} πk
2.2.1 找出最优解 π k π_{k} πk

我们需要设置导数为0,进而找出最优解。先求解 π k π_{k} πk,所以只要跟 π k π_{k} πk无关的项都可以不考虑,因为它们导数为0。L对 π k π_{k} πk的导数为: ∂ L ∂ π k = ∂ ( n k l o g π k + λ π k ) ∂ π k = n k π k + λ = 0 (18) \frac{∂L}{∂π_{k}} =\frac{∂(n_{k}logπ_{k}+λπ_{k})}{∂π_{k}}=\frac{n_{k}}{π_{k}}+λ=0 \tag{18} πkL=πk(nklogπk+λπk)=πknk+λ=0(18)解为 π k = − 1 λ n k π_{k}=-\frac{1}{λ}n_{k} πk=λ1nk。这里有个参数λ,但同时我们有一个约束条件是 ∑ u = 1 K π u = 1 \sum_{u=1}^Kπ_{u}=1 u=1Kπu=1,把刚才的解带入这个条件中,得: ∑ u = 1 K − 1 λ n u = 1 (19) \sum_{u=1}^K-\frac{1}{λ}n_{u}=1 \tag{19} u=1Kλ1nu=1(19)则可求得 λ = − ∑ u = 1 K n u λ=-\sum_{u=1}^Kn_{u} λ=u=1Knu。把λ再次带入到 π k = − 1 λ n k π_{k}=-\frac{1}{λ}n_{k} πk=λ1nk里,可得: π k = n k ∑ u = 1 K n u (20) π_{k}=\frac{n_{k}}{\sum_{u=1}^Kn_{u}} \tag{20} πk=u=1Knunk(20)这里面 n k n_{k} nk为k类文档出现的个数,分母为所有文档的个数。

2.2.2 找出最优解 Θ k j Θ_{kj} Θkj

同理,我们需要求L对 Θ k j Θ_{kj} Θkj的导数,得: ∂ L ∂ Θ k j = ∂ [ ( ∑ i : y i = k l o g Θ k j ) + λ k ( ∑ v = 1 V Θ k v − 1 ) ] ∂ Θ k j = ∑ i : y i = k n i j Θ k j + λ k = 0 (21) \frac{∂L}{∂Θ_{kj}}=\frac{∂[(\sum_{i:y^i=k}logΘ_{kj})+λ_{k}(\sum_{v=1}^VΘ_{kv}-1)]}{∂Θ_{kj}}=\sum_{i:y^i=k}\frac{n_{ij}}{Θ_{kj}}+λ_{k}=0 \tag{21} ΘkjL=Θkj[(i:yi=klogΘkj)+λk(v=1VΘkv1)]=i:yi=kΘkjnij+λk=0(21)解为 Θ k j = − 1 λ k ∑ i : y i = k n i j Θ_{kj}=-\frac{1}{λ_{k}}\sum_{i:y^i=k}n^{ij} Θkj=λk1i:yi=knij。这里有个参数是 λ k λ_{k} λk,但同时我们有个约束条件 ∑ v = 1 V Θ k v = 1 \sum_{v=1}^VΘ_{kv}=1 v=1VΘkv=1,把 Θ k j = − 1 λ k ∑ i : y i = k n i j Θ_{kj}=-\frac{1}{λ_{k}}\sum_{i:y^i=k}n^{ij} Θkj=λk1i:yi=knij带入这个条件公式中,得: λ k = − 1 ∑ v = 1 V ∑ i : y i = k n i v (22) λ_{k}=-\frac{1}{\sum_{v=1}{V}\sum_{i:y^i=k}n_{iv}} \tag{22} λk=v=1Vi:yi=kniv1(22) λ k λ_{k} λk带入到上面的解,得: Θ k j = ∑ i : y i = k n i j ∑ v = 1 V ∑ i : y i = k n i v (23) Θ_{kj}=\frac{\sum_{i:y^i=k}n_{ij}}{\sum_{v=1}^V\sum_{i:y^i=k}n_{iv}} \tag{23} Θkj=v=1Vi:yi=knivi:yi=knij(23)这个式子中分子代表的是在所有类别为k的文档里出现了多少次 w j w_{j} wj,也就是词典库里的 j j j个单词。分母代表的是在类别为 k k k的所有文档里包含了总共多少个单词。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值