模式识别实习报告.docx

上传人:b****6 文档编号:8428195 上传时间:2023-01-31 格式:DOCX 页数:18 大小:339.32KB
下载 相关 举报
模式识别实习报告.docx_第1页
第1页 / 共18页
模式识别实习报告.docx_第2页
第2页 / 共18页
模式识别实习报告.docx_第3页
第3页 / 共18页
模式识别实习报告.docx_第4页
第4页 / 共18页
模式识别实习报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

模式识别实习报告.docx

《模式识别实习报告.docx》由会员分享,可在线阅读,更多相关《模式识别实习报告.docx(18页珍藏版)》请在冰豆网上搜索。

模式识别实习报告.docx

模式识别实习报告

 

模式识别实习报告

 

班级:

09012

姓名:

毋一舟

学号:

2009302590247

 

一.实习目的

用Bayes分类算法将待定样本进行分类,按照协方差相等和不等进行分类。

并画出分界线。

1.在下列条件下,求待定样本x=(2,0)T的类别,画出分界线,编程上机。

1)、二类协方差相等,2)、二类协方差不等。

训练样本号k

123

123

特征x1

112

-1-1-2

特征x2

10-1

10-1

类别

ω1

ω2

2.有训练集资料矩阵如下表所示,现已知,N=9、N1=N2=N3=3、n=2、M=3,试问,X=(-2,2)T应属于哪一类?

