FISHER线性判别MATLAB实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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>0,如此决策w x 1∈;如果g<0,如此决策w x 2∈;如果g=0,如此可将x 任意分到某一类,或拒绝.

〔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 + - m1>'* - m1>;

end

for i=1:1:30

s2 = s2 + - m2>'* - m2>;

end

for i=1:1:30

s3 = s3 + - m3>'* - m3>;

end

%总类内离散矩阵

sw12 = s1 + s2;

sw13 = s1 + s3;

sw23 = s2 + s3;

%投影方向

w12 = <*'>';

w13 = <*'>';

w23 = <*'>';

%判别函数以与阈值T〔即w0〕

T12 = -0.5 * *inv*'; T13 = -0.5 * *inv*'; T23 = -0.5 * *inv*'; kind1 = 0;

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< 0>& 0>>

newiris1=[newiris1;x];

kind1=kind1+1;

elseif<& 0>>

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< 0>& 0>>

newiris1=[newiris1;x];

elseif<& 0>>

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;

相关文档
最新文档