Fisher 判别法讲解以及matlab 代码实现 两类的线形判别问题可以看作是把所有样本都投影到一个方向上,然后在这个一维空间中确定一个分类的阈值
过这个预置点且与投影方向垂直的超平面就是两类的分类面
第一个问题,如何确定投影方向
这里只讨论两类分类的问题
训练样本集是X={x1,x2
xn},每个样本是一个d 维向量,其中第一类w1={11x ,12x
11nx },第二类w2={21x,22x
我们要寻求一个投影方向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