Fisher判别分析

首先我们得搞清楚什么是Fisher算法?选取任何一本模式识别与智能计算的书都有这方面的讲解。首先得知道Fisher线性判别函数,在处理数据的时候,我们经常遇到高维数据,这个时候往往就会遇到“维数灾难”的问题,即在低维空间可行,那么在高维空间往往却不可行,那么此时我们就可以降数据降维,将高维空间降到低维空间。

可以考虑把维空间的样本投影到一条直线上,形成一维空间,即把数据压缩到一维,这在数学中总是容易办到的。然而,即使样本在维空间里形成若干紧凑的互相分的开的集群,若把它们投影到一条任意的直线上,也可能使几类样本混在一起而变得无法识别。但在一般的情况下,总可以找到某个方向,使在这个方向的直线上,样本的投影能分开最好。

下面以2分类为例简单总结一下Fisher算法的步骤:
(1)计算各类样本的均值向量 mi m_{i}, Ni N_{i}是类 ωi \omega _{i}的样本个数

mi=1Ni∑X∈ωiXi=1,2

m _{i}=\frac{1}{N_{i}}{\sum_{X\in \omega _{i}}^{}}X \, \, \, \, \, i=1,2
(2)计算样本类内离散度矩阵 Si S_{i}和总类内离散度矩阵 Sw S_{w}。

Si=∑X∈ωi(X−mi)(X−mi)T,i=1,2

S_{i}={\sum_{X\in \omega _{i}}^{}}\left ( X-m_{i} \right )\left ( X-m_{i}\right )^{T},i=1,2

Sw=S1+S2

S_{w}=S_{1}+S_{2}
(3)计算样本类间离散度矩阵 Sb S_{b}。 Sb=(m1−m2)(m1−m2)T S_{b}=(m_{1}-m_{2})(m_{1}-m_{2})^{T}。
(4) 求向量 w∗ w^{*}。为此定义Fisher准则函数

JF(W)=wTSbwwTSww

J_{F}(W)=\frac{w^{T}S_{b}w}{w^{T}S_{w}w}
使得 JF(W) J_{F}(W)取的最大值的 w∗ w^{*}为: w∗=S−1w(m1−m2) w^{*}=S_{w}^{-1}\left ( m_{1}-m_{2}\right )。
(5)将训练集内所有样本进行投影。 y=(w∗)TX y=(w^{*})^{T}X。
(6)计算在投影空间上的分割阈值 y0 y_{0}。阈值的选取可以有不同的方案,比较常用的一种为

y0=N1m1~+N2m2~N1+N2

y_{0}=\frac{N_{1}\tilde{m_{1}}+N_{2}\tilde{m_{2}}}{N_{1}+N_{2}}
另一种为

y0=m1~+m2~2+lnp(w1)p(w2)N1−N2−2

y_{0}=\frac{\tilde{m_{1}}+\tilde{m_{2}}}{2}+\frac{\ln\frac{p(w_{1})}{p(w_{2})}}{N_{1}-N_{2}-2}
其中, mi~ \tilde{m_{i}}为在一维空间各样本的均值: mi~=1N1∑y∈ωiy \tilde{m_{i}}=\frac{1}{N_{1}}{\sum_{y\in\omega _{i}}}y。
样本的内类离散度 s2i~ \tilde{s_{i}^{2}}和总类离散度 sw~ \tilde{s_{w}}为 s2i~=∑y∈ωi(y−mi~),i=1,2 \tilde{s_{i}^{2}}={\sum_{y\in \omega_{i}}}(y-\tilde{m_{i}}),i=1,2,

sw~=s21~+s22~

\tilde{s_{w}}=\tilde{s_{1}^{2}}+\tilde{s_{2}^{2}}
(7)对于给定的 X X,计算它在w∗w^{*}上的投影点 y y。y=(w∗)TXy=(w^{*})^{T}X。
(8)根据决策规则分类,有

