[模式识别]实验报告
《模式识别》实验报告
一、数据生成与绘图实验
1. 高斯发生器。用均值为m ,协方差矩阵为S 的高斯分布生成N 个l 维向量。 设置均值
代码:
m=[-1;0];
S=[1,1/2;1/2,1];
mvnrnd(m,S,8)
结果显示:
ans =
-0.4623 3.3678
0.8339 3.3153
-3.2588 -2.2985
-0.1378 3.0594
-0.6812 0.7876
-2.3077 -0.7085
-1.4336 0.4022
-0.6574 -0.0062
2. 高斯函数计算。编写一个计算已知向量x 的高斯分布(m , s ) 值的Matlab 函数。 均值与协方差与第一题相同,因此代码如下:
x=[1;1];
z=1/((2*pi)^0.5*det(S)^0.5)*exp(-0.5*(x-m)'*inv(S)*(x-m))
显示结果: m=⎡⎣-1,0⎤⎦T ,协方差为[1,1/2;1/2,1];
z =
0.0623
3. 由高斯分布类生成数据集。编写一个Matlab 函数,生成N 个l 维向量数据集,它们是基于c 个本体的高斯分布(mi , si ),对应先验概率Pi ,i= 1,……,c。 M 文件如下:
function [X,Y] = generate_gauss_classes(m,S,P,N)
[r,c]=size(m);
X=[];
Y=[];
for j=1:c
t=mvnrnd(m(:,j),S(:,:,j),fix(P(j)*N));
X=[X t];
Y=[Y ones(1,fix(P(j)*N))*j];
end
end
调用指令如下:
m1=[1;1];
m2=[12;8];
m3=[16;1];
S1=[4,0;0,4];
S2=[4,0;0,4];
S3=[4,0;0,4];
m=[m1,m2,m3];
S(:,:,1)=S1;
S(:,:,2)=S2;
S(:,:,3)=S3;
P=[1/3,1/3,1/3];
N=10;
[X,Y] = generate_gauss_classes(m,S,P,N)
二、贝叶斯决策上机实验
1.(a)由均值向量m1=[1;1],m2=[7;7],m3=[15;1],方差矩阵S 的正态分布形成三个等(先验)概率的类,再基于这三个类,生成并绘制一个N =1000 的二维向量的数据集。
(b)当类的先验概率定义为向量P =[0.6,0.3,0.1],重复(a )。
(c)仔细分析每个类向量形成的聚类的形状、向量数量的特点及分布参数的影响。
M文件代码如下:
function plotData(P)
m1=[1;1];
S1=[12,0;0,1];
m2=[7;7];
S2=[8,3;3,2];
m3=[15;1];
S3=[2,0;0,2];
N=1000;
r1=mvnrnd(m1,S1,fix(P(1)*N));
r2=mvnrnd(m2,S2,fix(P(2)*N));
r3=mvnrnd(m3,S3,fix(P(3)*N));
figure(1);
plot(r1(:,1),r1(:,2),'r.');
hold on;
plot(r2(:,1),r2(:,2),'g.');
hold on;
plot(r3(:,1),r3(:,2),'b.');
end
(a)调用指令:
P=[1/3,1/3,1/3];
plotData(P)
实验结果如下:
-10-505101520
图(1)红色代表第一类,绿色代表第二类,蓝色代表第三类
(b)调用指令:P=[0.6,0.3,0.1];
plotData(P)
实验结果如下:
12
10
8
6
4
2
-2
-4
-10-505101520
(c)分析:比较(a)和(b)两个实验可以得出(1)协方差矩阵直接影响了聚类的形状.(2)在第一种情况下,每一类有大致相同数量的向量,在后一种情况下,最左边和最右边的类分别比前一种情况更“密集”和更“稀疏”。
2.M 文件如下:
function plotData2(m1,m2,m3,S1,S2,S3)
P=[1/3,1/3,1/3];
N=1000;
r1=mvnrnd(m1,S1,fix(P(1)*N));
r2=mvnrnd(m2,S2,fix(P(2)*N));
r3=mvnrnd(m3,S3,fix(P(3)*N));
figure(1);
plot(r1(:,1),r1(:,2),'r.');
hold on;
plot(r2(:,1),r2(:,2),'g.');
hold on;
plot(r3(:,1),r3(:,2),'b.');
End
(a)调用指令:
m1=[1,1];
m2=[12,8];
m3=[16,1];
S1=[4,0;0,4];
S2=[4,0;0,4];
S3=[4,0;0,4];
plotData2(m1,m2,m3,S1,S2,S3)
实验结果如下:
14
12
10
8
6
4
2
-2
-4
-6-10-[1**********]
(b)调用指令:
m1=[1,1];
m2=[14,7];
m3=[16,1];
S1=[5,3;3,4];
S2=[5,3;3,4];
S3=[5,3;3,4];
plotData2(m1,m2,m3,S1,S2,S3)
实验结果如下:
15
10
5
-5
-10-10-[1**********]
(c)调用指令如下:
m1=[1,1];
m2=[8,6];
m3=[13,1];
S1=[6,0;0,6];
S2=[6,0;0,6];
S3=[6,0;0,6];
plotData2(m1,m2,m3,S1,S2,S3)
实验结果如下:
14
12
10
8
6
4
2
-2
-4
-6-10-[1**********]
(d)调用指令:
m1=[1,1];
m2=[10,5];
m3=[11,1];
S1=[7,4;4,5];
S2=[7,4;4,5];
S3=[7,4;4,5];
plotData2(m1,m2,m3,S1,S2,S3)
实验结果如下:
15
10
5
-5
-10-10-505101520
2. 对X1 ~X4 分别重复以下实验,并仔细分析实验结果,得出结论。
(1)对X 应用贝叶斯分类、欧几里德距离以及Mahalanobis 距离分类。
(2)计算每种分类器的分类误差,绘制数据集的分类结果,错分的向量加圆圈表示。
M 文件如下(贝叶斯分类) :
function z=Bayes_classifier(m,S,P,a)
[n,r]=size(a);
[r,c]=size(m);
for i=1:n
for j=1:c
t(j)=P(j)*comp_gauss_dens_val(m(:,j),S(:,:,j),a(i,:)');
end
[num,z(i)]=max(t);
end
End
M 文件如下(欧几里得分类器) :
function z=Euclidean_classifier(m,a)
[n,r]=size(a);
[r,c]=size(m);
for i=1:n
for j=1:c
t(j)=sqrt((a(i,:)'-m(:,j))'*(a(i,:)'-m(:,j)));
end
[num,z(i)]=min(t);
end
end
M 文件如下(Mahalanobis距离分类器) :
function z=Mahalanobis_classifier(m,S,a)
[n,r]=size(a);
[r,c]=size(m);
for i=1:n
for j=1:c
t(j)=sqrt((a(i,:)'-m(:,j))'*inv(S(:,:,j))*(a(i,:)'-m(:,j)));
end
[num,z(i)]=min(t);
end
end
M 文件如下(对数据集X1分别使用三种分类器作图)
function error=plotX1(m1,m2,m3,S1,S2,S3)
m=[m1,m2,m3];
S(:,:,1)=S1;
S(:,:,2)=S2;
S(:,:,3)=S3;
P=[1/3,1/3,1/3];
N=1000;
numArray=fix(P*N);
a=[];
[r,c]=size(m);
pale1=['r.';'g.';'b.'];
pale2=['ko';'ko';'ko'];
[X,Y]=generate_gauss_classes(m,S,P,N);
for i=1:numArray(1)
for j=1:2
a(i,j)=X(i,j);
end
end
for i=1:numArray(2)
for j=1:2
a(i+numArray(1),j)=X(i,j+2);
end
end
for i=1:numArray(3)
for j=1:2
a(i+numArray(1)+numArray(2),j)=X(i,j+4);
end
end
[k,r]=size(a);
z1=Bayes_classifier(m,S,P,a);
z2=Euclidean_classifier(m,a);
z3=Mahalanobis_classifier(m,S,a);
error(1)=0;
error(2)=0;
error(3)=0;
figure(1);
title('贝叶斯分类器');
hold on;
for n=1:k
if(Y(n)~=z1(n))
error(1)=error(1)+1;
plot(a(n,1),a(n,2),pale2(Y(n),:));
hold on;
end
plot(a(n,1),a(n,2),pale1(Y(n),:));
hold on;
end
figure(2);
title('欧几里得距离分类器');
hold on;
for n=1:k
if(Y(n)~=z2(n))
error(2)=error(2)+1;
plot(a(n,1),a(n,2),pale2(Y(n),:));
hold on;
end
plot(a(n,1),a(n,2),pale1(Y(n),:));
hold on;
end
figure(3);
title('Mahalaobis距离分类器');
hold on;
for n=1:k
if(Y(n)~=z3(n))
error(3)=error(3)+1;
plot(a(n,1),a(n,2),pale2(Y(n),:));
hold on;
end
plot(a(n,1),a(n,2),pale1(Y(n),:));
hold on;
end
end
(a)对X1分别使用贝叶斯分类器,欧几里得距离分类器以及Mahalanobis 分类器进行分类,程序以及结果如下:
调用指令:
m1=[1;1];
m2=[12;8];
m3=[16;1];
S1=[4,0;0,4];
S2=[4,0;0,4];
S3=[4,0;0,4];
plotX(m1,m2,m3,S1,S2,S3)
结果显示(对X1数据集分别用三种分类器产生的错误数) :
ans =
17 17 17
贝叶斯分类器
-[1**********]
欧几里得距离分类器
-5
0510152025
Mahalaobis 距离分类器
-5
05101520
25
(b)对X2分别使用贝叶斯分类器,欧几里得距离分类器以及Mahalanobis 分类器进行分类,程序以及结果如下:
m1=[1;1]; m2=[14;7]; m3=[16;1]; S1=[5,3;3,4]; S2=[5,3;3,4];
S3=[5,3;3,4];
plotX(m1,m2,m3,S1,S2,S3)
结果显示: ans =
8 21 8
贝叶斯分类
器
15
10
5
-5
-10-5
0510152025
欧几里得距离分类
器
15
10
5
-5
-10-5
0510152025
Mahalaobis 距离分类
器
15
10
5
-5
-10-5
0510152025
(c)对X3分别使用贝叶斯分类器,欧几里得距离分类器以及Mahalanobis 分类器进行分类,程序以及结果如下: 指令调用:
m1=[1;1]; m2=[8;6]; m3=[13;1]; S1=[6,0;0,6]; S2=[6,0;0,6]; S3=[6,0;0,6];
plotX(m1,m2,m3,S1,S2,S3)
结果显示: ans =
74 74 74
贝叶斯分类器
-10
-5
5
10
15
20
25
欧几里得距离分类器
-10
-5
5
10
15
20
25
Mahalaobis 距离分类器
-10
-5
5
10
15
20
25
(d)对X4分别使用贝叶斯分类器,欧几里得距离分类器以及Mahalanobis 分类器进行分类,程序以及结果如下:
m1=[1;1]; m2=[10;5]; m3=[11;1]; S1=[7,4;4,5]; S2=[7,4;4,5]; S3=[7,4;4,5];
plotX(m1,m2,m3,S1,S2,S3)
结果显示:
ans =
82 119 82
贝叶斯分类器
欧几里得距离分类器
Mahalaobis 距离分类器
实验分析:对X1—X4应用贝叶斯分类、欧几里德距离以及Mahalanobis 距离分类,可以得出(1)对于不同的m,S 的数据集,采用这三种分类器进行分类,错误率相差很大(2)对于同一种数据集而言,使用贝叶斯分类器与Mahalanobis 距离分类器产生的错误数是相同的。