此篇博文是基于李宏毅老师此视频的学习总结。此部分主要介绍,分类:概率生成模型。(Classification: Probabilistic Generative Model)
设计函数(模型):根据输入数据,输出分类结果。
设计损失函数: L ( f ) = ∑ n δ ( f ( x n ) ≠ y ^ n ) L(f) = \sum_n\delta(f(x^n) \neq \hat y^n) L(f)=n∑δ(f(xn)̸=y^n) 表示训练数据分类错误的总次数。
找到最优函数
老师在课程中依旧以宝可梦为例,描述一个二元分类问题:将水系(Water)宝可梦和一般(Normal)宝可梦区分出来。
下图左边Class1是水系(Water), P ( C 1 ) P(C_1) P(C1)表示选择到Class1中宝可梦的概率;下图右边Class2是一般(Normal), P ( C 2 ) P(C_2) P(C2)表示选择到Class2中宝可梦的概率;
训练数据:79 Water, 61 Normal。因此可得到: P ( C 1 ) = 79 / ( 79 + 61 ) = 0.56 P ( C 2 ) = 61 / ( 79 + 61 ) = 0.44 P(C_1) = 79/(79+61) = 0.56 \\ P(C_2) = 61/(79+61) = 0.44 P(C1)=79/(79+61)=0.56P(C2)=61/(79+61)=0.44
设想一下,实际水系宝可梦不止训练数据中的79只,那么,当面对新数据(test data)的时候,怎么求出从Class1中选出它的概率呢?(不可能是0吧)。于是,可以假设训练数据是从一个高斯分布(包含所有的水系宝可梦数据)中取出的部分样本点。因此,问题就变成了求解这个高斯分布(正态分布): f μ , Σ ( x ) = 1 ( 2 π ) D / 2 1 ∣ Σ ∣ 1 / 2 e x p { − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) } f_{\mu,\Sigma}(x) = \frac{1}{(2\pi)^{D/2}}\frac{1}{|\Sigma|^{1/2}}exp\{−\frac12(x - \mu)^T \Sigma^{−1}(x-\mu) \} fμ,Σ(x)=(2π)D/21∣Σ∣1/21exp{−21(x−μ)TΣ−1(x−μ)}
函数输入:向量x;输出:采样取到x的概率。函数形状由平均值 μ \mu μ和协方矩阵 Σ \Sigma Σ决定。 ∣ Σ ∣ |\Sigma| ∣Σ∣表示 Σ \Sigma Σ的行列式。
求解高斯分布,也就是找到 μ \mu μ和 Σ \Sigma Σ,【协方差矩阵求解方法】。用到的方法就是:极大似然估计。
给出一对 μ \mu μ和 Σ \Sigma Σ,能够计算出高斯分布的79个样本的可能性。这个可能性就是高斯分布的Likelihood,使用公式表示为: L ( μ , Σ ) = f μ , Σ ( x 1 ) f μ , Σ ( x 2 ) f μ , Σ ( x 3 ) . . . f μ , Σ ( x 79 ) L(\mu, \Sigma) = f_{\mu, \Sigma}(x^1)f_{\mu, \Sigma}(x^2)f_{\mu, \Sigma}(x^3)...f_{\mu, \Sigma}(x^{79}) L(μ,Σ)=fμ,Σ(x1)fμ,Σ(x2)fμ,Σ(x3)...fμ,Σ(x79)
根据极大似然(Maximum Likelihood)的计算,我们需要计算: L ( μ , Σ ) = f μ , Σ ( x 1 ) f μ , Σ ( x 2 ) f μ , Σ ( x 3 ) . . . f μ , Σ ( x 79 ) f μ , Σ ( x ) = 1 ( 2 π ) D / 2 1 ∣ Σ ∣ 1 / 2 e x p { − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) } μ ∗ , Σ ∗ = a r g    m a x μ , Σ L ( μ , Σ ) μ ∗ = 1 79 ∑ n = 1 79 x n Σ ∗ = 1 79 ∑ n = 1 79 ( x n − μ ∗ ) ( x n − μ ∗ ) T L(\mu, \Sigma) = f_{\mu, \Sigma}(x^1)f_{\mu, \Sigma}(x^2)f_{\mu, \Sigma}(x^3)...f_{\mu, \Sigma}(x^{79}) \\ f_{\mu,\Sigma}(x) = \frac{1}{(2\pi)^{D/2}}\frac{1}{|\Sigma|^{1/2}}exp\{−\frac12(x − \mu)^T\Sigma^{−1}(x-\mu) \} \\ \mu^*,\Sigma^* = arg\; \underset{\mu, \Sigma} {max}L(\mu,\Sigma) \\ \mu^* = \frac{1}{79 }\sum_{n=1}^{79} x^n \\ \Sigma^* = \frac{1}{79}\sum_{n=1}^{79}(x^n-\mu^*)(x^n-\mu^*)^T L(μ,Σ)=fμ,Σ(x1)fμ,Σ(x2)fμ,Σ(x3)...fμ,Σ(x79)fμ,Σ(x)=(2π)D/21∣Σ∣1/21exp{−21(x−μ)TΣ−1(x−μ)}μ∗,Σ∗=argμ,ΣmaxL(μ,Σ)μ∗=791n=1∑79xnΣ∗=791n=1∑79(xn−μ∗)(xn−μ∗)T
根据上述公式,计算79只水系的宝可梦和61只一般宝可梦的 μ \mu μ和 Σ \Sigma Σ: μ 1 = [ 75.0 71.3 ] , Σ 1 = [ 874 327 327 929 ] μ 2 = [ 55.6 59.8 ] , Σ 2 = [ 847 422 422 685 ] \mu^1 = \begin{bmatrix} 75.0 \\ 71.3 \end{bmatrix}, \Sigma^1 = \begin{bmatrix} 874&327 \\ 327&929 \end{bmatrix} \\ \mu^2 = \begin{bmatrix} 55.6 \\ 59.8 \end{bmatrix}, \Sigma^2 = \begin{bmatrix} 847&422 \\ 422&685 \end{bmatrix} μ1=[75.071.3],Σ1=[874327327929]μ2=[55.659.8],Σ2=[847422422685]
现在可以开始求解分类问题,根据贝叶斯公式: P ( C 1 ∣ x ) = P ( x ∣ C 1 ) P ( C 1 ) P ( x ∣ C 1 ) P ( C 1 ) + P ( x ∣ C 2 ) P ( C 2 ) P(C_1|x) = \frac{P(x|C_1)P(C_1)}{P(x|C_1)P(C_1)+P(x|C_2)P(C_2)} P(C1∣x)=P(x∣C1)P(C1)+P(x∣C2)P(C2)P(x∣C1)P(C1) 其中,有以下几项: P ( C 1 ) = 79 / ( 79 + 61 ) = 0.56 P ( C 2 ) = 61 / ( 79 + 61 ) = 0.44 P ( x ∣ C 1 ) = f μ 1 , Σ 1 ( x ) P ( x ∣ C 2 ) = f μ 2 , Σ 2 ( x ) P(C_1) = 79/(79+61)=0.56 \\ P(C_2) = 61/(79+61)=0.44 \\ P(x|C_1) = f_{\mu^1,\Sigma^1}(x) \\ P(x|C_2) = f_{\mu^2,\Sigma^2}(x) P(C1)=79/(79+61)=0.56P(C2)=61/(79+61)=0.44P(x∣C1)=fμ1,Σ1(x)P(x∣C2)=fμ2,Σ2(x) 经过计算,如果 P ( C 1 ∣ x ) > 0.5 P(C_1|x)>0.5 P(C1∣x)>0.5,那么 x x x是属于水系宝可梦的;否则 x x x属于一般属性宝可梦。
接下来,看老师做出的结果:
从结果可以看出,考虑宝可梦两个属性(Defence & SP Defence),训练之后,在测试数据上准确率只有47%。考虑所有7个特征属性,准确率也就在54%,结果依旧不理想。
不同的Class(Class1 Class2)可以使用同一个协方差矩阵 Σ \Sigma Σ,协方差矩阵和输入特征的平方成正比的。
因此,两个高斯分布 f μ 1 , Σ 1 ( x ) f_{\mu_1,\Sigma_1}(x) fμ1,Σ1(x)和 f μ 2 , Σ 2 ( x ) f_{\mu_2,\Sigma_2}(x) fμ2,Σ2(x)使用不同的协方差矩阵 Σ 1    Σ 2 \Sigma_1\;\Sigma_2 Σ1Σ2,会导致参数过多,容易过拟合。改进方法就是使用同一个协方差矩阵,就能够表示这个模型。
经过改进,对于Class1,需要找到 μ 1 \mu_1 μ1和 Σ \Sigma Σ;对于Class2需要找到 μ 2 \mu_2 μ2,三个参数需要使得极大似然值 L ( μ 1 , μ 2 , Σ ) L(\mu_1,\mu_2,\Sigma) L(μ1,μ2,Σ)最大: L ( μ 1 , μ 2 , Σ ) = f μ 1 , Σ ( x 1 ) f μ 1 , Σ ( x 2 ) . . . f μ 1 , Σ ( x 7 9 ) × f μ 2 , Σ ( x 80 ) . . . f μ 2 , Σ ( x 140 ) L(\mu_1, \mu_2, \Sigma) = f_{\mu_1,\Sigma}(x^1)f_{\mu_1,\Sigma}(x^2)...f_{\mu_1,\Sigma}(x^79) \times f_{\mu_2,\Sigma}(x^{80})...f_{\mu_2,\Sigma}(x^{140}) L(μ1,μ2,Σ)=fμ1,Σ(x1)fμ1,Σ(x2)...fμ1,Σ(x79)×fμ2,Σ(x80)...fμ2,Σ(x140) 其中, x 1 − 79 x^{1-79} x1−79是属于Class1的, x 80 − 140 x^{80-140} x80−140是属于Class2的。
重新设计之后的共用的协方差矩阵 Σ = 79 140 Σ 1 + 61 140 Σ 2 \Sigma = \frac{79}{140}\Sigma^1+\frac{61}{140}\Sigma^2 Σ=14079Σ1+14061Σ2
结果如下图所示: 从结果看出,共用协方差矩阵之后,分界线变成线性的,分类准确率有所提高。
三部曲:
设计模型,贝叶斯公式,根据概率得到结果。评价模型的好坏,使用某对 μ \mu μ和 Σ \Sigma Σ得出的训练数据的可能性。找到最佳函数,就是找到使训练数据可能性最大的那组 μ \mu μ和 Σ \Sigma Σ。概率分布不一定要选高斯分布,还可以根据实际情况选择适合的模型。例如,对于二元特征的输入值(0或1),它们服从的是伯努利分布。
朴素贝叶斯分类器(Naive Bayes Classifier):假设输入数据的所有特征维度是相互独立的,就可以用朴素贝叶斯分类器。朴素贝叶斯公式: P ( C 1 ∣ x ) = P ( x ∣ C 1 ) P ( C 1 ) P ( x ∣ C 1 ) P ( C 1 ) + P ( x ∣ C 2 ) P ( C 2 ) = 1 1 + P ( x ∣ C 1 ) P ( C 1 ) P ( x ∣ C 2 ) P ( C 2 ) = 1 1 + e − z = σ ( z ) z = l n P ( x ∣ C 1 ) P ( C 1 ) P ( x ∣ C 2 ) P ( C 2 ) P(C_1|x) = \frac{P(x|C_1)P(C_1)}{P(x|C_1)P(C_1)+P(x|C_2)P(C_2)} \\ = \frac{1}{1+\frac{P(x|C_1)P(C_1)}{P(x|C_2)P(C_2)}} \\ = \frac{1}{1+e^{-z}} = \sigma(z) \\ z = ln\frac{P(x|C_1)P(C_1)}{P(x|C_2)P(C_2)} P(C1∣x)=P(x∣C1)P(C1)+P(x∣C2)P(C2)P(x∣C1)P(C1)=1+P(x∣C2)P(C2)P(x∣C1)P(C1)1=1+e−z1=σ(z)z=lnP(x∣C2)P(C2)P(x∣C1)P(C1)
定义:事情已经发生了,事情发生可能有很多原因,判断事情发生时由哪个原因引起的概率。
例子: 比如今天你没去学校,原因有两个,可能是生病了,也可能是自行车坏了。然后上课时老师发现你没来。这里是一个结果,你没来学校这件事情已经发生了。老师叫学霸计算一下概率,分别是因为生病了没来学校的概率,自行车坏了没来学校的概率。很显然,后验概率就是在事情发生后判断由哪一个原因引起的概率。这里的事情是你上学迟到,原因有生病了和自行车坏了。
数学表达: P ( 生 病 ∣ 迟 到 ) = P ( 生 病 且 迟 到 ) P ( 迟 到 ) = P ( 迟 到 ∣ 生 病 ) P ( 生 病 ) P ( 迟 到 ) P ( 自 行 车 坏 了 ∣ 迟 到 ) = P ( 自 行 车 坏 了 且 迟 到 ) P ( 迟 到 ) = P ( 迟 到 ∣ 自 行 车 坏 了 ) P ( 自 行 车 坏 了 ) P ( 迟 到 ) P(生病|迟到) = \frac{P(生病且迟到)}{P(迟到)} = \frac{P(迟到|生病)P(生病)}{P(迟到)} \\ P(自行车坏了|迟到) = \frac{P(自行车坏了且迟到)}{P(迟到)} = \frac{P(迟到|自行车坏了)P(自行车坏了)}{P(迟到)} P(生病∣迟到)=P(迟到)P(生病且迟到)=P(迟到)P(迟到∣生病)P(生病)P(自行车坏了∣迟到)=P(迟到)P(自行车坏了且迟到)=P(迟到)P(迟到∣自行车坏了)P(自行车坏了) 用A表示生病,B表示自行车坏了,C表示迟到,一般表示如下: P ( A ∣ B ) = P ( A B ) P ( B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A|B) = \frac{P(AB)}{P(B)} = \frac{P(B|A)P(A)}{P(B)} P(A∣B)=P(B)P(AB)=P(B)P(B∣A)P(A)
下面是与课程内容相关的后验概率的推导:
经过计算,化简:
最后,得到一个简单的计算式:
最后,说明一下 logistic regression和linear regression的区别:
输出的区别:linear regression的输出是连续的,在有限空间可取任意值。 logistic regression的输出期望是离散的,只有有限个数值。预期目标(label)的区别。linear regression的预期是连续变量, logistic regression的预期是离散的类别。最小化误差的方法区别。采用均方误差的linear regression对于大的误差施加二次倍数的惩罚,而logistic regression把较大的误差惩罚到一个渐进的常数。先验的区别。liner regression期望拟合训练数据,通过feature的线性加权来预测结果; logistic regression是在训练一个最大似然分类器。