{y>y0⇒X∈ω1y<y0⇒X∈ω2

\left\{\begin{matrix}& y>y_{0}\Rightarrow X\in\omega _{1}\\ & y

用Fisher函数解决多分类问题时,首先实现两类Fisher分类,然后根据返回的类别与新的类别再做两类Fisher分类,又能够得到比较接近的类别,以此类推,直至所有的类别,最后得出未知样本的类别。
下图显示了fisher算法降维之后数据线性可分:

下面以一道例题来练习Fisher二分类:
例:为了解某河段As,Pb污染状况,设在甲,乙两地监测,采样测的这两种元素在水中和底泥中的浓度(如下表)。依据这些数据判别未知样本是从哪个区域采得的。

matlab下的实验代码如下:
%mian.m

X=load('x.txt');
x1=X(1:5,:);
x2=X(6:10,:);
sample=X(11:12,:);
y=fisher(x1,x2,sample)

%fisher.m

function y=fisher(x1,x2,sample)
%Fisher函数
%x1,x2,sample分别为两类训练样本及待测数据集,其中行为样本数,列为特征数
r1=size(x1,1);r2=size(x2,1);
r3=size(sample,1);
a1=mean(x1)';a2=mean(x2)';
s1=cov(x1)*(r1-1);s2=cov(x2)*(r2-1);
sw=s1+s2;%求出协方差矩阵
w=inv(sw)*(a1-a2)*(r1+r2-2);
y1=mean(w'*a1);
y2=mean(w'*a2);
y0=(r1*y1+r2*y2)/(r1+r2);
for i=1:r3y(i)=w'*sample(i,:)';if y(i)>y0y(i)=0;elsey(i)=1;end
end

假设我们把甲地类标签设为0,乙地设为1,实验结可以得出第一个未知样本来之乙地,第二个来之甲地。
以上我们对Fisher判别分析有了一个初步的了解,Fisher判别分析在模式识别,机器学习中应用的非常广泛,进一步的了解可以阅读相关书籍与资料。

参考资料:
[1] 许国根,贾瑛.模式识别与智能计算的Matlab实现[M],北京航空航天大学出版社
[2] Belhumeur P N, Hespanha J P, Kriegman D. Eigenfaces vs. fisherfaces: Recognition using class specific linear projection[J]. Pattern Analysis and Machine Intelligence, IEEE Transactions on, 1997, 19(7): 711-720.

Fisher判别分析相关推荐

  1. fisher判别分析原理及实现

    参考资料: 周志华老师的<机器学习> http://wiki.mbalib.com/wiki/%E5%88%A4%E5%88%AB%E5%88%86%E6%9E%90 判别分析是一种经典的 ...

  2. Python-线性判别分析(Fisher判别分析)使用鸢尾花数据集 Iris

    本博客运行环境为Jupyter Notebook.Python3.使用的数据集是鸢尾花数据集. 目录 线性判别分析 代码实现 缺少一组数据的问题已解决!代码已更新! 线性判别分析 线性判别分析(Lin ...

  3. 线性判别分析(LDA)与Fisher判别分析(FDA)降维原理

    在故障诊断中,我们常常会面对大量的且维数很高的数组,通过我们需要先对数据集进行划分及预处理,而预处理阶段极为重要的一步就是对数据进行降维特征提取,通过某种数学变换将原始高维空间转变成一个低维的子空间. ...

  4. 机器学习入门学习笔记:(2.4)线性判别分析理论推导

    LDA   线性判别分析(Linear Discriminant Analysis, 简称LDA),最早由Fisher提出,也叫"Fisher判别分析".   线性判别分析的思想: ...

  5. Fisher判别推导 Logistic回归推导 SVM推导

    1. Fisher判别分析 2 Logistic 推导(二分类) 3 支持向量机推导(硬间隔) 转载于:https://www.cnblogs.com/zfc888/p/10274434.html

  6. lda 吗 样本中心化 需要_机器学习 —— 基础整理(四):特征提取之线性方法——主成分分析PCA、独立成分分析ICA、线性判别分析LDA...

    本文简单整理了以下内容: (一)维数灾难 (二)特征提取--线性方法 1. 主成分分析PCA 2. 独立成分分析ICA 3. 线性判别分析LDA (一)维数灾难(Curse of dimensiona ...

  7. 机器学习】LDA线性判别分析

    [机器学习]LDA线性判别分析 1. LDA的基本思想 2. LDA求解方法 3. 将LDA推广到多分类 4. LDA算法流程 5. LDA和PCA对比 [附录1]瑞利商与广义瑞利商 线性判别分析 ( ...

  8. LDA(线性判别分析)详解 —— matlab

    目录 前言 正题 1.LDA的思想 2. 瑞利商(Rayleigh quotient)与广义瑞利商(genralized Rayleigh quotient) 3. 二类LDA原理 4.多类LDA原理 ...

  9. *第6章 判别分析及R使用

    第1章 多元统计分析概述 第2章 多元数据的数学表达 第3章 多元数据的直观表示 第4章 多元相关与回归分析 第5章 广义与一般线性模型 第6章 判别分析及R使用 6.1 线性判别分析 6.2 Fis ...

最新文章

  1. 我是怎么提高单片机编程能力的?
  2. 抛弃windows用linux来工作吧
  3. 一直用PDO,PHP中操作MYSQL数据库常用函数还记得不
  4. linux内核杂记(12)-进程调度(7)
  5. day 3 list列表生成式
  6. C# Socket编程笔记(转)
  7. Android无线测试之—UiAutomator UiDevice API介绍六
  8. 关于给电鼓音源增加鼓盘或者DIY鼓盘(DIY镲片)的方法
  9. webstorm配置vue模板 webstorm快速生成vue模板
  10. J2EE进阶之自定义标签,JSTL标签,国际化 十四
  11. 生物信息学|通过整合药物表型、治疗、化学结构和基因组特征,使用机器学习预测药物-药物相互作用
  12. mysql查看cpu使用率_MySQL高CPU使用率
  13. andriod 无网络逻辑设置和判断
  14. [CyanogenMOD移植教程] 前言:什么是CyanogenMod
  15. NEC协议红外遥控器
  16. 软件开发中的10个认知偏差
  17. 互换性与测量技术基础复习题及答案
  18. 使用Monkeyrunner进行Android自动化的总结
  19. 仁者乐山,智者乐水,吃货乐在北海道~
  20. 大数据局数据安全建设实践案例汇编

热门文章

  1. html调用外部js报错onClick is not defined at HTMLButtonElement.onclick
  2. LED智能照明与健康-光莆电子-张潇
  3. codeforces24D
  4. centos 7.6 ——远程访问及控制——(ssh密钥登录、ssh客户端、TCP Wrappers)
  5. 安装hmc会依赖bios时间吗_VMWARE安装HMC
  6. C#基础知识学习——特性(Conditional特性、Obsolete特性、自定义特性)(十六)
  7. google中国android文档官网地址
  8. Transfer Learning从入门到放弃(二)
  9. 鲁山企业网络营销信息源类别及传递渠道调查
  10. 韩国KT/LG/SK机房服务器比较