李宏毅机器学习(三)

李宏毅机器学习(三)

此篇博文是基于李宏毅老师此视频的学习总结。此部分主要介绍,分类:概率生成模型。(Classification: Probabilistic Generative Model)

1、分类问题的解决方案

  1. 设计函数(模型):根据输入数据,输出分类结果。

  2. 设计损失函数:
    L(f)=nδ(f(xn)y^n) L(f) = \sum_n\delta(f(x^n) \neq \hat y^n)
    表示训练数据分类错误的总次数。

  3. 找到最优函数

2、贝叶斯公式应用

老师在课程中依旧以宝可梦为例,描述一个二元分类问题:将水系(Water)宝可梦和一般(Normal)宝可梦区分出来。

  1. 下图左边Class1是水系(Water),P(C1)P(C_1)表示选择到Class1中宝可梦的概率;下图右边Class2是一般(Normal),P(C2)P(C_2)表示选择到Class2中宝可梦的概率;
    李宏毅机器学习(三)

  2. 训练数据:79 Water, 61 Normal。因此可得到:
    P(C1)=79/(79+61)=0.56P(C2)=61/(79+61)=0.44 P(C_1) = 79/(79+61) = 0.56 \\ P(C_2) = 61/(79+61) = 0.44

  3. 设想一下,实际水系宝可梦不止训练数据中的79只,那么,当面对新数据(test data)的时候,怎么求出从Class1中选出它的概率呢?(不可能是0吧)。于是,可以假设训练数据是从一个高斯分布(包含所有的水系宝可梦数据)中取出的部分样本点。因此,问题就变成了求解这个高斯分布(正态分布):
    fμ,Σ(x)=1(2π)D/21Σ1/2exp{12(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) \}

    函数输入:向量x;输出:采样取到x的概率。函数形状由平均值μ\mu和协方矩阵Σ\Sigma决定。Σ|\Sigma|表示Σ\Sigma的行列式。

李宏毅机器学习(三)

  1. 求解高斯分布,也就是找到μ\muΣ\Sigma,【协方差矩阵求解方法】。用到的方法就是:极大似然估计

    • 给出一对μ\muΣ\Sigma,能够计算出高斯分布的79个样本的可能性。这个可能性就是高斯分布的Likelihood,使用公式表示为:
      L(μ,Σ)=fμ,Σ(x1)fμ,Σ(x2)fμ,Σ(x3)...fμ,Σ(x79) L(\mu, \Sigma) = f_{\mu, \Sigma}(x^1)f_{\mu, \Sigma}(x^2)f_{\mu, \Sigma}(x^3)...f_{\mu, \Sigma}(x^{79})

    • 根据极大似然(Maximum Likelihood)的计算,我们需要计算:
      L(μ,Σ)=fμ,Σ(x1)fμ,Σ(x2)fμ,Σ(x3)...fμ,Σ(x79)fμ,Σ(x)=1(2π)D/21Σ1/2exp{12(xμ)TΣ1(xμ)}μ,Σ=arg  maxμ,ΣL(μ,Σ)μ=179n=179xnΣ=179n=179(xnμ)(xnμ)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

    • 根据上述公式,计算79只水系的宝可梦和61只一般宝可梦的μ\muΣ\Sigma
      μ1=[75.071.3],Σ1=[874327327929]μ2=[55.659.8],Σ2=[847422422685] \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}

  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(C1)=79/(79+61)=0.56P(C2)=61/(79+61)=0.44P(xC1)=fμ1,Σ1(x)P(xC2)=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(C1x)>0.5P(C_1|x)>0.5,那么xx是属于水系宝可梦的;否则xx属于一般属性宝可梦。

  3. 接下来,看老师做出的结果:
    李宏毅机器学习(三)

    从结果可以看出,考虑宝可梦两个属性(Defence & SP Defence),训练之后,在测试数据上准确率只有47%。考虑所有7个特征属性,准确率也就在54%,结果依旧不理想。

