6.高斯判别法(GDA)

多元正态分布

p(x;μ,Σ)=1(2π)n/2∣Σ∣1/2exp(−12(x−μ)TΣ−1(x−μ))p(x;\mu,\Sigma)=\frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}} exp(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)) p(x;μ,Σ)=(2π)n/2∣Σ∣1/21​exp(−21​(x−μ)TΣ−1(x−μ))

假如我们有一个分类问题,其中输入特征 xxx 是一系列的连续随机变量(continuous-valued random variables),那就可以使用高斯判别分析(Gaussian Discriminant Analysis ,缩写为 GDA)模型,其中对 p(x∣y)p(x|y)p(x∣y)用多元正态分布来进行建模。这个模型为:
y∼Bernoulli(ϕ)x∣y=0∼N(μo,Σ)x∣y=1∼N(μ1,Σ)\begin{aligned} y & \sim Bernoulli(\phi)\\ x|y = 0 & \sim N(\mu_o,\Sigma)\\ x|y = 1 & \sim N(\mu_1,\Sigma)\\ \end{aligned} yx∣y=0x∣y=1​∼Bernoulli(ϕ)∼N(μo​,Σ)∼N(μ1​,Σ)​
分布写出来的具体形式如下:
p(y)=ϕy(1−ϕ)1−yp(x∣y=0)=1(2π)n/2∣Σ∣1/2exp(−12(x−μ0)TΣ−1(x−μ0))p(x∣y=1)=1(2π)n/2∣Σ∣1/2exp(−12(x−μ1)TΣ−1(x−μ1))\begin{aligned} p(y) & =\phi^y (1-\phi)^{1-y}\\ p(x|y=0) & = \frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}} exp ( - \frac{1}{2}(x-\mu_0)^T\Sigma^{-1}(x-\mu_0) )\\ p(x|y=1) & = \frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}} exp ( - \frac{1}{2}(x-\mu_1)^T\Sigma^{-1}(x-\mu_1) )\\ \end{aligned} p(y)p(x∣y=0)p(x∣y=1)​=ϕy(1−ϕ)1−y=(2π)n/2∣Σ∣1/21​exp(−21​(x−μ0​)TΣ−1(x−μ0​))=(2π)n/2∣Σ∣1/21​exp(−21​(x−μ1​)TΣ−1(x−μ1​))​
在上面的等式中,模型的参数包括ϕ,Σ,μ0和μ1\phi, \Sigma, \mu_0 和 \mu_1ϕ,Σ,μ0​和μ1​。(要注意,虽然这里有两个不同方向的均值向量μ0\mu_0μ0​ 和 μ1\mu_1μ1​,针对这个模型还是一般只是用一个协方差矩阵Σ\SigmaΣ。)取对数的似然函数(log-likelihood)如下所示:
l(ϕ,μ0,μ1,Σ)=log⁡∏i=1mp(x(i),y(i);ϕ,μ0,μ1,Σ)=log⁡∏i=1mp(x(i)∣y(i);μ0,μ1,Σ)p(y(i);ϕ)\begin{aligned} l(\phi,\mu_0,\mu_1,\Sigma) &= \log \prod^m_{i=1}p(x^{(i)},y^{(i)};\phi,\mu_0,\mu_1,\Sigma)\\ &= \log \prod^m_{i=1}p(x^{(i)}|y^{(i)};\mu_0,\mu_1,\Sigma)p(y^{(i)};\phi)\\ \end{aligned} l(ϕ,μ0​,μ1​,Σ)​=logi=1∏m​p(x(i),y(i);ϕ,μ0​,μ1​,Σ)=logi=1∏m​p(x(i)∣y(i);μ0​,μ1​,Σ)p(y(i);ϕ)​
通过使 lll 取得最大值,找到对应的参数组合,然后就能找到该参数组合对应的最大似然估计,如下所示(参考习题集1):
ϕ=1m∑i=1m1{y(i)=1}μ0=∑i=1m1{y(i)=0}x(i)∑i=1m1{y(i)=0}μ1=∑i=1m1{y(i)=1}x(i)∑i=1m1{y(i)=1}Σ=1m∑i=1m(x(i)−μy(i))(x(i)−μy(i))T\begin{aligned} \phi & = \frac {1}{m} \sum^m_{i=1}1\{y^{(i)}=1\}\\ \mu_0 & = \frac{\sum^m_{i=1}1\{y^{(i)}=0\}x^{(i)}}{\sum^m_{i=1}1\{y^{(i)}=0\}}\\ \mu_1 & = \frac{\sum^m_{i=1}1\{y^{(i)}=1\}x^{(i)}}{\sum^m_{i=1}1\{y^{(i)}=1\}}\\ \Sigma & = \frac{1}{m}\sum^m_{i=1}(x^{(i)}-\mu_{y^{(i)}})(x^{(i)}-\mu_{y^{(i)}})^T\\ \end{aligned} ϕμ0​μ1​Σ​=m1​i=1∑m​1{y(i)=1}=∑i=1m​1{y(i)=0}∑i=1m​1{y(i)=0}x(i)​=∑i=1m​1{y(i)=1}∑i=1m​1{y(i)=1}x(i)​=m1​i=1∑m​(x(i)−μy(i)​)(x(i)−μy(i)​)T​
用图形化的方式来表述,这个算法可以按照下面的图示所表示:

