挂一下之前的数据集准备工作的链接
当时老师正讲到Fisher线性判别,故采用了这种方法分类数据集
Fisher线性判别的基本原理是:找到一个最合适的投影轴,使两类样本在该轴上投影直接的距离尽可能远,而每一类样本的投影尽可能紧凑,从而使分类效果最佳。
其主要的步骤是:
1、计算各类的类内样本均值
2、计算样本类内离散度和总类内离散度
3、计算样本垒间离散度
4、计算投影方向。
对于Fisher线性分类具体的内容,请看站内大佬的博客,当时做这个大作业时,也是参考了大佬的文章:
机器学习笔记之(4)——Fisher分类器(线性判别分析,LDA)_gwpscut的博客-CSDN博客_fisher线性判别
fisher线性判别分类器(matlab实现)
(1)、使用xlsread读取数据集后对数据集进行简要的处理:
- 数据清洗。去除数据集第一列编号和第二列类别,剩余的10列均为特征数据。
- 特征选择。去除样本数据的第二和第十特征。
(2)、数据集划分:按照8:2的比例划分训练集和测试集,即训练集120个,测试集30个。在划分数据集时为使结果更精确,采用随机划分的方式,每一类中产生50个随机数序列,前40个随机数作为训练集的编号,后10个数作为测试集的编号,按照编号选择数据。
(3)、计算均值向量、各离散度矩阵:
本数据集分三类,故分三类计算均值向量m1、m2、m3,后再计算三类样本的离散度矩阵s1、s2、s3,总类内离散度sw12、sw13、sw23 。
(4)、计算各类的投影方向和判别函数的阈值
根据以上的计算结果求各类投影方向w12、w13、w23和判别函数阈值T1、T2、T3 。
(5)、测试集检验:
根据上述过程得到的投影方向和阈值,可以得到判别函数,根据判别函数判断测试集的分类结果,还原测试集原来的类别后与分类结果比较,计算分类正确率。进行多次重复实验看每次实验的正确率。
分类结果:
Fisher线性判别算法的分类结果如下:
未进行特征选择时,进行一百次重复实验,平均正确率为0.893333;进行特征选择后,同样进行一百次重复实验,平均正确率为0.885000。
在特征选择前后的平均正确率虽然下降了些,但两个正确率差距非常小可以忽略不计,同时这也验证了之前的特征选择是正确的,删去的两个特征,特征数据从十维降低到八维,降低了计算的复杂度的同时分类结果几乎不受影响。