Gaussian discriminant analysis 高斯判别分析
高斯判别分析(附Matlab实现)
生成学习算法
高斯判别分析(Gaussian Discriminant analysis,GDA),与之前的线性回归和Logistic回归从方法上讲有很大的不同,GDA是一种生成学习算法(Generative Learning Algorithms),而之前的属于判别学习算法(Discriminative Learning Algorithms)。
它们的主要区别是:
判别学习算法是直接训练出p(y|x);
生成学习算法是分别训练出各个类别的概率模型,之后再用Bayes公式算法出p(y|x);
通俗的说,判别模型是通过训练样本训练出一个模型,再用测试点x带入这个模型,最后算出x的可能类别;而生成学习模型是通过训练样本训练出各个类别的多个模型,再将预测点x分别代入不同类别的模型中,进而判断x到底属于哪个类别(一般就看代入后那个模型的概率大就认为x是哪一类,当然也有例外)。
高斯判别分析
GDA就是一种生成学习算法,通过生成不同类别的模型,再进一步估计出预测样本的具体类别,为了简化问题,这里只讲二分类情况下的问题。
前提:
条件概率p(x|y)服从多维正态分布,且输入特征x是连续且随机的。
其分布函数为:
其中p(y)为类别i的先验概率,φ为y=1的先验概率值,μ0和μ1分别为y=0和y=1的期望,Σ为样本的协方差,由此可以看出y是服从Bernoulli(φ)的分布,x|y=0和x|y=1分别服从N(μ0,Σ)和N(μ1,Σ)。
Ps:这里y=0和y=1时用的是同一个协方差,至于为什么?我感觉很难说清
其似然函数如下
为了使似然函数达到最大,可得和参数的估计值为
有了这些估计值我们就能生成属于各个类别的模型了。
In Matlab
这代码其实很简单,分别算出各参数的值,再带入matlab预有的生成函数就行
代码如下:
clear all; close all; clc % data x = [0.230000 0.394000;
0.238000 0.524000;
0.422000 0.494000;
0.364000 0.556000;
0.320000 0.448000;
0.532000 0.606000;
0.358000 0.660000;
0.144000 0.442000;
0.124000 0.674000;
0.520000 0.692000;
0.410000 0.086000;
0.344000 0.154000;
0.490000 0.228000;
0.622000 0.366000;
0.390000 0.270000;
0.514000 0.142000;
0.616000 0.180000;
0.576000 0.082000;
0.628000 0.286000;
0.780000 0.282000]; x1 = x(:,1);
x2 = x(:,2); y = [0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
1;
1;
1;
1;
1;
1;
1;
1;
1;
1]; [m, n] = size(x); % plot the datas
figure
pos = find(y); neg = find(y == 0); %find是找到的一个向量,其结果是find函数括号值为真时的值的编号
plot(x(pos, 1), x(pos, 2), '+')
hold on
plot(x(neg, 1), x(neg, 2), 'o')
hold on
xlabel('axis X')
ylabel('axis Y') m_ones = ones(m,1); % 20 * 1的矩阵,元素全为1 sum0 = (1-y)' * m_ones; % 标记为0的样本个数
sum1 = y' * m_ones; % 标记为1的样本个数 mu0 = [(1-y)'*x1/sum0 (1-y)'*x2/sum0]; % 标记为0的期望
mu1 = [y'*x1/sum1 y'*x2/sum1]; % 标记为1的期望 sigma = cov(x1,x2); % 协方差 [x y]=meshgrid(linspace(0,1,50)',linspace(0,1,50)');
X=[x(:) y(:)];
z1=mvnpdf(X,mu0,sigma);
contour(x,y,reshape(z1,50,50),4);
hold on; [x y]=meshgrid(linspace(0,1,50)',linspace(0,1,50)');
X=[x(:) y(:)];
z2=mvnpdf(X,mu1,sigma);
contour(x,y,reshape(z2,50,50),4);
hold off
效果图如下:
标准的结果应该是这样的:
感觉好像一样,又感觉好像不一样,也不知道我这到底错没错,也许是训练集没有服从高斯分布吧,等有空再找个服从高斯分布的样本集试试。
拓展
当将p(y=1|x;φ,μ0,μ1,Σ)看成是一个x的函数时,可以发现p(y=1|x)将会近似成一个Logistic函数。如下图(画的难看,见谅)
分布函数可以写成
其中θ是φ,μ0,μ1,Σ的函数。其实这个函数也就是这个问题的判别学习算法形式了。
那问题自然就来了,到底选哪一个会更好呢?
当然通常的回答肯定不会出现绝对哪一个会更好,要不差的那个根本就没有存在的价值了嘛,依然是具体问题具体分析,我相信机器学习中的很多问题都是这样的,看你对数据的理解程度了。
这里有几个tips可以帮助我们做判断,至于要讲出个之所以然来,我想,任重而道远啊。
1、当x|y服从多维高斯分布时,则其后验概率y|x服从Logistic回归;但反过来并不成立。
2、当已知x|y服从高斯分布,则GDA是一个好的选择,若不服从高斯分布,却使用了GDA,其表达效果往往没有Logistic回归好。----GDA是一个更强条件的分类算法
3、若x|y=0和x|y=1都服从Poisson分布(指数分布族),则y|x也遵守Logistic回归
Gaussian discriminant analysis 高斯判别分析的更多相关文章
- 机器学习理论基础学习3.4--- Linear classification 线性分类之Gaussian Discriminant Analysis高斯判别模型
一.什么是高斯判别模型? 二.怎么求解参数?
- 高斯判别分析 Gaussian Discriminant Analysis
如果在我们的分类问题中,输入特征xx是连续型随机变量,高斯判别模型(Gaussian Discriminant Analysis,GDA)就可以派上用场了. 以二分类问题为例进行说明,模型建立如下: ...
- 生成式学习算法(三)之----高斯判别分析模型(Gaussian Discriminant Analysis ,GDA)
高斯判别分析模型(Gaussian Discriminant Analysis ,GDA) 当我们分类问题的输入特征$x $为连续值随机变量时,可以用高斯判别分析模型(Gaussian Discrim ...
- 高斯判别分析模型( Gaussian discriminant analysis)及Python实现
高斯判别分析模型( Gaussian discriminant analysis)及Python实现 http://www.cnblogs.com/sumai 1.模型 高斯判别分析模型是一种生成模型 ...
- Gaussian Discriminant Analysis
如果在我们的分类问题中,输入特征$x$是连续型随机变量,高斯判别模型(Gaussian Discriminant Analysis,GDA)就可以派上用场了. 以二分类问题为例进行说明,模型建立如下: ...
- 机器学习: Linear Discriminant Analysis 线性判别分析
Linear discriminant analysis (LDA) 线性判别分析也是机器学习中常用的一种降维算法,与 PCA 相比, LDA 是属于supervised 的一种降维算法.PCA考虑的 ...
- 【cs229-Lecture5】生成学习算法:1)高斯判别分析(GDA);2)朴素贝叶斯(NB)
参考: cs229讲义 机器学习(一):生成学习算法Generative Learning algorithms:http://www.cnblogs.com/zjgtan/archive/2013/ ...
- 线性判别分析(Linear Discriminant Analysis, LDA)算法分析
原文来自:http://blog.csdn.net/xiazhaoqiang/article/details/6585537 LDA算法入门 一. LDA算法概述: 线性判别式分析(Lin ...
- 线性判别分析(Linear Discriminant Analysis,LDA)
一.LDA的基本思想 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discriminant ,FLD) ...
随机推荐
- 第八届蓝桥杯国赛java B组第三题
标题:树形显示 对于分类结构可以用树形来形象地表示.比如:文件系统就是典型的例子. 树中的结点具有父子关系.我们在显示的时候,把子项向右缩进(用空格,不是tab),并添加必要的连接线,以使其层次关系更 ...
- windows下安装PyTorch0.4.0
PyTorch框架,据说2018.4.25刚刚上架windows,安个玩玩 我的环境: windows 10 anaconda虚拟环境python3.6 cuda9.1 cudnn7 pytorch ...
- 【 Gym - 101138J 】Valentina and the Gift Tree(树链剖分)
BUPT2017 wintertraining(15) 4 D Gym - 101138J 数据 题意 n个节点的一棵树,每个节点的权值为g,q个询问,树上的节点U-V,求U到V的路径的最大子段和. ...
- 自学工业控制网络之路1.2-典型的现场总线介绍PROFIBUS
返回 自学工业控制网络之路 自学工业控制网络之路1.2-典型的现场总线介绍PROFIBUS 目前看来,现场总线标准不会统一,多标准并存现象将会持续. 现场总线国家标准: 中国的DeviceNet和AS ...
- 洛谷 P1053 篝火晚会 解题报告
P1053 篝火晚会 题目描述 佳佳刚进高中,在军训的时候,由于佳佳吃苦耐劳,很快得到了教官的赏识,成为了"小教官".在军训结束的那天晚上,佳佳被命令组织同学们进行篝火晚会.一共有 ...
- react缓存问题
问题一: 问题描述: 我们公司自己的react项目,先打包部署v1.1版本,一切正常. v1.2版本做了很多页面和功能的修改和新增,但是打包部署之后,发现有些界面还是保持了v1.1的状态,比如有些新增 ...
- JavaEE学习总结(十四)— 人工智能微博
一.数据库与表 人工智能微博(blog) note(id,bt,nr);微博信息(编号,标题,内容) 列表添加 数据库脚本 /* Navicat MySQL Data Transfer Source ...
- 愉快且方便的处理时间-- LocalDate
java中做时间处理时一般会采用java.util.Date,但是相比于Date来说,还有更好的选择 -- java.time.LocalDate. 这是jdk8中新增的日期处理类,同时新增的还有ja ...
- Linux系统加固
iptables 初始化 > iptables -F #清空所有的链 > iptables -X #清空所有自定义的链 关掉全部端口 > iptables -P INPUT DROP ...
- "飞机大战"游戏_Java
1 package cn.xiaocangtian.Util; import java.awt.Frame; import java.awt.Graphics; import java.awt.Ima ...