高斯判别分析算法及其python实现

高斯判别分析算法(Gaussian discriminat analysis)

高斯判别算法是一个典型的生成学习算法(关于生成学习算法可以参考我的另外一篇博客)。在这个算法中,我们假设p(x|y)服从多元正态分布。

注:在判别学习算法中,我们假设p(y|x)服从一维正态分布,这个很好类比,因为在模型中输入数据X通常是拥有很多维度的,所以对于X的条件概率建模时要取多维正态分布。

多元正态分布

多元正态分布也叫多元高斯分布,这个分布的两个参数分别是平均向量μ∈?n和一个协方差矩阵∑∈?n×n

关于协方差矩阵的定义;假设X是由n个标量随机变量组成的列向量,并且μk是第k个元素的期望值,即μk=E(Xk),那么协方差矩阵被定义为

∑=E{(X?E(X))(X?E(X)T)}=??????E[(X1?μ1)(X1?μ1)]E[(X2?μ2)(X1?μ1)]?E[(Xn?μn)(X1?μ1)]E[(X1?μ1)(X2?μ2)]E[(X2?μ2)(X2?μ2)]?E[(Xn?μn)(X2?μ2)]????E[(X1?μ1)(Xn?μn)]E[(X2?μ2)(Xn?μn)]?E[(Xn?μn)(Xn?μn)]??????

矩阵第(i,j)个元素表示Xi与Xj的协方差。协方差矩阵是对称而且是半正定的。

多元高斯分布可以记为N(u? ,∑),其概率密度的具体表达式为(比较复杂,但知道形式就好,具体推导中用处较少)

p(x,μ,Σ)=1(2π)n/2|Σ|12exp(?12(x?μ)TΣ?1(x?μ))

在上面的公式中,|Σ|表示的是协方差矩阵的行列式,对一个随机变量X服从N(u? ,Σ),它的数学期望是:

E(X)=∫xxp(x,μ,Σ)dx=μ

,根据上面对协方差矩阵的定义

cov(X)=Σ

下面是一些二维高斯分布的概率密度图像:

最右边的图像展现的二维高斯分布的均值是零向量(2x1的零向量),协方差矩阵Σ=I(2x2的单位矩阵),像这样以零向量为均值以单位阵为协方差的多维高斯分布称为标准正态分布,中间的图像以零向量为均值,Σ=0.6I;最右边的图像中Σ=2I,观察发现当Σ越大时,高斯分布越“铺开”,当Σ越小时,高斯分布越“收缩”。

让我们看一些其他例子对比发现规律

上图中展示的三个高斯分布对应的均值均为零向量,协方差矩阵分别对应与下面三个

Σ=[1001];Σ=[10.50.51];Σ=[10.80.81]

最左边的图像是我们熟悉的标准二维正态分布,然后我们观察到当我们增加Σ的非主对角元素时,概率密度图像沿着45°线(x1=x2)“收缩”,从对应的等高线轮廓图可以跟清楚的看到这一点:

再看最后一组通过改变不同的Σ得到的例子

上面三幅图对应的Σ分别是

Σ=[1?0.5?0.51];Σ=[1?0.8?0.81];Σ=[30.80.81]

通过对比右边和中间的两幅图发现,通过减少主对角元素可以让概率密度图像变得“收缩”,不过是在相反的方向上。

在最后的例子中,我们固定Σ=I,变动μ,从而可以移动概率密度图像的均值。

上图中对应的μ分别是

μ=[10];μ=[?0.50];μ=[?1?1.5]

高斯判别分析模型

当我们处理输入特征是连续随机变量x时的分类问题时,我们可以使用高斯判别分析模型(GDA),用多元正态分布模型来描述p(x|y),模型的具体数学表达式是这样的:

y~Bernoulli(?)

x|y=0~N(μ0,Σ)

x|y=1~N(μ1,Σ)

写出他们的概率分布为:

p(y)=?y(1??)1?y

p(x|y=0)=1(2π)n/2|Σ|12exp(?12(x?μ0)TΣ?1(x?μ0))

p(x|y=1)=1(2π)n/2|Σ|12exp(?12(x?μ1)TΣ?1(x?μ1))

现在我们的模型有四个参数?,Σ,μ0,μ1(两个不同的均值向量分别对应与y=0和y=1两种情况,但是通常使用同一个协方差矩阵Σ),下面极大似然函数来估计四个参数。

l(?,μ0,μ1,Σ)=log∏i=1mp(x(i),y(i);?,μ0,μ1,Σ)=log∏i=1mp((x(i)|y(i);μ0,μ1,Σ)p(y(i);?)

通过最大化似然函数l可以得到上面四个参数的估计值:

?=1m∑i=1m1{y(i)=1}

μ0=∑mi=11{y(i)=0}xi∑mi=11{y(i)=0}

μ1=∑mi=11{y(i)=1}xi∑mi=11{y(i)=1}

Σ=1m∑i=1m(x(i)?μy(i))(x(i)?μy(i))T

我们用图像直观的描述一下算法处理的结果:

在图像中展示的是我们的训练数据集,并且在图上画出了两类分类数据的拟合出得高斯分布的等高线,两个等高线的轮廓和旋转方向相同,因为两个高斯分布的协方差矩阵Σ相同,但是他们的均值μ0和μ1不同,图中的直线是决策边界,落在这条直线上得点满足p(y=1|x)=0.5,如果点落在直线上侧,我们预测y=1,落在直线下侧,预测y=0。

具体的python演示demo将于最近更新。

时间: 2024-09-26 20:04:15

高斯判别分析算法及其python实现的相关文章

【cs229-Lecture5】生成学习算法:1)高斯判别分析(GDA);2)朴素贝叶斯(NB)

