精品

感谢下载载

课程名称 数据分析方法 课程编号

实验地点 系统建模与仿真实验室SL110 实验时间

校外指导教师 无 校内指导教师

实验名称 实验3 距离判别与贝叶斯判别分析

评阅人签字 成绩

实验数据与内容

我国山区某大型化工厂, 在厂区及邻近地区挑选有代表性的15个大气取样点,每日4次同时抽取

大气样品, 测定其中含有的6种气体的浓度, 前后共4天, 每个取样点每种气体实测16次, 计算

每个取样点每种气体的平均浓度, 数据见表4-8。气体数据对应的污染地区分类见表4-8中最后一列。

现有两个取自该地区的4个气体样本,气体指标见表4-8中后4行,试解决以下问题:

1. 判别两类总体的协方差矩阵是否相等,然后用马氏距离差别这4个未知气体样本的污染类别, 并

计算回代误判率与交叉误判率;若两类总体服从正态分布,第一类与第二类的先验概率分别为7/15、

8/15, 利用贝叶斯判别样本的污染分类。

2.先验概率为多少时,距离判别与贝时斯判别相同?调整先验概率对判别结果的影响是什么?

3.对第一类与第二类的先验概率分别为7/15、8/15,计算误判概率。

精品

感谢下载载

一、实验目的

1.熟练掌握MATLAB软件进行距离判别与贝叶斯判别的方法与步骤。

2.掌握判别分析的回代误判率与交叉误判率的编程。

3.掌握贝叶斯判别的误判率的计算。

二、实验原理

1)在MATLAB中,进行数据的判别分析命令为classify,其调用格式为:

class=classify(sample,training,group’type ’)

将sample 数据的每一行指定到训练集training的一个类中。Sample 和training

必须具有相同的列数。group 向量包含从1 到组数的正整数,它指明训练营集中的每一

行属于哪一类。group 和training 必须具有相同的行数。’type’是可选项,

选’linear’表示总体为多元正态总体,选’quadratic’与’mahalanobis’。该函数

返回class,它是一个与sample具有相同行数的向量。Class的每一个元素指定sample

中对应元素的分类。通过计算sample和training 中每一行的马氏距离,classify 函数

决定sample中的每一行属于哪一个分类。

2)贝叶斯判别方法步骤

第1 步,验证两个总体服从二元正态分布;第2 步,检验两个总体的协方差矩阵相

等;估计两个总体的先验概率p1、p2;利用MATLAB软件计算。

3)回代误判率

设G1,G2为两个总体,x1,x2…和y1,y2…是分别来自G1,G2的训练样本,以全体

训练样本作为m+n个新样品,逐个代入已建立的判别准则中判别其归属,这个过程称为

回判。回判结果中若属于G1的样品被误判为属于G2的个数为N1个,属于G2的样品被

误判为属于G1的个数为N2个,则误判估计为:

P^=(N1+N2)/(m+n)

误判率的回代估计易于计算。但是,p^是由建立判别函数的数据反过来用作评估准

则的数据而得到的。所以有偏,往往比真实误判率小。当训练样本容量较大时,p^可以

作为真实误判率的一种估计。

4)交叉误判率估计是每次剔除一个样品,利用m+n-1个训练样本建立判别准则,再

利用建立的准则对删除的样本进行判别。对每个样品做如上分析,以其误判的比例作为

误判率,步骤;

从总体G1的训练样本开始,剔除其中一个样品,剩余的m-1个样品与G2中的全部

样品建立判别函数;

精品

感谢下载载

用建立的判别函数对剔除的样品进行判别;

重复以上步骤,直到G1中的全部样本依次被删除又进行判别,其误判的样品个数记

为N1*;

对G2的样品重复以上步骤,直到G2中的全部样本依次被删除又进行判别,其误判

的样品个数记为N2*。

于是交叉误判率估计为:

p^*=(N1*+N2*)/(m+n)

5)贝叶斯判别的有效性可以通过平均误判率来确定。判别准则的误判率在一定程度

上依赖于所考虑的各总体间的差异程度。各总体间差异越大,就越有可能建立有效的判

别准则。如果各总体间差异很小,做判别分析的意义不大。

三、实验步骤

输入数

据,判别两类总体的协方差阵是否相等,用马氏距离判断判别污染类别,计算

回代误判率与交叉误判率,贝叶斯判别污染分类。

