该博客借鉴周志华-机器学习的解读,有加入自己的感悟,一方面作为学习的笔记,再者有基于此做一些实际的思考
1. 贝叶斯分类
贝叶斯策论是概率框架下实施决策的基本方法,适用于各种分类任务;
简单聊一下 先验 和 后验 概率:
- 条件: 今天风大/小(用A表示该事件)
- 结果:是否可以骑行(用B表示该事件)
那么: 先验概率就是 P ( A ) P(A) P(A),后验概率就是 P ( A ∣ B ) P(A|B) P(A∣B)
ok,我们继续往下讨论贝叶斯:
假设有N种类别标记, y = ( c 1 , c 2 , … , c N ) y = (c_1,c_2,…,c_N ) y=(c1,c2,…,cN),$\lambda_{ij} 表 示 将 一 个 真 实 标 记 为 表示将一个真实标记为 表示将一个真实标记为c_j 的 样 本 的样本 的样本x 标 记 为 标记为 标记为c_i 的 损 失 , 基 于 后 验 概 率 的损失,基于后验概率 的损失,基于后验概率P(c_i|x) 来 计 算 样 本 来计算样本 来计算样本x$上的条件损失:
R ( c ∣ x ) = ∑ j N λ i j P ( c j ∣ x ) R(c|x) = \sum_j^N\lambda_{ij}P(c_j|x) R(c∣x)=j∑NλijP(cj∣x) —— 式1
在机器学习中,多分类的任务多会在output层使用
s
o
f
t
m
a
x
softmax
softmax作为激活输出所有类别概率就是基于上述的原理;
这样来看上式(式1)就可以转化为:
R ( c ∣ x ) = ∑ j N λ i j P ( h ( x ) ∣ x ) R(c|x) = \sum_j^N\lambda_{ij}P(h(x)|x) R(c∣x)=j∑NλijP(h(x)∣x) —— 式2
那么我们的任务就变成了寻找 h h h使得 R ( c ∣ x ) R(c|x) R(c∣x)最小的过程:
R ( h ) = E x [ R ( h ( x ) ∣ x ) ] R(h) = E_x[R(h(x)|x)] R(h)=Ex[R(h(x)∣x)] —— 式3
显然对于每个样本 x x x,若h能最小化条件风险 R ( h ( x ) ∣ x ) R(h(x)|x) R(h(x)∣x),则总体的条件风险也会被最小化,这就是 贝叶斯判定准则:
最小化总体风险,只需再每个样本上选择那个能使条件风险最小的类别标记
- 注意这里寻找h的过程就是寻找训练模型中参数 θ \theta θ 最优的过程
所以就有:
θ = a r g m i n c ∈ y R ( c ∣ x ) \theta = argmin_{c\in y}R(c|x) θ=argminc∈yR(c∣x) —— 式4
在多分类中我们的目标是降低错误分类的概率,提升正确分类的概率:
f ( x ) = { 1 , if i = j; 0 other f(x)=\begin{cases}1,& \text{if i = j;}\\0& \text{other}\end{cases} f(x)={1,0if i = j;other
这样就可以 惩罚错误的分类概率,当然也可以兼具提升分类正确的概率
这样的话,对于分类条件风险(我们要最大化这个条件风险,即优化分类正确的概率):
R ( c ∣ x ) = P ( c ∣ x ) R(c|x) = P(c|x) R(c∣x)=P(c∣x)
那么就转化为一个极大似然估计的问题:
θ = a r g m a x c ∈ y R ( c ∣ x ) \theta = argmax_{c\in y}R(c|x) θ=argmaxc∈yR(c∣x) —— 式5
这里我们可以看到使用贝叶斯判定准则(或者是极大/极小似然估计),我们的一个比较难求的点是后验概率 P ( c ∣ x ) P(c|x) P(c∣x);
- 判别式模式:给定
x
x
x,可以通过网络建模
P
(
c
∣
x
)
P(c|x)
P(c∣x)(一般取输出概率最大的为最终c)来获得最终的类别c;如
s
o
f
t
m
a
x
softmax
softmax激活
需要满足的条件
1.所有输出为非负概率,区间 [ 0 , 1 ] [0,1] [0,1]
2.所有概率之和为1,即: ∑ i = 1 N P ( c i ∣ x ) = 1 \sum_{i = 1}^NP(c_i|x) = 1 ∑i=1NP(ci∣x)=1
-
生成式模式:
P ( c ∣ x ) = P ( x , c ) P ( x ) P(c|x) = \frac{P(x,c)}{P(x)} P(c∣x)=P(x)P(x,c) —— 式6
先来看三个基本公式:
P ( A ∣ B ) = P ( A B ) P ( B ) P(A|B) = \frac{P(AB)}{P(B)} P(A∣B)=P(B)P(AB)
P ( A , B ) = ∑ i P ( A ∣ B i ) ∗ P ( B i ) P(A,B) = \sum_{i}P(A|B_i) * P(B_i) P(A,B)=i∑P(A∣Bi)∗P(Bi)
P ( B i ∣ A ) = P ( A ∣ B i ) ∗ P ( B i ) ∑ j P ( A ∣ B j ) ∗ P ( B j ) = P ( A ∣ B i ) ∗ P ( B i ) P ( A ) P(B_i|A) = \frac{P(A|B_i)*P(B_i)}{\sum_jP(A|B_j)*P(B_j)} = \frac{P(A|B_i)*P(B_i)}{P(A)} P(Bi∣A)=∑jP(A∣Bj)∗P(Bj)P(A∣Bi)∗P(Bi)=P(A)P(A∣Bi)∗P(Bi)
所以基于贝叶斯定理,则式6可以变形为
P ( c ∣ x ) = P ( x , c ) P ( x ) = P ( c ) P ( x ∣ c ) P ( x ) P(c|x) = \frac{P(x,c)}{P(x)} = \frac{P(c)P(x|c)}{P(x)} P(c∣x)=P(x)P(x,c)=P(x)P(c)P(x∣c) —— 式7
- P©是先验概率
- P(x|c)是样本x相对于标记c对应的类条件概率,或者称为似然
- P(x)是用于归一化的"证据因子
在实际中,假设样本的d个属性都是 0/1这样的二值表示,那么样本空间中将有 2 d 2^d 2d中可能,在实际中这个值是远大于样本数m的,所以直接使用频率来估计 P ( x ∣ c ) P(x|c) P(x∣c)是不可行的,因为未观测到和概率为0是不同的;所以我们要用到朴素贝叶斯分类器
2 朴素贝叶斯分类
由上可知贝叶斯公式用来分类,样本数 m m m一般情况会远远小于属性的所有组合( 2 d 2^d 2d ),所以我们这里使用朴素贝叶斯分类器,这是从属性维度来进行考虑,因为我们属性的值一般是可控的,比如二值(0或者1):
“属性条件独立性假设”:对于已知类别,假设所有属性相互独立.换言之.假设每个属性独立的对分类结果发生影响.则式7可以变形为
P ( c ∣ x ) = P ( c ) P ( x ∣ c ) P ( x ) = P ( c ) P ( x ) ∏ i = 1 d P ( x i ∣ c ) P(c|x) = \frac{P(c)P(x|c)}{P(x)} = \frac{P(c)}{P(x)}\prod_{i=1}^dP(x_i|c) P(c∣x)=P(x)P(c)P(x∣c)=P(x)P(c)i=1∏dP(xi∣c) —— 式8
当然,如果你数据足够的大,使用端到端的判定式模型是完全没有问题了,但是当数据不足时就要考虑样本数 m m m是否可以代表属性的所有组合,如果不行,你就需要优化你的算法了,比如朴素贝叶斯
下面来看式8的各项的计算:
- D表示所有的样本数
- D c D_c Dc是D集合上所有属于第C类样本组合的集合
- x i x_i xi表示样本的第 i i i个属性
那么:
P ( c ) = ∣ D c ∣ ∣ D ∣ P(c) = \frac{|D_c|}{|D|} P(c)=∣D∣∣Dc∣
P ( x i ∣ c ) = ∣ D c , x i ∣ ∣ D c ∣ P(x_i|c) = \frac{|D_{c,x_i}|}{|D_c|} P(xi∣c)=∣Dc∣∣Dc,xi∣
对于连续的概率分布,满足 P ( x i ∣ c ) ∼ ( μ c , i , σ c , i 2 ) P(x_i|c) \thicksim (\mu_{c,i},\sigma^2_{c,i}) P(xi∣c)∼(μc,i,σc,i2)
P ( x i ∣ c ) = 1 ( 2 π ) 1 / 2 σ c , i e x p ( − ( x i − μ c , i ) 2 2 σ c , i 2 ) P(x_i|c) = \frac{1}{(2\pi)^{1/2}\sigma_{c,i}}exp(-\frac{(x_i-\mu_{c,i})^2}{2\sigma^2_{c,i}}) P(xi∣c)=(2π)1/2σc,i1exp(−2σc,i2(xi−μc,i)2)
同理可以看做是一个最大化正确分类概率的一个极大似然问题:
θ c = a r g m a x c ∈ y P ( c ) ∏ i = 1 d P ( h ( x i ) ∣ c ) \theta_c = argmax_{c \in y} P(c)\prod_{i = 1}^{d}P(h(x_i)|c) θc=argmaxc∈yP(c)i=1∏dP(h(xi)∣c)
h ( x i ) = θ c ∗ X h(x_i) = \theta_c * X h(xi)=θc∗X
下面看一个例子<摘自周志华的机器学习>
那么我们来看好瓜和坏瓜的概率(单项的计算这里省略)
因为 0.038 > 6.80 x
1
0
−
5
10^{-5}
10−5,所以可以认为该样本是"好瓜"
在计算某项的时候,可能回出现这样的情况:
P ( 纹 理 = 模 糊 ∣ 好 瓜 = 是 ) = 0 8 = 0 P(纹理=模糊|好瓜=是) = \frac {0}{8} = 0 P(纹理=模糊∣好瓜=是)=80=0
这样的情况出现会导致:
P ( x = 测 1 ∣ 好 瓜 = 是 ) = 0 P(x = 测1|好瓜=是) = 0 P(x=测1∣好瓜=是)=0
这样就会导致判断出错,所以对于这种特殊情况我们要进行修正:
P ( c ) = ∣ D c ∣ + 1 ∣ D ∣ + N P(c) = \frac{|D_c|+1}{|D|+N} P(c)=∣D∣+N∣Dc∣+1
P ( x i ∣ c ) = ∣ D c , x i ∣ + 1 ∣ D c ∣ + N i P(x_i|c) = \frac{|D_{c,x_i}| + 1}{|D_c| + N_i} P(xi∣c)=∣Dc∣+Ni∣Dc,xi∣+1
这样就解决了上诉问题,有点类似于Adam优化器优化梯度反向传播的场景