Fisher分类器用于解决二类线性可分问题。
Fisher准则基本原理:找到一个最合适的投影轴,使两类样本在该轴上投影之间的距离尽可能远,而每一类样本的投影尽可能紧凑,从而使分类效果为最佳。
例如上图中:通过将方块点和圆点向w1投影,然后再在设置合适的阈值即可将方块和圆点分离。
Matlab程序如下:
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %By Shelley from NCUT,April 2nd 2011
- %Email:just_for_h264@163.com
- %本m文件实现fisher算法,并对两个二维正态分布随机序列
- %进行训练,进而可在屏幕上任意取点,程序可输出属于第一类
- %还是第二类
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %分别产生x轴和y轴都为正态分布的随机序列
- %假设x轴和y轴序列相互独立,可产生二维正态分布随机序列
- %w1、w2分别用来保存两个训练集的横坐标和纵坐标
- %用normrnd函数产生正态分布函数
- %normrnd(mean,omega,[row,column])
- %mean:均值;omega:标准差
- %row:产生随机序列的行数;column:产生随机序列的列数
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- X1 = normrnd(40,10,[200,1]);
- Y1 = normrnd(40,10,[200,1]);
- w1=[X1, Y1];
- X2 = normrnd(5 ,10,[100,1]);
- Y2 = normrnd(0 ,10,[100,1]);
- w2=[X2, Y2];
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %以下部分为fisher算法的实现
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %计算样本均值
- m1=mean(w1)';
- m2=mean(w2)';
- %s1、s2分别代表表示第一类、第二类样本的类内离散度矩阵
- s1=zeros(2);
- [row1,colum1]=size(w1);