为什么80%的码农都做不了架构师?>>>   

问题预备:

如果考虑把d维空间的样本投影到一条直线上,形成一维空间,即把维数压缩到一维。
然而:

1、即使样本在d维空间里形成若干紧凑的互相分得开的集群,当把它们投影到一条直线上时,也可能会是几类样本混在一起而变得无法识别。

2、但是,在一般情况下,总可以找到某个方向,使在这个方向的直线上,样本的投影能分得开

生成随机样本:

比如,我们通过MATLAB生成随机的两类模式样本集:

(该样本简单加入了高斯噪声以模拟系统总噪声和特征的不完全相关性)

o1=[3 4],o2=[8,2];
N1=15;N2=15;
N=N1+N2;
points=[abs(randn(N ,1)) rand(N,1)];
points(:,1)=points(:,1)*sqrt((o2(2)-o1(2))^2+(o2(1)-o1(1))^2)/5;
points(:,2)=points(:,2)*2*3.14;
pointso1=points(1:N1,:);
pointso2=points(N1+1:end,:);
pointso1xy=o1(1)+pointso1(:,1).*cos(pointso1(:,2));
pointso1xy=[pointso1xy o1(2)+pointso1(:,1).*sin(pointso1(:,2))];
pointso2xy=o2(1)+pointso2(:,1).*cos(pointso2(:,2));
pointso2xy=[pointso2xy o2(2)+pointso2(:,1).*sin(pointso2(:,2))];
plot(pointso1xy(:,1),pointso1xy(:,2),'.r');hold on;
plot(pointso2xy(:,1),pointso2xy(:,2),'.g');

如图:

通过调整第三行中r分量的比例因子,我们可以获得可分辨度等低的模式样本集:

这里我们使用前一种样本。

那么,如何根据实际情况找到一条最好的、最易于分类的投影线,这就是Fisher判别方法所要解决的基本问题。

先来看下最终的分类结果,图中直线就是我们求得的投影直线,蓝色圈圈就是阈值所处位置:

如何求得从高维到一维的变换关系?

对于该例子,从d维空间到一维空间的一般数学变换方法:

假设有一集合Г包含N=30个2维样本x1, x2, …, xN,

其中N1=15个属于ω1类的样本记为子集Г1, N2=15个属于ω2类的样本记为子集Г2 。

若对xn的分量做线性组合可得标量:
                                                                        yn = wTxn, n=1,2,…,N
        这样便得到30个一维样本yn组成的集合,并可分为两个子集Г1’和Г2’ 。
        实际上,w的值是无关紧要的,它仅是yn乘上一个比例因子,向量里决定长短,重要的是选择w的方向,也叫方向角。

 很明显的是,w的方向不同很影响分类结果。

于是在数学上,这就是寻找最好的变换向量w*的问题。

那么,如何求解w*呢?

首先我们来看一堆公式推导,不喜欢的完全可以跳过,后面会有你想要的东西的。

(1)首先是,各类样本的均值向量mi:

很明显,这其实就是在求一个聚类中心,注意是均值向量。

反映到matlab里就是这样:

m1=sum(pointso1xy)/N1;
m2=sum(pointso2xy)/N2;

如下获得其直观图像,图中的红圈和绿圈就是所求的聚类中心啦:

(2) 样本类内离散度矩阵Si和总样本类内离散度矩阵Sw:

其中Sw是对称半正定矩阵,而且当N>d时通常是非奇异的。

对于一维来说离散度矩阵对应的就是离差平方和/方差:

s1=sum([pointso1xy(:,1)-m1(1) pointso1xy(:,2)-m1(2)].^2);s1=sum(s1(:));
s2=sum([pointso2xy(:,1)-m1(1) pointso2xy(:,2)-m1(2)].^2);s2=sum(s2(:));

(3) 样本类间离散度矩阵Sb :

Sb是对称半正定矩阵。