高斯判别模型能比逻辑回归对数据进行更强的建模和假设(stronger modeling assumptions)。这也就意味着,在这两种模型假设都可用的时候,高斯判别分析法去拟合数据是更好的,是一个更好的模型。 尤其当p(x∣y)p(x|y)p(x∣y)已经确定是一个高斯分布(有共享的协方差矩阵Σ\SigmaΣ),那么高斯判别分析是渐进有效的(asymptotically efficient)。 实际上,这也意味着,在面对非常大的训练集(训练样本规模 mmm特别大)的时候,严格来说,可能就没有什么别的算法能比高斯判别分析更好(比如考虑到对 p(y∣x)p(y|x)p(y∣x)估计的准确度等等)。所以在这种情况下就表明,高斯判别分析(GDA)是一个比逻辑回归更好的算法;再扩展一下,即便对于小规模的训练集,我们最终也会发现高斯判别分析(GDA)是更好的。

朴素贝叶斯

要给p(x∣y)p(x|y)p(x∣y)建模,先来做一个非常强的假设。我们假设特征向量xix_ixi​ 对于给定的 yyy 是独立的。 这个假设也叫做朴素贝叶斯假设(Naive Bayes ,NB assumption), 基于此假设衍生的算法也就叫做朴素贝叶斯分类器(Naive Bayes classifier)。 例如,如果 y=1y = 1y=1 意味着一个邮件是垃圾邮件;然后其中"buy" 是第208720872087个单词,而 "price"是第398313983139831个单词;那么接下来我们就假设,如果我告诉你 y=1y = 1y=1,也就是说某一个特定的邮件是垃圾邮件,那么对于x2087x_{2087}x2087​ (也就是单词 buy 是否出现在邮件里)的了解并不会影响你对x39831x_{39831}x39831​ (单词price出现的位置)的采信值。更正规一点,可以写成 p(x2087∣y)=p(x2087∣y,x39831)p(x_{2087}|y) = p(x_{2087}|y, x_{39831})p(x2087​∣y)=p(x2087​∣y,x39831​)。(要注意这个并不是说x2087x_{2087}x2087​ 和 x39831x_{39831}x39831​这两个特征是独立的,那样就变成了p(x2087)=p(x2087∣x39831)p(x_{2087}) = p(x_{2087}|x_{39831})p(x2087​)=p(x2087​∣x39831​),我们这里是说在给定了 yyy 的这样一个条件下,二者才是有条件的独立。)

然后我们就得到了等式:
p(x1,...,x50000∣y)=p(x1∣y)p(x2∣y,x1)p(x3∣y,x1,x2)...p(x50000∣y,x1,x2,...,x49999)=p(x1∣y)p(x2∣y)p(x3∣y)...p(x50000∣y)=∏i=1np(xi∣y)\begin{aligned} p(x_1, ..., x_{50000}|y) & = p(x_1|y)p(x_2|y,x_1)p(x_3|y,x_1,x_2) ... p(x_{50000}|y,x_1,x_2,...,x_{49999})\\ & = p(x_1|y)p(x_2|y)p(x_3|y) ... p(x_{50000}|y)\\ & = \prod^n_{i=1}p(x_i|y)\\ \end{aligned} p(x1​,...,x50000​∣y)​=p(x1​∣y)p(x2​∣y,x1​)p(x3​∣y,x1​,x2​)...p(x50000​∣y,x1​,x2​,...,x49999​)=p(x1​∣y)p(x2​∣y)p(x3​∣y)...p(x50000​∣y)=i=1∏n​p(xi​∣y)​
第一行的等式就是简单地来自概率的基本性质,第二个等式则使用了朴素贝叶斯假设。这里要注意,朴素贝叶斯假设也是一个很强的假设,产生的这个算法可以适用于很多种问题。