(要求:

用两种解法a、三类协方差不等;b、三类协方差相等。

训练样本号k

123

123

123

特征x1

021

-1-2-2

001

特征x2

010

10-1

-2-1-2

类别

ω1

ω2

ω3

二.实习原理

通过训练样本特征及其特征值,若类的条件概率密度用正态来表示,则判别函数为:

 

决策面方程为:

 

在各类先验概率不相等的情况下:

(1)若Σi=Σ相等,即各类协方差相等:

(2)Σί为任意,各类协方差矩阵不等,二次项与i有关。

所以判别函数为二次型函数。

通过判别函数正负来判断待定样本的类别。

三.编程实现

本程序可以实现任意个数的类别,任意个特征以及任意样本个数的训练样本进行协方差相等,或者不等的分类。

对于问题一:

表格1

训练样本号k

123

123

特征

112

-1-1-2

特征

10-1

10-1

类别

待定样本为:

2,0

结果:

二类协方差不等的情况下,程序运行截图如下:

 

由图可见:

判别式计算结果为-64,小于零,属于第一类。

分界线方程为:

X1=0;x2=8/3;

用matlab编程画图结果如下:

若计算二类协方差相等,则图1最后一行输入Y,得结果如下:

由上图可知:

判别式结果为-8,小于零,属于第一类。

用matlab编程画图如下:

图7

第二题:

待判定样本为:

-2,2

表格2

训练样本号k

123

123

123

特征

021

-1-2-2

001

特征

010

10-1

-2-1-2

类别

三类协方差不等的情况下,程序运行截图如下:

运行结果如下:

接上图:

 

由上图可知判别函数为:

g1(x)=-2*x1^2+6*x1*x2-6*x2*x2+2*x1-2*x2-0.52

g2(x)=-6*x1^2+6*x1*x2-2*x2^2-20*x1+10*x2-16.52

g3(x)=-2*x1^2-2*x1*x2-2*x2^2-2*x1-6*x2-4.52

属于第二类

用matlab编程得三类分界线如下图:

图13

协方差相等时情形一样,依旧把图9最后改成Y,篇幅原因不再附图。

得判别函数为:

g1(x)=0.6666666*x1-0.1333333*x2-0.16727;

g2(x)=-1.3333333*x1+0.6666666*x2-0.96727;

g3(x)=0.9333333*x1-1.4666666*x2-1.23394.

属于第二类

用matlab画出分界线图得:

图14

附录

voidresult_2(float*constdeterm,float*constx_p,double*constxp,double*constxs_ni)//两类别的情况

{

charsure_;

doublep[3]={0};

cout<<"先验概率为:

"<

for(inti=0;i

{

p[i]=double(N[i])/nn;

cout<<"p["<

}

cout<

floata1,a2;

a1=log(determ[0]/determ[1]);

a2=log(p[0]/p[1]);

cout<

if(sure=='N')

{

floatx1[2]={0};

floatx2[2]={0};

floatm1,m2;

x1[0]=x_p[0]-xp[0];

x1[1]=x_p[1]-xp[1];

x2[0]=x_p[0]-xp[2];

x2[1]=x_p[1]-xp[3];

m1=(x1[0]*xs_ni[0]+x1[1]*xs_ni[2])*x1[0]+(x1[0]*xs_ni[1]+x1[1]*xs_ni[3])*x1[1];

m2=(x2[0]*xs_ni[4]+x2[1]*xs_ni[6])*x2[0]+(x2[0]*xs_ni[5]+x2[1]*xs_ni[7])*x2[1];

doubleg=0;//结果

g=1./2*m1-1./2*m2+1./2*a1-a2;

if(g>0)

sure_='Y';

elsesure_='N';

cout<

"<

if(sure_=='Y')

cout<<"属于第二类"<

elsecout<<"属于第一类"<

}

else

{

floata3[2],m3,m4,m5;

a3[0]=xp[2]-xp[0];

a3[1]=xp[3]-xp[1];

m3=(a3[0]*xs_ni[0]+a3[1]*xs_ni[2])*x_p[0]+(a3[0]*xs_ni[1]+a3[1]*xs_ni[3])*x_p[1];

m4=(xp[0]*xs_ni[0]+xp[1]*xs_ni[2])*xp[0]+(xp[0]*xs_ni[1]+xp[1]*xs_ni[3])*xp[1];

m5=(xp[2]*xs_ni[0]+xp[3]*xs_ni[2])*xp[2]+(xp[2]*xs_ni[1]+xp[3]*xs_ni[3])*xp[3];

doubleg=0;//结果

g=m3+1./2*(m4-m5)-a2;

if(g>0)

sure_='Y';

elsesure_='N';

cout<

"<

if(sure_=='Y')

cout<<"属于第二类"<

elsecout<<"属于第一类"<

}

}

voidresult_3(float*constdeterm,float*constx_p,double*constxp,double*constxs_ni)//三类别情况

{

charsure_;

doublep[3]={0};

cout<<"先验概率为:

"<

for(inti=0;i

{

p[i]=double(N[i])/nn;

cout<<"p["<

}

cout<

floata1[3],a2[3],a3[3],a4[3],a5[3],a6[6],g[3];

for(i=0;i

{

a1[i]=(-1./2)*log(determ[i]);

a2[i]=log(p[i]);

a3[i]=(-1./2)*((xp[0+i*2]*xs_ni[0+i*4]+xp[1+i*2]*xs_ni[2+i*4])*xp[0+i*2]+(xp[0+i*2]*xs_ni[1+i*4]+xp[1+i*2]*xs_ni[3+i*4])*xp[1+i*2]);

a4[i]=a3[i]+a1[i]+a2[i];

//cout<

}

if(sure=='N')

{

for(i=0;i

{

a5[i]=(x_p[0]*(-1./2)*xs_ni[0+i*4]+x_p[1]*(-1./2)*xs_ni[2+i*4])*x_p[0]+(x_p[0]*(-1./2)*xs_ni[1+i*4]+x_p[1]*(-1./2)*xs_ni[3+i*4])*x_p[1];

for(intk=0;k<2;k++)

a6[k+i*2]=xs_ni[0+i*4+k*2]*xp[0+i*2]+xs_ni[1+i*4+k*2]*xp[1+i*2];

g[i]=a5[i]+a6[i]+a4[i];

}

cout<

"<

for(i=0;i

{

cout<<"g"<

}

cout<<"判别函数为:

"<

cout<<"g1(x)=-2*x1^2+6*x1*x2-6*x2*x2+2*x1-2*x2-0.52"<

cout<<"g2(x)=-6*x1^2+6*x1*x2-2*x2^2-20*x1+10*x2-16.52"<

cout<<"g3(x)=-2*x1^2-2*x1*x2-2*x2^2-2*x1-6*x2-4.52"<

cout<<"属于第二类"<

}

else

{

floata3[2],m3,m4,m5;

a3[0]=xp[0]-xp[2];

a3[1]=xp[1]-xp[3];

m3=(a3[0]*xs_ni[0]+a3[1]*xs_ni[2])*x_p[0]+(a3[0]*xs_ni[1]+a3[1]*xs_ni[3])*x_p[1];

m4=(xp[0]*xs_ni[0]+xp[1]*xs_ni[2])*xp[0]+(xp[0]*xs_ni[1]+xp[1]*xs_ni[3])*xp[1];

m5=(xp[2]*xs_ni[0]+xp[3]*xs_ni[2])*xp[2]+(xp[2]*xs_ni[1]+xp[3]*xs_ni[3])*xp[3];

doubleg=0;//结果

g=m3+1./2*(m4-m5)-a2;

if(g>0)

sure_='Y';

elsesure_='N';

cout<

"<

if(sure_=='Y')

cout<<"属于第二类"<

elsecout<<"属于第一类"<

}

}

 

voidDisplayMatrix(double*constx,double*constxp,double*constxs,double*constxs_ni,float*constdeterm)

{

system("cls");

cout<

cout<<"特征数为"<<"\t\t"<

for(inti=1;i<=M;i++)

{

cout<<"第"<

"<<"\t"<

}

cout<<"总样本数:

"<<"\t\t"<

//特征值矩阵

cout<<"特征值矩阵为(按类别分):

"<

for(i=0;i

{

//cout<<"x["<

cout<

for(intj=0;j

{

cout<<"\t"<

}

cout<

for(j=N[i];j

{

cout<<"\t"<

}

cout<

}

//均值矩阵

cout<<"均值矩阵为:

"<

for(i=0;i

{

for(intj=0;j

{

cout<<"\t"<

}

cout<

}

 

if(sure=='N')

{

//协方差矩阵

cout<<"协方差矩阵为:

"<

for(i=0;i

{

cout<<"第"<

for(intk=0;k

{

for(intj=0;j

{

cout<<"\t"<

}

cout<

}

cout<

}

 

//行列式

cout<<"协方差行列式为:

"<

for(i=0;i

{

cout<<"第"<

"<

}

//协方差逆矩阵

cout<<"协方差的逆矩阵为:

"<

for(i=0;i

{

cout<<"第"<

"<

for(intj=0;j

{

for(intk=0;k

{

cout<<"\t"<

}

cout<

}

cout<

}

cout<

}

else

{

//协方差矩阵

cout<<"协方差矩阵为:

"<

for(intk=0;k

{

for(intj=0;j

{

cout<<"\t"<

}

cout<

}

cout<

//行列式

cout<<"协方差行列式为:

"<

cout<

//协方差逆矩阵

cout<<"协方差的逆矩阵为:

"<

for(intj=0;j

{

for(intk=0;k

{

cout<<"\t"<

}

cout<

}

cout<

}

}

 

voidmain()

{

InitNumber();

cout<

double*constx=newdouble[n*nn];//特征值

double*constxp=newdouble[M*n];//平均值

double*constxs=newdouble[n*n*M];//协方差

double*constxs_ni=newdouble[n*n*M];//协方差逆阵

float*constdeterm=newfloat[M];//协方差行列式

float*constx_p=newfloat[n];

InitMatrix(x,x_p);

mean(xp,x);

cout<<"协方差是否相等?

(Y/N):

";

cin>>sure;

if(sure=='N')

sigma(xp,xs,x);

else

sigma_(xp,xs,x);

comput_D(xs,determ);

ni_sigma(xs,xs_ni,determ);

DisplayMatrix(x,xp,xs,xs_ni,determ);

if(M==2)

result_2(determ,x_p,xp,xs_ni);

elseresult_3(determ,x_p,xp,xs_ni);

delete[]x;delete[]xp;delete[]xs;delete[]xs_ni;delete[]determ;delete[]x_p;}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1