机器学习笔记(2) —— 生成模型(概率模型)

前言

笔者一直在ipad上做手写笔记,最近突然想把笔记搬到博客上来,也就有了下面这些。因为本是给自己看的笔记,所以内容很简陋,只是提了一些要点。随缘更新。

正文

生成模型和判别模型的区别

  • 生成模型:学习得到联合概率分布P(x,y),即特征x和标记y共同出现的概率,然后求条件概率分布。能够学习到数据生成的机制。
  • 判别模型:学习得到条件概率分布P(y|x),即在特征x出现的情况下标记y出现的概率。

引用知乎上我看到的一个举例,要确定一个羊是山羊还是绵羊

  • 用判别模型的方法是从历史数据中学习到模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,是绵羊的概率。
  • 利用生成模型是根据山羊的特征首先学习出一个山羊的模型,然后根据绵羊的特征学习出一个绵羊的模型,然后从这只羊中提取特征,放到山羊模型中看概率是多少,在放到绵羊模型中看概率是多少,哪个大就是哪个。

为什么不使用回归模型

  1. 分类问题也是确定一条线,将我们要分类的数据集分成若干种。分类问题应该是这条线将两边的模型分得越开越好,但是如果我们采用回归模型去确定这条线,回归模型的loss function是计算点到线的距离的平方和,那距离越远loss function的值越大,那和我们的意愿就背道而驰了。所以我们如果把分类问题应回归模型硬解,会得不到一个好的模型。例如下图中绿线是我们想要得到的,但是紫线是回归模型所认为的最佳的模型。

  2. 在多分类问题中,类别1设为1,类别2设为2,类别3设为3,如果采用回归模型,会认为1、2或2、3比较接近,但实际上并没有这种关系的存在,这会导致我们的model出现问题。

生成模型 —— 后验概率

高斯分布

fμ,Σ=1(2π)D21Σ12exp[12(xμ)TΣ1(xμ)]f_{\mu ,\Sigma }=\frac {1}{( 2\pi ) ^{\frac {D}{2}}} \dfrac {1}{\left| \Sigma \right| ^{\frac {1}{2}}}\exp[-\dfrac {1}{2}\left( x-\mu \right) ^{T}\Sigma ^{-1}\left( x- \mu \right)]

  • μ\mu 为均值向量
  • Σ\Sigma 为方差矩阵
  • DDxx 的维数
    这是一个概率密度函数,简单的说可以把它看成一个function,输入 xx 输出 xx 的概率(当然这不是概率,但和概率成正比)。

分类模型(Step1:build model)

C1=C_1= { 种类一 },C2=C_2= { 种类二 }
P(C1x)=P(xC1)P(C1)P(xC1)P(C1)+P(xC2)P(C2)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(xC1)=fμ1,Σ1P(x|C_1)=f_{\mu^1 ,\Sigma^1 }
  • P(xC2)=fμ2,Σ2P(x|C_2)=f_{\mu^2 ,\Sigma^2 }
    需要求解出两组 μ,Σ\mu,\Sigma

最大似然估计

假设有 nn 个点,L(μ,Σ)=fμ,Σ(x1)fμ,Σ(x2)...fμ,Σ(xn)L(\mu,\Sigma)=f_{\mu,\Sigma}(x_1)f_{\mu,\Sigma}(x_2)...f_{\mu,\Sigma}(x_n) 是生成这些点的概率(说成概率更容易理解),也成为样本的似然函数。
为使得 L(μ,Σ)L(\mu,\Sigma) 最大的 L(μ,Σ)L(\mu,\Sigma) 记为(μ,Σ)(\mu^*,\Sigma^*),即所有 L(μ,Σ)L(\mu,\Sigma) 的最大似然估计。
我们的目标是使生成这些的点概率最大,即我们要求 (μ,Σ)(\mu^*,\Sigma^*)

总结一下:极大似然估计就是先假设生成数据(数据分布)的模型已知(比如高斯分布),但是模型的具体参数不知(不知道高斯分布中的均值和标准差),通过已有的数据,进行参数的推断求解,使得该模型(高斯分布)生成已有观测数据的可能性最大。

目标函数(Step2:Goodness of function)

argmaxμ,ΣL(μ,Σ)\arg \max _{\mu ,\Sigma } L(\mu ,\Sigma )