参考: cs229讲义 机器学习(一):生成学习算法Generative Learning algorithms:http://www.cnblogs.com/zjgtan/archive/2013/06/08/3127490.html 首先,简单比较一下前几节课讲的判别学习算法(Discriminative Learning Algorithm)和本节课讲的生成学习算法(Generative Learning Algorithm)的区别. eg:问题:Consider a classi?cat

机器学习:线性分类、高斯判别分析(GDA)、朴素贝叶斯(NB)

简介:这篇文章主要介绍简单的二分类算法:线性分类器.高斯判别分析.朴素贝叶斯. 一.线性分类器 加入给定如下两类数据(0-1),目测分类器应该对这组数据进行这样的划分.图中,红色样本点表示0,蓝色样本点表示1. 原始数据显示为三维如下: 现在运用前一节介绍的线性拟合来进行分类,即线性分类器.当拟合出来的y值大于等于0.5,则归为1,:否则归为0. 代码如下: %% %线性分类器 function Classification_Liner %% clc; clear all; close all;

《机器学习实战》之K-均值聚类算法的python实现

<机器学习实战>之K-均值聚类算法的python实现 最近的项目是关于"基于数据挖掘的电路故障分析",项目基本上都是师兄们在做,我只是在研究关于项目中用到的如下几种算法:二分均值聚类.最近邻分类.基于规则的分类器以及支持向量机.基于项目的保密性(其实也没有什么保密的,但是怕以后老板看到我写的这篇博文,所以,你懂的),这里就不介绍"基于数据挖掘的电路故障分析"的思路了. 废话不多说了,开始正题哈. 基本K-均值聚类算法 基本K均值算法的基本思路为:首先选择

《机器学习实战》之二分K-均值聚类算法的python实现

<机器学习实战>之二分K-均值聚类算法的python实现 上面博文介绍了K-均值聚类算法及其用python实现,上篇博文中的两张截图,我们可以看到,由于K-均值聚类算法中由于初始质心的选取,会造成聚类的局部最优,并不是全局最优,因此,会造成聚类的效果并不理想,为克服K-均值算法收敛于局部最小值的问题,就有了二分K-均值算法. 二分K-均值聚类算法 二分K均值算法是基本K均值算法的直接扩充,其基本思想是:为了得到K个簇,首先将所有点的集合分裂成两个簇,然后从这些簇中选取一个继续分裂,迭代直到产生

[监督学习]GDA 高斯判别分析

高斯判别分析(Gaussian discriminative analysis )是一个较为直观的模型,基本的假设是我们得到的数据是独立同分布的(IID),虽然在实际中这种假设很难达到,但有时候拥有了好的假设可以得到较好的结果.在Andrew Ng大神的CS229 Lecture notes中有一个例子:假设我们要对大象和狗分类,回归模型和感知机模型是在两类数据之间找到一个decision boundary,通过这个decision boundary来区分大象和狗.高斯判别分析提供了另外一种思路

高斯判别分析 Gaussian Discriminant Analysis

如果在我们的分类问题中,输入特征xx是连续型随机变量,高斯判别模型(Gaussian Discriminant Analysis,GDA)就可以派上用场了. 以二分类问题为例进行说明,模型建立如下: 样本输入特征为x∈Rnx∈Rn,其类别y∈{0,1}y∈{0,1}: 样本类别yy服从参数为??的伯努力分布,即y∼Bernoulli(?)y∼Bernoulli(?): 两类样本分别服从不同的高斯分布,即x|y=0∼N(μ0,Σ),x|y=1∼N(μ1,Σ)x|y=0∼N(μ0,Σ),x|y=1∼

分类算法——k最近邻算法(Python实现)(文末附工程源代码)

kNN算法原理 k最近邻(k-Nearest Neighbor)算法是比较简单的机器学习算法.它采用测量不同特征值之间的距离方法进行分类,思想很简单:如果一个样本在特征空间中的k个最近邻(最相似)的样本中大多数属于某一个类别,则该样本也属于这个类别. kNN算法的步骤 第一阶段:确定k值(指最近的邻居的个数),一般是一个奇数 第二阶段:确定距离度量公式.文本分类一般使用夹角余弦,得出待分类数据点和所有已知类别的样本点,从中选择距离最近的k个样本: 第三阶段:统计这k个样本点钟各个类别的数量 kN

机器学习算法与Python实践之(三)支持向量机(SVM)进阶

机器学习算法与Python实践之(三)支持向量机(SVM)进阶 机器学习算法与Python实践之(三)支持向量机(SVM)进阶 [email protected] http://blog.csdn.net/zouxy09 机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法.恰好遇见这本同样定位的书籍,所以就参考这本书的过程来学习了. 在这一节我们主要是

机器学习算法与Python实践之(四)支持向量机(SVM)实现

机器学习算法与Python实践之(四)支持向量机(SVM)实现 机器学习算法与Python实践之(四)支持向量机(SVM)实现 [email protected] http://blog.csdn.net/zouxy09 机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法.恰好遇见这本同样定位的书籍,所以就参考这本书的过程来学习了. 在这一节我们主要是