四、实验过程原始记录(数据、图表、计算等)

1、输入矩阵,计算协方差矩阵是否相等

>> A=[0.0560 0.0840 0.0310 0.0380 0.0081 0.0220

0.0400 0.0550 0.1000 0.1100 0.0220 0.0073

……

0.0690 0.0870 0.0270 0.0500 0.0890 0.0210

0.0520 0.0840 0.0210 0.0370 0.0071 0.0220]

>> x=[0.052 0.084 0.021 0.037 0.0071 0.022

0.0410 0.0550 0.1100 0.1100 0.0210 0.0073

0.0300 0.1120 0.0720 0.1600 0.0560 0.0210

0.0740 0.0830 0.1050 0.1900 0.0200 1.0000]

>> G1=A([1:4 7:8 15],:);

>> G2=A([5:6 9:4 15],:);

>> n1=size(G1,1);

>> n2=size(G2,1);

>> n=n1+n2;

>> k=2;

精品

感谢下载载

>> p=6;

>> f=p*(p+1)*(k-1)/2;

>> d=(2*p^2+3*p-1)*(1/(n1-1)+1/(n2-1)-1/(n-k))/(6*(p+1)*(k-1));

>> p1=n1/n;p2=n2/n;

>> m1=mean(G1);m2=mean(G2);

>> s1=cov(G1);s2=cov(G2);

>> s=((n1-1)*s1+(n2-1)*s2)/(n-k);

>> M=(n-k)*log(det(s))-((n1-1)*log(det(s1))+(n2-1)*log(det(s2)));

>> T=(1-d)*M

T =

-44.8237 + 0.9288i

>> C=chi2inv(0.95,f)

C =

32.6706

>> if T

disp('两组数据协方差相等');

else

disp('两组数据协方差不相等');

end

两组数据协方差相等

2、构造判别函数,得出判别结果

>> for i=1:4

w(1)=m1*inv(s)*x(i,:)'-1/2*m1*inv(s)*m1'+log(p1);

w(2)=m2*inv(s)*x(i,:)'-1/2*m1*inv(s)*m2'+log(p2);

for j=1:2

if w(j)==max(w)

disp(['待判样品属于第',num2str(j),'类污染']);

end

end

end

精品

感谢下载载

待判样品属于第2 类污染

待判样品属于第2 类污染

待判样品属于第2 类污染

待判样品属于第2 类污染

3、计算回代误判率

>> n11=0;n22=0;

>> for i=1:n1

w1(i,1)=m1*inv(s)*G1(i,:)'-1/2*m1*inv(s)*m1'+log(p1);

w1(i,2)=m2*inv(s)*G1(i,:)'-1/2*m2*inv(s)*m2'+log(p2);

for j=1:2

if w1(i,j)==max(w1(i,:))&j~=1

n11=n11+1;

end

end

end

>> for i=1:n2

w2(i,1)=m1*inv(s)*G2(i,:)'-1/2*m1*inv(s)*m1'+log(p1);

w2(i,2)=m2*inv(s)*G2(i,:)'-1/2*m2*inv(s)*m2'+log(p2);

for j=1:2

if w2(i,j)==max(w2(i,:))&j~=2

n22=n22+1;

end

end

end

>> poo=(n11+n22)/(n1+n2)

poo =

0.1000

4、计算交叉误判率

>> N11=0;N22=0;

>> for k=1:n1

精品

感谢下载载

A=G1([1:k-1,k+1:n1],:);

N1=length(A(:,1));

M1=mean(A,1);s11=cov(A);

S1=((N1-1)*s11+(n2-1)*s2)/(N1+n2-k);

po1=N1/(n-1);po2=n2/(n-1);

for i=1:n1

w1(i,1)=M1*inv(S1)*G1(i,:)'-1/2*M1*inv(S1)*M1'+log(po1);

w1(i,2)=m2*inv(S1)*G1(i,:)'-1/2*m2*inv(S1)*m2'+log(po2);

for j=1:2

if w1(i.j)==max(W1(i,:))&j~=1

N11=N11+1;

end

end

end

end

尝试引用非结构体数组的字段(我没辙了,实在不知道哪错了)

五、实验结果及分析

此题用贝叶斯判别法分析效果明显

说明:此部分的内容和格式可根据实验课程的具体需要、要求自行设计和确定相关栏目。

精品

感谢下载载

精品

感谢下载载