sb=sum(((m1-m2).^2)');

引出Fisher准则函数

分类得好不好,怎么分类,怎么确定判别函数?这一切都在变换后的一维Y空间上进行,

而对于我们即将映射的一维Y空间有:

(1) 各类样本的均值:

(2) 样本类内离散度和总样本类内离散度

于是,Fisher准则函数定义为:

其中,分子是两类均值之差平方,分母是样本类内离散度之和。显然,应该使JF(w)的分子尽可能大而分母尽可能小,这样才使得类别之间不仅离得远,而且类内样本聚集紧密,即应寻找使JF(w)尽可能大的w作为投影方向。但上式中并不显含w,因此须设法将JF(w)变成w的显函数。

将上述各式代入JF(w),可得:

于是问题转化为准则函数的极值问题,当其取极大值时的w*就是我们要的东西了。

Lagrange乘数法求解极值问题:

求得一个函数的极值最容易想到的就是采用导数求解,而对于许多实际的问题,也常用拉氏乘数法求解。

我们令分母等于非零常数,即:

定义Lagrange函数为:

也就是转化为求L函数极值问题,其中λ为Lagrange乘子。将上式对w求偏导数且令其为0,可得:

因为Sw非奇异,所以有:

有没有发现这变成了求矩阵特征值的问题了呢?我们带入前边的公式:

显然,R是一个标量,即Sbw*实际上跟m1-m2是同方向的,注意m1,m2,w*都是列向量,而前面的代码为了方便编写都是作为行向量处理。然后我们更新下特征方程:

此处声明下,我们的任务是寻找最佳的投影方向,跟向量的模长并无关系,而上式除去比例因子R/λ之后就剩:

对于此处二维转一维的情况,Sw也是个标量,m1-m2为两聚类中心的向量差。也就是从m2到m1的向量。

求得投影直线与变换样本y:

那么可得一直线方程:

c=w2*x-w1*y

将其画在图上是这样的:

于是我们变换下,并简单地取下阈值:

y1=w*pointso1xy';
y2=w*pointso2xy';
T=(min(y1(:))+max(y2(:)))/2;

至此,我们求出了变换关系w和一维分类阈值T。

标记阈值点

有趣的是,这样我们还并不满足,有人一定会想在Figure中标出阈值点,然而T=w*pointxy这样的运算显然不可逆,即无法求出向量pointxy。

那么,还记得前面求得的直线方程吗?

联立:

用行列式解的优点就是没有那么多if语句需要考虑,一个判别式解决一切:

因此,整个工作完成:

转载于:https://my.oschina.net/Parser/blog/384082

【模式识别】学习笔记(3)【Fisher线性判别】相关推荐

  1. 模式识别(1)Fisher线性判别

    Fisher线性判别 分类是我们经常会遇到是问题,下面主要介绍Fisher线性判别,利用Fisher算法来分类UCI数据集中的Iris数据集和Sonar数据集. 一.数据集说明 UCI数据库是加州大学 ...

  2. fisher判别_经典模式识别:Fisher线性判别

    本文将介绍Fisher线性判别的原理和具体实践,阅读时间约8分钟,关注公众号可在后台领取数据集资源哦^-^ Fisher线性判别 1.背景介绍 生活中我们往往会遇到具有高维特性的数据,如个人信息,天气 ...

  3. Fisher线性判别 模式识别 例题

    ** Fisher线性判别 ** [例4-1]本程序为纸币100元A面与50元A 面的Fisher判别门限的程序,通过全局变量 dat自动从样本数据中将内容读入dat[10][4][8][8][60] ...

  4. 基于fisher线性判别法的分类器设计

    0.引言说明 这篇文章实际上是楼主上的模式识别课程的课堂报告,楼主偷懒把东西直接贴出来了.选择fisher判别法的原因主要是想学习一下这个方法,这个方法属于线性判别法,操作起来和lda判别法近乎没啥区 ...

  5. Fisher线性判别

    Fisher线性判别 一.算法介绍 1.背景: 在应用统计方法解决模式识别问题时,一再碰到的问题之一就是维度问题,在低维空间里解析上或计算上行得通的方法,在高维空间里往往行不通.降低维度有时会成为处理 ...

  6. R语言 Fisher线性判别

    本人正在学习R语言,想利用这个平台记录自己一些自己的学习情况,方便以后查找,也想分享出来提供一些资料给同样学习R语言的同学们.(如果内容有错误,欢迎大家批评指正) Fisher线性判别主要用来根据样本 ...

  7. 朴素贝叶斯分类器与Fisher线性判别实践——水果识别为例

    开篇:本次博客主要分享二分类水果实现案例,样本构造显然不具备泛化.大数量特性以及背景均为纯白色是为了方便目标提取.大家若需要更好的水果样本,Github上有许多的优秀案例.本次代码计算效率较低,代码有 ...

  8. 【机器学习】Fisher线性判别与线性感知机

    来源 | AI小白入门 作者 | 文杰 编辑 | yuquanle 原文链接 Fisher线性判别与线性感知机 ​ Fisher线性判别和线性感知机都是针对分类任务,尤其是二分类,二者的共同之处在于都 ...

  9. Fisher线性判别算法原理及实现 MATLAB

    Fisher线性判别算法原理及实现 MATLAB 一.Fisher判别器原理 二.代码实现 clc; close all; clear; %% 生成数据 rng(2020); %指定一个种子 mu1 ...

  10. matlab fisher检验,FISHER线性判别MATLAB实现.doc

    FISHER线性判别MATLAB实现 Fisher线性判别上机实验报告 班级: 学号: 姓名: 算法描述 Fisher线性判别分析的基本思想:选择一个投影方向(线性变换,线性组合),将高维问题降低到一 ...

最新文章

  1. AlexeyAB DarkNet YOLOv3框架解析与应用实践(五)
  2. SAP RETAIL 事务代码RWBE查询界面上的Plant Group
  3. 聚簇索引与非聚簇索引学习总结
  4. Tableau可视化分析实战系列Tableau基础概念全解析 (一)-数据结构及字段
  5. 【网址收藏】helm charts github地址
  6. ea mysql建模_UML数据建模工具之Enterprise Architect(EA)实例-UML应用
  7. 全方位测评Hive、SparkSQL、Presto 等七个大数据查询引擎,最快的竟是……| 程序员硬核测评...
  8. 真正无人驾驶有望在美国全境普及?美交通部准备修改安全法规
  9. UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 31: ordinal not in range(128)
  10. 实验2 黑盒测试方法:等价类划分法+边界值分析方法
  11. Hadoop环境搭建(6) -- 克隆
  12. 网站/APP统计分析工具及教程
  13. 可自主二次开发的微信云控客服crm系统软件(带源码)
  14. linux中的cd命令是什么意思,linux中cd命令的详细解释
  15. Java练习——删库跑路(定时器删除文件夹)
  16. tableau public使用形状文件进行数据可视化
  17. pandoc 转换html,使用pandoc实现markdown和latex以及html的互转
  18. 毕业设计 Stm32云平台的智能病房监控系统
  19. 论文阅读—图像分割方法综述(三)(arXiv:[cs:cv]20200410)
  20. vba rnd_VBA Rnd()函数不正确,应使用什么代替

热门文章

  1. 对PostgreSQL缺省表空间的理解
  2. 要获得“机器学习或数据科学”的工作,到底选哪种编程语言更好?
  3. Servlet-forward转发
  4. 设置DVD为CentOS6安装源
  5. 2019 Mac装Cocoapods的步(cai)骤(keng)记录
  6. 大型银行数据中心用户安全管理
  7. css 兼容ie6,ie7,ff的fixed,元素上下端固定定位方法
  8. 解析CleanMyMac隐私保护内容与使用
  9. 3.8 采购协议管理
  10. java+flash在线拍照和编辑,保存到服务器(Spring3.2.2+swf+jquery)