博客园相关内容值得一看。假设有 N N N种标签类别 c i c_i ci, λ i j \lambda_{ij} λij是将真实标签 c i c_i ci误分类为 c j c_j cj的损失,基于后验概率 P ( c i ∣ x ) P(c_i|x) P(ci∣x)的条件风险定义为 R ( c i ∣ x ) = ∑ j = 1 N λ i j P ( c j ∣ x ) R(c_i|x)=\sum_{j=1}^N\lambda_{ij}P(c_j|x) R(ci∣x)=∑j=1NλijP(cj∣x),贝叶斯分类器要学习一个分类器 h ( x ) = a r g m i n c ∈ Y R ( c ∣ x ) h(x)=argmin_{c\in Y}R(c|x) h(x)=argminc∈YR(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)]也最小,与贝叶斯最优分类器 h ∗ ( x ) h^*(x) h∗(x)对应的总体风险称为贝叶斯风险 R ∗ ( h ) R^*(h) R∗(h)。如果分类目标定为最小化分类错误率, λ i , j \lambda_{i,j} λi,j可以定为当 i = j i=j i=j, λ i , j = 0 \lambda_{i,j}=0 λi,j=0,否则 λ i , j = 1 \lambda_{i,j}=1 λi,j=1,此时 R ( c i ∣ x ) = ∑ j = 1 , j ≠ i N P ( c j ∣ x ) = 1 − P ( c i ∣ x ) R(c_i|x)=\sum_{j=1,j\ne i}^NP(c_j|x)=1-P(c_i|x) R(ci∣x)=∑j=1,j=iNP(cj∣x)=1−P(ci∣x)(为了方便下面省略下标 i i i),此时 h ∗ ( x ) = a r g m a x c ∈ Y P ( c ∣ x ) h^*(x)=argmax_{c\in Y}P(c|x) h∗(x)=argmaxc∈YP(c∣x)
为了获得后验概率,有两种方法:直接建模 P ( c ∣ x ) P(c|x) P(c∣x)得到的是“判别式模型“(决策树,神经网络,支持向量机);先对联合分布 P ( x , c ) P(x,c) P(x,c)建模,再得到 P ( c ∣ x ) P(c|x) P(c∣x),得到”生成式模型“。根据贝叶斯定理 P ( c ∣ x ) = P ( c , x ) P ( x ) = P ( c ) P ( x ∣ c ) P ( x ) P(c|x)=\frac{P(c,x)}{P(x)}=\frac{P(c)P(x|c)}{P(x)} P(c∣x)=P(x)P(c,x)=P(x)P(c)P(x∣c),其中 P ( c ) P(c) P(c)是类的先验概率, P ( x ∣ c ) P(x|c) P(x∣c)是样本相对于 c c c的似然, P ( x ) P(x) P(x)对于给定样本而言,不会影响 P ( c i ∣ x ) ( i = 1 , 2 , … , N ) P(c_i|x)(i=1,2,\dots,N) P(ci∣x)(i=1,2,…,N)的相对大小,因此问题转化为根据数据集 D D D估计先验 P ( c ) P(c) P(c)和似然 P ( x ∣ c ) P(x|c) P(x∣c),其中 P ( c ) P(c) P(c)根据大数定律可以根据数据集中样本出现的频率估计, P ( x ∣ c ) P(x|c) P(x∣c)是给定标签类别 c c c样本 x x x的各个属性取值概率的联合分布。
- 书提到 P ( x ) P(x) P(x)是用于归一化的"证据"因子,不太理解
- 设 X 1 , X 2 , … , X n X_1,X_2,\dots,X_n X1,X2,…,Xn是独立同分布的随机变量,且均值为 μ \mu μ,并设平均值 X ˉ = X 1 + X 2 + ⋯ + X n n \bar{X}=\frac{X_1+X_2+\dots+X_n}{n} Xˉ=nX1+X2+⋯+Xn,弱大数定律是 X ˉ \bar{X} Xˉ依概率收敛于 μ \mu μ,强大数定律是 X ˉ \bar{X} Xˉ几乎处处收敛于 μ \mu μ
朴素贝叶斯采用了属性条件独立性假设:对给定类别,样本的所有属性相互独立,即属性的取值分别对分类结果产生影响,此时 P ( c ∣ x ) = P ( c ) P ( x ) P ( x ∣ c ) = P ( c ) P ( x ) ∏ i = 1 d P ( x i ∣ c ) P(c|x)=\frac{P(c)}{P(x)}P(x|c)=\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=1dP(xi∣c),其中 d d d是属性数目, x i x_i xi是 x x x在第 i i i个属性上的取值。最后综上,朴素贝叶斯分类器的表达式化为:
h n a i v e B a y e s ∗ ( x ) = a r g m a x c ∈ Y P ( c ∣ x ) = a r g m a x c ∈ Y P ( c ) ∏ i = 1 d P ( x i ∣ c ) h^*_{naive\ Bayes}(x)=argmax_{c\in Y}P(c|x)=argmax_{c\in Y}P(c)\prod_{i=1}^dP(x_i|c) hnaive Bayes∗(x)=argmaxc∈YP(c∣x)=argmaxc∈YP(c)i=1∏dP(xi∣c)
根据数据集 D D D(如果属性 x i x_i xi是离散值可用第二个式子估计,如果是连续值,可假设属性值的出现服从正态分布,根据极大似然可以用第三个式子估计,其中 μ c , i \mu_{c,i} μc,i和 σ c , i 2 \sigma^2_{c,i} σc,i2是第 c c c类样本在第 i i i个属性上取值的均值和方差),这些参数可以估计为:
P ( c ) = ∣ D c ∣ ∣ D ∣ P ( x i ∣ c ) = ∣ D c , x i ∣ ∣ D c ∣ p ( x i ∣ c ) = 1 2 π σ c , i 2 e x p ( − ( x i − μ c , i ) 2 2 σ c , i 2 ) P(c)=\frac{|D_c|}{|D|}\\ P(x_i|c)=\frac{|D_{c,x_i}|}{|D_c|}\\ p(x_i|c)=\frac{1}{\sqrt{2\pi\sigma^2_{c,i}}}exp(-\frac{(x_i-\mu_{c,i})^2}{2\sigma^2_{c,i}}) P(c)=∣D∣∣Dc∣P(xi∣c)=∣Dc∣∣Dc,xi∣p(xi∣c)=2πσc,i21exp(−2σc,i2(xi−μc,i)2)
如果某个属性未在样本中出现,概率 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∣将会是 0 0 0,即任何属性 x i x_i xi是这个取值的样本 x x x,最后连乘之后的概率都是 0 0 0,为了避免这种不合理情况,可以对这些估计做"拉普拉斯修正"(这种修正实质上是假设属性与类别都是均匀分布,这是关于数据的先验), N N N是类别数目, N i N_i Ni是第 i i i个属性可能的取值数目:
P ( c ) = ∣ D c ∣ + 1 ∣ D ∣ + N P ( x i ∣ c ) = ∣ D c , x i + 1 ∣ ∣ D c ∣ + N i P(c)=\frac{|D_c|+1}{|D|+N}\\P(x_i|c)=\frac{|D_{c,x_i}+1|}{|D_c|+N_i} P(c)=∣D∣+N∣Dc∣+1P(xi∣c)=∣Dc∣+Ni∣Dc,xi+1∣
朴素贝叶斯还可以实现懒惰学习和增量学习。关于其他贝叶斯分类器,可以看这里, E M EM EM算法可见《统计学习方法》和《机器学习》的后半部分,这里没有看,代码在这,我的代码实现朴素贝叶斯