模式识别大作业1

更新时间:2024-01-16 16:10:02 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

模式识别大作业

学号:021151** 姓名:** 任课教师:张**

--fisher线性判别和近邻法

I. Fisher线性判别

A. fisher线性判别简述

在应用统计方法解决模式识别的问题时,一再碰到的问题之一是维数问题.在低维空间里解析上或计算上行得通的方法,在高维里往往行不通.因此,降低维数就成为处理实际问题的关键.

我们考虑把d维空间的样本投影到一条直线上,形成一维空间,即把维数压缩到一维.这样,必须找一个最好的,易于区分的投影线.这个投影变换就是我们求解的解向量w*.

B.fisher线性判别的降维和判别

1.线性投影与Fisher准则函数

各类在d维特征空间里的样本均值向量:

Mi?1nixk?Xi?xk,i?1,2 (1)

通过变换w映射到一维特征空间后,各类的平均值为:

mi?1niyk?Yi?yk,i?1,2 (2)

映射后,各类样本“类内离散度”定义为:

Si2?yk?Yi?(yk?mi)2,i?1,2 (3)

显然,我们希望在映射之后,两类的平均值之间的距离越大越好,而各类的样本类内离散度越小越好。因此,定义Fisher准则函数:

JF(w)?|m1?m2|2s12?s22 (4)

*使J最大的解w就是最佳解向量,也就是Fisher的线性判别式。

F2.求解w

*从JF(w)的表达式可知,它并非w的显函数,必须进一步变换。 已知:

mi?mi?1niyk?Yi?yk,i?1,2, 依次代入上两式,有:

1TT1T,i?1,2 (5) wx?w(x)?wM?knx?kinixk?Xiik?Xi2TT2T2|m?m|?||wM?wM||?||w(M?M)||121212所以:

TTT ?w(M1?M2)(M1?M2)w?wSbw (6)

其中:Sb?(M1?M2)(M1?M2) (7)

Sb是原d维特征空间里的样本类内离散度矩阵,表示两类均值向量之间的离散度大小,

T因此,Sb越大越容易区分。

T将(4.5-6)mi?wMi和(4.5-2)

Mi?1nixk?Xi?xk代入(4.5-4)S式中:

2iSi2?xk?Xi?(wxTk?wTMi)2

?wT?xk?Xi?(xk?Mi)(xk?Mi)T?w?wTSiw (8)

其中:

Si?xk?Xi?(xk?Mi)(xk?Mi)T,i?1,2 (9)

22TTS?S?w(S?S)w?wSww (10) 1212因此:

显然:Sw?S1?S2 (11)

Sw称为原d维特征空间里,样本“类内离散度”矩阵。

Sw是样本“类内总离散度”矩阵。

为了便于分类,显然Si越小越好,也就是Sw越小越好。 将上述的所有推导结果代入JF(w)表达式: 可以得到:

w*???1?Sw(M1?M2)?其中,?是一个比例因子,不影响w的方向,可以删除,从而得到最

*后解:

w*?Sw(M1?M2)?1 (12)

*就使JF(w)取得最大值,w可使样本由d维空间向一维空间映射,其投影方向最好。

w*?Sw(M1?M2)?1是一个Fisher线性判断式.这个向量指出了相对于Fisher准则函数最好的投影

线方向。 C.算法流程图

左图为算法的流程设计图。

II.近邻法

A. 近邻法线简述

K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。

将与测试样本最近邻样本的类别作为决策的结果。对一个C类别问题,每类有Ni个样本,i?1,2,?C,则第i类?i的判别函数为:

gi(x)?min||x?xik||,k?1,2,?,Ni (1)

k因此,最近邻决策规则:

若 gj(x)?mingi(x),i?1,2,?c (2)

i则决策 x??j

III. 实验仿真

实验设计: 1)实验内容

对下列数据进行判别。在每一类里面随机选一半作为训练样本,另一半作为测试样本。来判别属于第一类的是否都正确,属于第二类中是否都属于第二类。

文件名 Sonar.xls Wdbc.data 类别数

2 2 维数 60 30 样本数 208 569

用fisher判别法和对这两组数据进行判别。 B.代码设计 1.fisher判别

%%

clc, clear;

M = xlsread('E:\\power\\专业课程\\大作业们\\sonar.xls'); %读取数据

sum1 = 0; sum2 = 0;

for iii=1:10

[aa, bb] = size(M); num1 = 1; num2 = 1; for n=1:aa if M(n, bb)==1

Data1(num1,:) = (M(n, 1:bb-1)); num1 = num1+1; else

Data2(num2,:) = (M(n, 1:bb-1)); num2 = num2+1; end end

d1=Data1( randsample([1:num1-1],floor(num1/2)), :); d2=Data2( randsample([1:num2-1],floor(num2/2)), :); m1 = mean(d1); m2 = mean(d2);

S1 = zeros(bb-1,bb-1); for ii = 1:floor(num1/2)

S1 = S1 + (d1(ii,:)-m1)' * (d1(ii,:)-m1); end

S2 = zeros(bb-1,bb-1); for ii = 1:floor(num2/2)

S2 = S2 + (d2(ii,:)-m2)' * (d2(ii,:)-m2); end

Sw = S1+S2;

w = inv(Sw) * (m1 - m2)';

for ii=1:floor(num1/2) dd1(ii)= w'* d1(ii,:)'; end

for ii = 1:floor(num2/2) dd2(ii)= w'* d2(ii,:)';

end