我们这个模型的参数为 ϕi∣y=1=p(xi=1∣y=1),ϕi∣y=0=p(xi=1∣y=0)\phi_{i|y=1} = p (x_i = 1|y = 1), \phi_{i|y=0} = p (x_i = 1|y = 0)ϕi∣y=1​=p(xi​=1∣y=1),ϕi∣y=0​=p(xi​=1∣y=0), 而 ϕy=p(y=1)\phi_y = p (y = 1)ϕy​=p(y=1)。和以往一样,给定一个训练集{(x(i),y(i));i=1,...,m}\{(x^{(i)},y^{(i)}); i = 1, ..., m\}{(x(i),y(i));i=1,...,m},就可以写出下面的联合似然函数:
L(ϕy,ϕj∣y=0,ϕj∣y=1)=∏i=1mp(x(i),y(i))\mathcal{L}(\phi_y,\phi_{j|y=0},\phi_{j|y=1})=\prod^m_{i=1}p(x^{(i)},y^{(i)}) L(ϕy​,ϕj∣y=0​,ϕj∣y=1​)=i=1∏m​p(x(i),y(i))
找到使联合似然函数取得最大值的对应参数组合 ϕy,ϕi∣y=0和ϕi∣y=1\phi_y , \phi_{i|y=0} 和 \phi_{i|y=1}ϕy​,ϕi∣y=0​和ϕi∣y=1​ 就给出了最大似然估计:
ϕj∣y=1=∑i=1m1{xj(i)=1∧y(i)=1}∑i=1m1{y(i)=1}ϕj∣y=0=∑i=1m1{xj(i)=1∧y(i)=0}∑i=1m1{y(i)=0}ϕy=∑i=1m1{y(i)=1}m\begin{aligned} \phi_{j|y=1} &=\frac{\sum^m_{i=1}1\{x_j^{(i)} =1 \wedge y^{(i)} =1\} }{\sum^m_{i=1}1\{y^{(i)} =1\}} \\ \phi_{j|y=0} &= \frac{\sum^m_{i=1}1\{x_j^{(i)} =1 \wedge y^{(i)} =0\} }{\sum^m_{i=1}1\{y^{(i)} =0\}} \\ \phi_{y} &= \frac{\sum^m_{i=1}1\{y^{(i)} =1\}}{m}\\ \end{aligned} ϕj∣y=1​ϕj∣y=0​ϕy​​=∑i=1m​1{y(i)=1}∑i=1m​1{xj(i)​=1∧y(i)=1}​=∑i=1m​1{y(i)=0}∑i=1m​1{xj(i)​=1∧y(i)=0}​=m∑i=1m​1{y(i)=1}​​
在上面的等式中,"∧\wedge∧(and)“这个符号的意思是逻辑"和”。这些参数有一个非常自然的解释。例如 ϕj∣y=1\phi_{j|y=1}ϕj∣y=1​ 正是单词 jjj 出现的邮件中垃圾邮件所占 (y=1)(y = 1)(y=1) 的比例。

拟合好了全部这些参数之后,要对一个新样本的特征向量 xxx 进行预测,只要进行如下的简单地计算:
p(y=1∣x)=p(x∣y=1)p(y=1)p(x)=(∏i=1np(xi∣y=1))p(y=1)(∏i=1np(xi∣y=1))p(y=1)+(∏i=1np(xi∣y=0))p(y=0)\begin{aligned} p(y=1|x)&= \frac{p(x|y=1)p(y=1)}{p(x)}\\ &= \frac{(\prod^n_{i=1}p(x_i|y=1))p(y=1)}{(\prod^n_{i=1}p(x_i|y=1))p(y=1)+ (\prod^n_{i=1}p(x_i|y=0))p(y=0)} \\ \end{aligned} p(y=1∣x)​=p(x)p(x∣y=1)p(y=1)​=(∏i=1n​p(xi​∣y=1))p(y=1)+(∏i=1n​p(xi​∣y=0))p(y=0)(∏i=1n​p(xi​∣y=1))p(y=1)​​
然后选择有最高后验概率的概率。

