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