求解(Step3:the best function)

利用微分等于0,易得:
μ=1ni=1nxi\mu^* = \frac{1}{n}\sum ^{n}_{i=1}x_i
Σ=1ni=1n(xiμ)(xiμ)T\Sigma^*=\frac{1}{n}\sum^{n}_{i=1}(x_i-\mu^*)(x_i-\mu^*)^T

模型优化(协方差)

我们通常不会给每个高斯分布都去计算一套不同的最大似然估计,Σ\Sigma 和输入的feature成平方关系,当平方很大时,Σ\Sigma 就会变的非常巨大,一是计算时间太长,二是容易过拟合。因此我们给每个高斯分布相同的 Σ\Sigma

公式转变为(以二分类为例):
argmaxμ1,μ2,ΣL(μ1,μ2,Σ)\arg \max _{\mu_1, \mu_2 ,\Sigma } L(\mu_1,\mu_2 ,\Sigma )

  • L(μ1,μ2,Σ)=fμ1,Σ(x1)...fμ,Σ(xn)fμ2,Σ(xn+1)...fμ2,Σ(xn+m)L(\mu^1,\mu^2,\Sigma)=f_{\mu^1,\Sigma}(x_1)...f_{\mu,\Sigma}(x_n)*f_{\mu^2,\Sigma}(x_{n+1})...f_{\mu^2,\Sigma}(x_{n+m})

求解:

  • μ1,μ2\mu_1,\mu_2 和原先一致
    μ1=1ni=1nxi\mu_1 = \frac{1}{n}\sum ^{n}_{i=1}x_i
    μ2=1ni=n+1n+mxi\mu_2 = \frac{1}{n}\sum ^{n+m}_{i=n+1}x_i
  • Σ\Sigma 为二者加权平均
    Σ=nm+nΣ1+mn+mΣ2\Sigma=\frac{n}{m+n}\Sigma_1+\frac{m}{n+m}\Sigma_2

优化过后的分类曲线变成了线性的

一个合适的概率分布模型

你可能会问为什么用高斯分布,用李宏毅老师的话来说就是,如果我用别的分布模型你也会问同样的问题。
别的分布模型当然可以使用,例如二分类问题我们可以使用伯努利分布。高斯分布更加通用、普遍,所以我们在此用是用高斯分布举例,并不是一定要用高斯分布。

后验概率公式推导

P(C1x)=P(xC1)P(C1)P(xC1)P(C1)+P(xC2)P(C2)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)}
经过处理你会发现这是一个关于 zz 的sigmiod函数(这下知道Sigmoid函数是哪来的吧)
=11+p(xC2)P(C2)p(x/C1)p(C1)=11+exp(z)=σ(z)=\dfrac {1}{1+\dfrac {p\left( x|C_2 \right) P\left( C_2\right) }{p\left( x/C_{1}\right) p\left( C_{1}\right) }}=\frac{1}{1+exp(z)}=\sigma(z)

z=lnP(xC1)P(C1)P(xC2)P(C2)z=ln\frac{P(x|C_1)P(C_1)}{P(x|C_2)P(C_2)}

然后一同操作猛如虎,公式我就不打了,太长了,估计你们也没有兴趣看。反正最后得到
z=(μ1μ2)TΣ1x12(μ1)Tμ1+12(μ2)TΣ1μ2+lnnmz=(\mu_1-\mu_2)^T\Sigma^{-1}x-\frac{1}{2}(\mu_1)^T\mu_1+\frac{1}{2}(\mu_2)^T\Sigma^{-1}\mu_2+ln\frac{n}{m}
我们令

  • w=(μ1μ2)TΣ1w=(\mu_1-\mu_2)^T\Sigma^{-1}
  • b=12(μ1)Tμ1+12(μ2)TΣ1μ2+lnnmb=\frac{1}{2}(\mu_1)^T\mu_1+\frac{1}{2}(\mu_2)^T\Sigma^{-1}\mu_2+ln\frac{n}{m}

wwbb 都是常数,也就是说,最后我们得到的后验模型是个线性模型。

后记

其实判别模型和生成模型应该一起讲的,因为这两个模型的推到思路是连贯的。但是实在太长了,就先把生成模型写出来了,判别模型改天再写。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章