最后我们要注意,刚刚我们对朴素贝叶斯算法的使用中,特征向量 xix_ixi​ 都是二值化的,其实特征向量也可以是多个离散值,比如{1,2,...,ki}\{1, 2, ..., k_i\}{1,2,...,ki​}这样也都是可以的。这时候只需要把对p(xi∣y)p(x_i|y)p(xi​∣y) 的建模从伯努利分布改成多项式分布。实际上,即便一些原始的输入值是连续值(比如我们第一个案例中的房屋面积),也可以转换成一个小规模的离散值的集合,然后再使用朴素贝叶斯方法。例如,如果我们用特征向量 xix_ixi​ 来表示住房面积,那么就可以按照下面所示的方法来对这一变量进行离散化:

居住面积 &lt;400&lt;400<400 400−800400-800400−800 800−1200800-1200800−1200 1200−16001200-16001200−1600 &gt;1600&gt;1600>1600
离散值 xix_ixi​ 111 222 333 444 555

这样,对于一个面积为 890890890 平方英尺的房屋,就可以根据上面这个集合中对应的值来把特征向量的这一项的xix_ixi​值设置为333。然后就可以用朴素贝叶斯算法,并且将p(xi∣y)p(x_i|y)p(xi​∣y)作为多项式分布来进行建模,就都跟前面讲过的内容一样了。当原生的连续值的属性不太容易用一个多元正态分布来进行建模的时候,将其特征向量离散化然后使用朴素贝叶斯法(NB)来替代高斯判别分析法(GDA),通常能形成一个更好的分类器。

拉普拉斯平滑(Laplace smoothing)
ϕj=∑i=1m1{z(i)=j}+1m+k\phi_j=\frac{\sum^m_{i=1}1\{z^{(i)}=j\}+1}{m+k} ϕj​=m+k∑i=1m​1{z(i)=j}+1​
这里首先是对分子加111,然后对分母加kkk,要注意∑j=1kϕj=1\sum^k_{j=1} \phi_j = 1∑j=1k​ϕj​=1依然成立(自己检验一下),这是一个必须有的性质,因为ϕj\phi_jϕj​ 是对概率的估计,然后所有的概率加到一起必然等于111。另外对于所有的 jjj 值,都有ϕj≠0\phi_j \neq 0ϕj​̸​=0,这就解决了概率估计为零的问题了。在某些特定的条件下(相当强的假设条件下,arguably quite strong),可以发现拉普拉斯平滑还真能给出对参数ϕj\phi_jϕj​ 的最佳估计(optimal estimator)。

回到我们的朴素贝叶斯分选器问题上,使用了拉普拉斯平滑之后,对参数的估计就写成了下面的形式:
ϕj∣y=1=∑i=1m1{xj(i)=1∧y(i)=1}+1∑i=1m1{y(i)=1}+2ϕj∣y=0=∑i=1m1{xj(i)=1∧y(i)=10}+1∑i=1m1{y(i)=0}+2\begin{aligned} \phi_{j|y=1} &amp; =\frac{\sum^m_{i=1}1\{x_j^{(i)}=1\wedge y ^{(i)}=1\}+1}{\sum^m_{i=1}1{\{y^{(i)}=1\}}+2}\\ \phi_{j|y=0} &amp; =\frac{\sum^m_{i=1}1\{x_j^{(i)}=1\wedge y ^{(i)}=10\}+1}{\sum^m_{i=1}1{\{y^{(i)}=0\}}+2}\\ \end{aligned} ϕj∣y=1​ϕj∣y=0​​=∑i=1m​1{y(i)=1}+2∑i=1m​1{xj(i)​=1∧y(i)=1}+1​=∑i=1m​1{y(i)=0}+2∑i=1m​1{xj(i)​=1∧y(i)=10}+1​​
(在实际应用中,通常是否对ϕy\phi_yϕy​ 使用拉普拉斯并没有太大影响,因为通常我们会对每个垃圾邮件和非垃圾邮件都有一个合适的划分比例,所以ϕy\phi_yϕy​ 会是对p(y=1)p(y = 1)p(y=1) 的一个合理估计,无论如何都会与零点有一定距离。)

