传统的分类器朴素贝叶斯很多人都知道怎么用,但是有没有想过它的原理,它是怎么样被一步一步的推导出来的。今天咱们就推导一下朴素贝叶斯模型。
现在有数据集
D={(x1,y1),(x2,y2),...,(xn,yn)}
x表示的是一个文档的所有单词
y表示的是一个文档属于的类别。
n表示的是文档的数量
首先我们知道朴素贝叶斯是一个生成模型因此我们的目标函数可以写成:
p(D)=∏i=1np(xi,yi)=∏i=1np(xi∣yi)⋅p(yi)=∏i=1np(x1i,x2i,x3i,...,xmi∣yi)⋅p(yi)
上面就是一个正常的生成模型的样子,相当于一个框架吧,下面我们加入朴素贝叶斯的核心思想:条件独立假设,所以我们的公式可以写成:
p(D)=∏i=1n∏j=1mp(xji∣yi)⋅p(yi)
下面我们的目标就是最大似然优化参数啦。也就是:
argmaxp(D)=argmax∏i=1n∏j=1mp(xji∣yi)⋅p(yi)=argmaxlog[∏i=1n∏j=1mp(xji∣yi)⋅p(yi)]
=argmaxlog[∏i=1n∏j=1vp(wj∣yi)nij⋅p(yi)]
v表示词库中全部词,
nij表示的是若是单词
wj属于文档
i为1,不属于为0。
我们这样转换的目的就是原来词是从文章中选择,现在变成从词库中选择。而选择的还是那些词,这样转换只是为了方便计算。
=argmax∑i=1n∑j=1vnijlogp(wj∣yi)+logp(yi)
下面我们把类别考虑到公式里面。
=argmax∑k=1k∑i;y=k∑j=1vnijlogp(wj∣yi=k)+∑k=1k∑i;y=klogp(yi=k)
∑i;y=k表示属于k类的所有文档。
∑k=1k∑i;y=k就表示所有的文档。
这个时候我们令
p(wj∣yi=k)为
θki表示第j个单词属于第k类文档的概率。令
p(yi=k)为
πk表示文档属于k的概率(先验)
这时候我们的目标函数为:
argmax∑k=1k∑i;y=k∑j=1vnijlogpθkj+∑k=1k∑i;y=klogπk
条件:
∑u=1uπu=1
∑v=1vθkv=1k=1,2,3...,K
根据拉格朗日的乘法项我们可以将目标函数写成:
L=argmax∑k=1k∑i;y=k∑j=1vnijlogpθkj+∑k=1knklogπk+λ∑u=1kπu−1+∑k=1Kλk∑v=1vθkv−1
所以上面就是朴素贝叶斯模型的目标函数。
这里我们有三个参数
(θ,π,λ)
下面我们求导寻找极值点,也就是当导数等于零的时候:
∂πk∂L=∂π∂nklogπk+λ∑u=1kπu−1=πknk+λ=0⇒πk=−λ1⋅nk
由
∑u=1uπu=1可知:
∑u=1u−λ1⋅nu=1⇒λ=−∑u=1unu
因此
πk=−λ1⋅nk=∑u=1ununk
同理计算
∂θkj∂L=∂θkj∂∑i;y=knijlogpθkj+λkθkv−1=∑i;y=kθijnij+λk=0⇒θij=λk∑i;y=knij
由
∑v=1vθv=1可知:
∑v=1vλk∑i;y=kniv=1⇒λ=−∑v=1v∑i;y=kniv
因此
θij=λk∑i;y=knij=∑v=1v∑i;y=kniv∑i;y=knij
证明完毕
πk=∑u=1ununk
θij=∑v=1v∑i;y=kniv∑i;y=knij
从公式我们可以看出我们使用的朴素贝叶斯经常计算当前类的占比和词在某类的比率就是这么推导出来的。看似简单的流程也是经过复杂的数学公式推导啊