Fisher 判别法讲解以及matlab 代码实现 两类的线形判别问题可以看作是把所有样本都投影到一个方向上,然后在这个一维空间中确定一个分类的阈值。过这个预置点且与投影方向垂直的超平面就是两类的分类面。 第一个问题,如何确定投影方向? 这里只讨论两类分类的问题.训练样本集是X={x1,x2...xn},每个样本是一个d 维向量,其中第一类w1={11x ,12x ...11nx },第二类w2={21x,22x ...22nx}。我们要寻求一个投影方向w(w 也是一个d 维向量),投影以后样本变成:iy =iT xw(y是一个标量),i=1...n 在原样本空间中,类均值为: ij wxjiixnm1 i=1,2(一共两类的均值) (ps.im是一个d*1 的矩阵,假设每个维度是一个变量值,mi 中的每一维度就是这些变量值的均值,如下图所示: 图 1 特别注明:有些例子给的矩阵是这样的: 图2 这里的单个样本是1*d 的矩阵,要注意计算的时候将其转置,不然套用fisher 算法公式的时候就会发现最后得到的矩阵维数不对。 定义各类类内的离散度矩阵为:(类内离散度矩阵其实就是类协方差矩阵,类在多于一个样本,且样本维度>1 时是一个矩阵) ij wxTijijimxmxS))(( (因为,jx 是一个d*1 的矩阵,也可称作d 维向量,im 也是一个d*1 的矩阵,所以最后得到的iS 一定是一个d*d 的矩阵) (在用matlab计算的时候直接用cov(w i)即可得到想要的协方差矩阵,故直接计算不探究细节时图2 可直接 cov 算协方差,不用根据公式转置来转置去,不过matlab 中算的协方差被缩小了(n1-1)倍,计算时iS =cov(w 1)*(n1-1)) 总的类内离散度矩阵: 21SSSw 类间离散度矩阵定义为: TbmmmmS))((2121 在投影以后的一维空间里,两类的均值分别是; iTwxjTiwyiiiimwxwNyNmijij11 i=1,2 故类内离散度不再是一个矩阵,而是一个值 ijwyiiiiimyS2)( i=1,2 总类内离散度为: 1111SSSww 类间离散度: 21111)(mmSbb 要使得需求的方向投影能在投影后两类能尽可能的分开,而各类内部又尽可能的聚集,可表示成如下准则,即 fisher 准则: wwbbSSwJ)(max 将公式代入并通过拉格朗日求极值的方法,可得投影方向: )(211mmSww (w 是一个d*1 的矩阵,或者说亦是一个d 维向量) 阈值可表示为: )(2122110mmw 最后将待确定样本代入 0)(wxwxgT 判断)(xg的符号和哪个类相同,确定其属于哪个类别。 例子(...