机器学习(六)——高斯判别法(GDA)相关推荐

  1. 高斯判别算法GDA(吴恩达机器学习实践总结,四)

    通过前面的实践,我们已经可以通过正态分布函数生成样本点,这是什么意思呢?其实也就是说,任意图像上的样本点如果能和我们的模板重合,我们就认为,这样的样本满足了正态分布,我们已经掌握,调整参数,生成不同的 ...

  2. 高斯判别算法GDA(吴恩达机器学习c#实践,生成高斯模板显示同心圆马氏距离,一)

    首先实现P(x|y)=高斯函数(正态分布),即y是正态分布,是条件,我们把它还原到图像界面I(i,j)每一个像素,是结果. 这个实际就是生成高斯模板,我们前面有3*3的高斯生成算法,但是根本没有办法显 ...

  3. 高斯判别算法GDA(吴恩达机器学习c#实践,生成高斯模板显示同心椭圆马氏距离,二)

    先看以下是个什么? 真看不出什么,对比一下还行,还是看不出来,我们让马氏距离放大十倍等于15,高斯值放大1000倍等于4的像素加以阻挡指示出来,使用白色. 同心椭圆:(为什么协方差矩阵?0值改0.5, ...

  4. 高斯判别算法GDA(吴恩达机器学习c#实践,高斯模板上同心椭圆马氏距离画法,三)

    先画一个水平椭圆吧!(参考计算机图形学基础) 以下是画旋转椭圆的C#代码: //因为是11*11,不妥,X12,所以改为44*44*3*3,最终放大了16倍             byte[] ga ...

  5. 机器学习(六)分类模型--线性判别法、距离判别法、贝叶斯分类器

    机器学习(六)分类模型--线性判别法.距离判别法.贝叶斯分类器 首先我们了解常见的分类模型和算法有哪些 线性判别法 简单来说就是用一些规定来寻找某一条直线,用直线划分学习集,然后根据待测点在直线的哪一 ...

  6. 高斯判别分析 matlab,机器学习导论(5)–GDA高斯判别模型

    引言 之前介绍过分类方法使用最小二乘法或者Logistic回归实现分类,通过直接给定相应的预测函数实现数据的划分,例如预测函数在二分类中的实现就是一条直线之类.接下来对于给定的测试样本特征X,直接判定 ...

  7. 斯坦福CS229机器学习笔记-Lecture5 - 生成学习算法+高斯判别GDA+朴素贝叶斯+拉普拉斯平滑

    作者:teeyohuang 邮箱:teeyohuang@163.com 本文系原创,供交流学习使用,转载请注明出处,谢谢 声明:此系列博文根据斯坦福CS229课程,吴恩达主讲 所写,为本人自学笔记,写 ...

  8. 机器学习算法 高斯识别分析(GDA) 多元高斯分布 CS229

    Gaussian discriminant analysis The first generative learning algorithm that we'll look at is Gaussia ...

  9. 【算法讲18:二次剩余】勒让德符号 | 欧拉判别法 | Cipolla 算法

    [算法讲18:二次剩余] Source\mathfrak{Source}Source ⌈\lceil⌈二次剩余⌋\rfloor⌋与⌈\lceil⌈二次非剩余⌋\rfloor⌋ ⌈\lceil⌈二次互反 ...

最新文章

  1. DeepMind提出强化学习新算法,教智能体从零学控制
  2. Android开发学习笔记(二)——编译和运行原理(1)
  3. Swift3.0语言教程替换子字符串
  4. Python爬虫学习系列教程
  5. boost::mpl模块bind相关的测试程序
  6. 40个精心设计的免费的社交网络图标
  7. Backbone学习日记第二集——Model
  8. 3.性能之巅 洞悉系统、企业与云计算 --- 操作系统
  9. 推荐几本大学生必看的书单
  10. java鼠标乱跑_光标乱跑怎么办 光标乱跑解决方法【图文】
  11. 系统提示无法删除文件或文件夹的常用解决办法
  12. Oracle11g64位安装步骤
  13. [ubuntu]关闭/打开笔记本电脑触控板
  14. Linux--问题1--从用户态进入内核态
  15. word标题前自动分页
  16. 洛谷P2255 动态规划
  17. 利用java解一元二次方程
  18. EOS智能合约开发与交互
  19. 全球模具经典案例|SPC软件在开模流程中的应用
  20. Qt之调色板类QPalette的使用

热门文章

  1. matlab学习教程,数模比赛入门速成
  2. 24部电影的人生哲理
  3. 戳对地方,葛优躺秒变工作狂
  4. nginx配置之温故而知新
  5. 作为一名IT狗,天天加班,快变秃子了,我决定去植发……
  6. Hihocoder-H国的身份证号码I
  7. FX5U和je-C伺服通讯案例和学习资料
  8. java cps变换_C#中的递归APS和CPS模式详解
  9. 超云服务器 节能清单,天地超云推出高温节能服务器新品--科技--人民网
  10. 程序设计思维模测 - M4