mm1 = mean(dd1')'; mm2 = mean(dd2')';

yo = (mm1 + mm2)/2; for ii=1:208

y = w' * M (ii,1 : bb-1)'; if (y >= yo) result(ii) = 1; elseif y < yo result(ii) = 2; % else

% result(ii) = 4; end end

err = M(:,61)-result'; err1 = err(1:num1-1); err2 = err(num1:aa);

ErrRate1 = sum(abs(err1))/(num1-1); sum1 = sum1 + ErrRate1;

ErrRate2 = sum(abs(err2))/(num2-1); sum2 = sum2 + ErrRate2; end

correctrate1 = 1 - sum1/10 correctrate2 = 1 - sum2/10

figure (1) hold on

plot(dd1,'^'); plot(dd2,'*')

figure (2) hold on

plot(d1,'^'); plot(d2,'*')

2.近邻法 %对wdbc数据求解

clc; clear;

M = csvread('E:\\power\\专业课程\\大作业们\\wdbc.csv'); [aa, bb] = size(M);%求行数(aa),求列数(bb) sum1= 0; sum2= 0; for iii=1:10 num1 = 1; num2 = 1; for n=1:aa if M(n, 1) == 1

Data1(num1,:) = M(n, 2:bb); %按行抽取数据

num1 = num1+1; else

Data2(num2,:) = M(n, 2:bb); %抽取数据 num2 = num2+1; end end

vector1 = randsample([1:num1-1],floor(num1/2)); vector2 = randsample([1:num2-1],floor(num2/2)); d1=Data1( vector1, :); %取一半的数据 d2=Data2( vector2, :);

for ii=1:aa

min1=inf; %初始化min1为最小值 for jj=1:floor(num1/2)

x=norm(M(ii,2:bb)-d1(jj,:)); if(x

%训练样本和第一组样本比较

min2=inf;

for jj=1:floor(num2/2)

x=norm(M(ii,2:bb)-d2(jj,:)); if(x

%训练样本和第二组样本比较 %找出最短欧氏距离

if min1

result(ii, 1) = 1; else

result(ii, 1) = 2; end end

counter1 = 0; counter2 = 0; for ii = 1:aa

if M(ii, 1)-result(ii,1) == -1 counter1= counter1+ 1;

elseif M(ii, 1)-result(ii,1) == 1 counter2= counter2+ 1; end end

correctrate1= 1 - abs(counter1)/aa ; %第一类错分到第二类(第一类被判别为第一类)

correctrate2= 1 - counter2/aa ; %第二类错分到第一类(第二类被判别为第二类)correctrate1

sum1= correctrate1+ sum1; sum2= correctrate2+ sum2; end

correctrate1= sum1/10 correctrate2= sum2/10

C.实验结果及分析

1)sonar数据 1)fisher判别

图1, sonar数据的fisher判别识别率

分析:随机在第一类里面选取一半的数据作为训练样本,然后与全部的数据进行作差比较,看剩下的原本属于第一类的样本是否也属于第一类,若测试样本仍然属于第一类,就计数得到正确率;若不为第一类,则计数得到错误率。在sonar样本中,用fisher判别得到的上组数据的识别率如上图。识别率的高低意味着原本分类的正确程度。这就说明原本这两类数据的给出已经分的较开。

图2,sonar数据fisher判别的降维分类图

上图是sonar六十维度的数据经过降维得到的二维图像,可以很明显的看出,在第二类里面有一个‘*’被错分。而w*也可以清晰的看出他的大致范围。我不太会把他们投影到一条一线上,像网上得到的那种图,但是用这个图也可以清晰的看出他的划分程度。

2)近邻法

图3,sonar数据的近邻法识别率

分析:近邻法同样是在两类里面选取一半的数据作为实验样本,另一半作为测试样本,过程是用测试的样本与第一类里的实验样本和第二类里的实验样本分别做欧氏距离。假设用第一类的测试样本中的一个数据做测试,若与第一类中得到的欧式距离最近则划分为第一类,同时也证明了原来划分是正确的;若与第二类中的得到的欧式距离最近则划分为第二类,计数它为错误的划分。

近邻法得到的识别率比fisher得到的识别率高,这也说明了近邻法比fisher更优。 2.wdbc数据 1)fisher判别

图4,wdbc数据的fisher判别识别率

Wdbc是30维度的数据测试结果如上图。得到的识别率相对较高。

图5,wdbc数据的fisher判别降维分类图 2)近邻法

图6,wdbc数据的近邻法识别率

VI. 报告总结

通过本次大作业,我深刻的理解了fisher判别和近邻法,并对matlab也有了一定的学习。为了写好大作业,要在网上进行资料查找,和别人对比,让自己的大作业有更多的亮点。编程能力也有了不少的提升。对matlab环境不太熟悉,很多语句思想都来自c语言,但是本质的东西并没有太多变化,理解了fisher的降维和分类思想,理解了近邻法的求欧氏距离和其判别思想,编程也就容易多了。通过这次大作业确实进步不少。感谢老师能给我们这个机会!

图5,wdbc数据的fisher判别降维分类图 2)近邻法

图6,wdbc数据的近邻法识别率

VI. 报告总结

通过本次大作业,我深刻的理解了fisher判别和近邻法,并对matlab也有了一定的学习。为了写好大作业,要在网上进行资料查找,和别人对比,让自己的大作业有更多的亮点。编程能力也有了不少的提升。对matlab环境不太熟悉,很多语句思想都来自c语言,但是本质的东西并没有太多变化,理解了fisher的降维和分类思想,理解了近邻法的求欧氏距离和其判别思想,编程也就容易多了。通过这次大作业确实进步不少。感谢老师能给我们这个机会!

本文来源:https://www.bwwdw.com/article/a9fo.html

微信扫码分享

《模式识别大作业1.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
下载全文
范文搜索
下载文档
Top