Matlab实现判别分析(线性判别和二次判别分析)
- 一、简介
- 二、判别分析的方法
- 2.1 费歇(FISHER)判别思想
- 2.1 贝叶斯(BAYES)判别思想
- 三、Matlab 实现判别分析
- 3.1 代码
- 3.2 输出
一、简介
判别分析又称“分辨法”,是在分类确定的条件下,根据某一研究对象的各种特征值判别其类型归属问题的一种多变量统计分析方法。
其基本原理是按照一定的判别准则,建立一个或多个判别函数,用研究对象的大量资料确定判别函数中的待定系数,并计算判别指标。据此即可确定某一样本属于何类。
当得到一个新的样品数据,要确定该样品属于已知类型中哪一类,这类问题属于判别分析问题。
判别分析时,通常需要将数据分为两部分。一部分是训练模型数据(训练集),另一部分是验证模型数据(测试集)。
首先通过训练集数据训练拟合出一个判别模型,接着再利用另一部分验证模型效果。如果在测试集数据上,也表现良好,那么说明拟合模型非常好。
后续可以利用此模型用于预测其它“没有确定类别”的数据,来预测新数据的类别情况。
判别分析可根据其判别函数分为线性判别和非线性判别。
其中线性判别分析(Linear Discriminant Analysis, LDA)和二次判别分析(Quadratic Discriminant Analysis, QDA)是两个经典的分类器,他们分别代表了线性决策平面和二次决策平面。
二、判别分析的方法
判别分析中,根据资料的性质,分为定性资料的判别分析和定量资料的判别分析;采用不同的判别准则,又有费歇、贝叶斯、距离等判别方法。
2.1 费歇(FISHER)判别思想
费歇(FISHER)判别思想是投影,使多维问题简化为一维问题来处理。选择一个适当的投影轴,使所有的样品点都投影到这个轴上得到一个投影值。
对这个投影轴的方向的要求是:使每一类内的投影值所形成的类内离差尽可能小,而不同类间的投影值所形成的类间离差尽可能大。
2.1 贝叶斯(BAYES)判别思想
贝叶斯(BAYES)判别思想是根据先验概率求出后验概率,并依据后验概率分布作出统计推断。
所谓先验概率,就是用概率来描述人们事先对所研究的对象的认识的程度;所谓后验概率,就是根据具体资料、先验概率、特定的判别规则所计算出来的概率。它是对先验概率修正后的结果。
距离判别思想是根据各样品与各母体之间的距离远近作出判别。即根据资料建立关于各母体的距离判别函数式,将各样品数据逐一代入计算,得出各样品与各母体之间的距离值,判样品属于距离值最小的那个母体。
三、Matlab 实现判别分析
3.1 代码
这里代码利用费歇判别思想建立模型,即 fitcdiscr() 。
clear,clc
% 用Matlab自带的鸢尾花数据集来演示判别分析,包括线性判别分析和二次判别分析
% 需安装 Statistics and Machine Learning Toolbox
load fisheriris
figure,
gscatter(meas(:,1),meas(:,2),species)
% 建立判别模型
% 线性判别分析
lda = fitcdiscr(meas(:,1:2),species);
% 二次判别分析
% lda = fitcdiscr(meas(:,1:2),species,'DiscrimType','quadratic');
% 对判别模型进行可视化
[x,y] = meshgrid(4:0.1:8,2:0.1:4.5);
x = x(:);
y = y(:);
k = predict(lda,[x,y]);
figure,
gscatter(x,y,k)
% 模型评价
% 再代入误差和交叉验证误差
disp('再代入误差:')
err = resubLoss(lda)
% 混淆矩阵,再代入误差的可视化
ldaClass = resubPredict(lda);
figure,
confusionchart(species,ldaClass)
3.2 输出
线性判别分析为例:
再代入误差:
err =
0.2000