3、改进模型

  1. 不同的Class(Class1 Class2)可以使用同一个协方差矩阵Σ\Sigma,协方差矩阵和输入特征的平方成正比的。

  2. 因此,两个高斯分布fμ1,Σ1(x)f_{\mu_1,\Sigma_1}(x)fμ2,Σ2(x)f_{\mu_2,\Sigma_2}(x)使用不同的协方差矩阵Σ1  Σ2\Sigma_1\;\Sigma_2,会导致参数过多,容易过拟合。改进方法就是使用同一个协方差矩阵,就能够表示这个模型。

  3. 经过改进,对于Class1,需要找到μ1\mu_1Σ\Sigma;对于Class2需要找到μ2\mu_2,三个参数需要使得极大似然值L(μ1,μ2,Σ)L(\mu_1,\mu_2,\Sigma)最大:
    L(μ1,μ2,Σ)=fμ1,Σ(x1)fμ1,Σ(x2)...fμ1,Σ(x79)×fμ2,Σ(x80)...fμ2,Σ(x140) 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})
    其中,x179x^{1-79}是属于Class1的,x80140x^{80-140}是属于Class2的。

  4. 重新设计之后的共用的协方差矩阵Σ=79140Σ1+61140Σ2\Sigma = \frac{79}{140}\Sigma^1+\frac{61}{140}\Sigma^2

  5. 结果如下图所示:
    李宏毅机器学习(三)
    从结果看出,共用协方差矩阵之后,分界线变成线性的,分类准确率有所提高。

  6. 三部曲:
    李宏毅机器学习(三)

  • 设计模型,贝叶斯公式,根据概率得到结果。
  • 评价模型的好坏,使用某对μ\muΣ\Sigma得出的训练数据的可能性。
  • 找到最佳函数,就是找到使训练数据可能性最大的那组μ\muΣ\Sigma

4、选择概率分布模型

  • 概率分布不一定要选高斯分布,还可以根据实际情况选择适合的模型。例如,对于二元特征的输入值(0或1),它们服从的是伯努利分布。

  • 朴素贝叶斯分类器(Naive Bayes Classifier):假设输入数据的所有特征维度是相互独立的,就可以用朴素贝叶斯分类器。朴素贝叶斯公式:
    P(C1x)=P(xC1)P(C1)P(xC1)P(C1)+P(xC2)P(C2)=11+P(xC1)P(C1)P(xC2)P(C2)=11+ez=σ(z)z=lnP(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)} \\ = \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)}
    李宏毅机器学习(三)

5、数学理论

1. 先验概率

  • 定义:直观理解,所谓“先”,就是在事情之前,即在事情发生之前事情发生的概率。是根据以往经验和分析得到的概率。
  • 例子:比如抛硬币,我们都认为正面朝上的概率是0.5,这就是一种先验概率,在抛硬币前,我们只有常识。这个时候事情还没发生,我们进行概率判断。所谓的先验概率是对事情发生可能性猜测的数学表示。

2. 后验概率

  • 定义:事情已经发生了,事情发生可能有很多原因,判断事情发生时由哪个原因引起的概率。

  • 例子: 比如今天你没去学校,原因有两个,可能是生病了,也可能是自行车坏了。然后上课时老师发现你没来。这里是一个结果,你没来学校这件事情已经发生了。老师叫学霸计算一下概率,分别是因为生病了没来学校的概率,自行车坏了没来学校的概率。很显然,后验概率就是在事情发生后判断由哪一个原因引起的概率。这里的事情是你上学迟到,原因有生病了和自行车坏了。

  • 数学表达:
    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(迟到)}
    用A表示生病,B表示自行车坏了,C表示迟到,一般表示如下:
    P(AB)=P(AB)P(B)=P(BA)P(A)P(B) P(A|B) = \frac{P(AB)}{P(B)} = \frac{P(B|A)P(A)}{P(B)}

  • 下面是与课程内容相关的后验概率的推导:
    李宏毅机器学习(三)

  • 经过计算,化简:
    李宏毅机器学习(三)
    李宏毅机器学习(三)

  • 最后,得到一个简单的计算式:
    李宏毅机器学习(三)

  • 最后,说明一下 logistic regression和linear regression的区别:

    • 输出的区别:linear regression的输出是连续的,在有限空间可取任意值。 logistic regression的输出期望是离散的,只有有限个数值。
    • 预期目标(label)的区别。linear regression的预期是连续变量, logistic regression的预期是离散的类别。
    • 最小化误差的方法区别。采用均方误差的linear regression对于大的误差施加二次倍数的惩罚,而logistic regression把较大的误差惩罚到一个渐进的常数。
    • 先验的区别。liner regression期望拟合训练数据,通过feature的线性加权来预测结果; logistic regression是在训练一个最大似然分类器。