FISHER线性判别MATLAB实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Fisher 线性判别上机实验报告
__ __ 某某:
一.算法描述
Fisher 线性判别分析的根本思想:选择一个投影方向〔线性变换,线性组合〕,将高维问题降低到一维问题来解决,同时变换后的一维数据满足每一类内部的样本尽可能聚集在一起,不同类的样本相隔尽可能地远.
Fisher 线性判别分析,就是通过给定的训练数据,确定投影方向W 和阈值w0, 即确定线性判别函数,然后根据这个线性判别函数,对测试数据进展测试,得到测试数据的类别.
线性判别函数的一般形式可表示成0)(w X W X g T += 其中
Fisher 选择投影方向W 的原如此,即使原样本向量在该方向上的投影能兼顾类间分布尽可能分开,类内样本投影尽可能密集的要求. 如下为具体步骤:
〔1〕W 确实定
w S 样本类间离散度矩阵b
在投影后的一维空间中,各类样本均值T
i
i
m '= W
m
样本类内离散度和总类内离散度 T T
i i w
w S ' = W S W S ' = W S W 样本类间离散度T
b
b S ' = W S W Fisher 准如此函数为 max 22
212
21
~~)~~()(S S m m W J F +-=
〔2〕阈值确实定
w 0
是个常数,称为阈值权,对于两类问题的线性分类器可以采用下属决策规如
此:
令)
()()(2
1
x x x g g g -=如此:
如果g
〔3〕Fisher 线性判别的决策规如此 Fisher 准如此函数满足两个性质:
1.投影后,各类样本内部尽可能密集,即总类内离散度越小越好.
2.投影后,各类样本尽可能离得远,即样本类间离散度越大越好. 根据这个性质确定准如此函数,根据使准如此函数取得最大值,可求出
W :-1
w 12W = S (m - m ) .
这就是Fisher 判别准如此下的最优投影方向. 最后得到决策规如此
假如
P P m m w w
w x x g T
)(
)
(211
2
log
))(2
1()(大于或小于+-=,如此
{1
2w w x ∈ 对于某一个未知类别的样本向量x,如果y=W T
·x>y0,如此x ∈w1;否如此x ∈w2.
二.数据描述 1.iris 数据
IRIS 数据集以鸢尾花的特征作为数据来源,数据集包含150个数据集,有4维,分为3 类,每类50个数据,每个数据包含4个属性,是在数据挖掘、数据分类中非常常
用的测试集、训练集.
2.sonar数据
Sonar数据集包含208个数据集,有60维,分为2类,第一类为98个数据,第二类为110个数据,每个数据包含60个属性,是在数据挖掘、数据分类中非常常用的测试集、训练集.
三.实验结果以与源代码
1.Iris
〔1〕代码:
clc
clear
data=xlsread<'Iris'>;
Iris1=data<1:50,1:4>;
Iris2=data<51:100,1:4>;
Iris3=data<101:150,1:4>;
%类均值向量
m1 = mean
m2 = mean
m3 = mean
%各类内离散度矩阵
s1 = zeros<4>;
s2 = zeros<4>;
s3 = zeros<4>;
for i=1:1:30
s1 = s1 +
end
for i=1:1:30
s2 = s2 +
end
for i=1:1:30
s3 = s3 +
end
%总类内离散矩阵
sw12 = s1 + s2;
sw13 = s1 + s3;
sw23 = s2 + s3;
%投影方向
w12 = <
w13 = <
w23 = <
%判别函数以与阈值T〔即w0〕
T12 = -0.5 *
kind2 = 0;
kind3 = 0;
newiris1=[];
newiris2=[];
newiris3=[];
for i=31:50
x = Iris1;
g12 = w12 * x' + T12;
g13 = w13 * x' + T13;
g23 = w23 * x' + T23;
if<
newiris1=[newiris1;x];
kind1=kind1+1;
elseif<
newiris2=[newiris2;x];
elseif<
newiris3=[newiris3;x];
end
end
for i=31:50
x = Iris2;
g12 = w12 * x' + T12;
g13 = w13 * x' + T13;
g23 = w23 * x' + T23;
if<
newiris1=[newiris1;x];
elseif<
kind2=kind2+1;
newiris2=[newiris2;x];
elseif<
newiris3=[newiris3;x];
end
end
for i=31:50
x = Iris3;
g12 = w12 * x' + T12;
g13 = w13 * x' + T13;
g23 = w23 * x' + T23;