锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

实验二 势函数算法的迭代训练预习报告

时间:2022-10-12 07:30:01 rk093电位器rk0971110909电位器

1.基本思想

空间会形成一个“高地”,这些样本点所处的位置就是“山头”。同样,用电位的几何分布来看待它ω2模式样本在其附近空间形成凹地。在两种电位分布之间选择合适的等高线,可视为模式分类的判别函数。模式分类的判别函数可以通过分布在模式空间中的许多样本向量{xk, k=1,2,…且 }产生的势函数。 任何样本产生的势函数K(x, xk)表征,判断函数d(x)势函数序列可由势函数序列K(x, x1), K(x, x2),…在训练过程中,序列中的这些训练过程中输入机器的训练模式样本x1,x2,…。在训练状态下,模式样本逐个输入分类器,分类器连续计算相应的潜力函数,第k步迭代中的积累位置决定了步前所有单个潜力函数的积累。以K(x)如果添加的训练样本表示位置函数的积累xk 1.如果分类错误,则需要修改积累函数。如果分类正确,则不变。从势函数中可以看出,积累位势起着判断函数的作用xk 1属于ω1时,Kk(xk 1)>0;当xk 1属于ω2时,Kk(xk 1)<0.积累位势可作为判断函数,无需任何修改。由于模式样本的错误分类会导致训练中积累位置的变化,因此提供了确定势函数算法ω1和ω二、二别函数的迭代过程。判别函数表达式:取d(x)=K(x),则有:dk 1(x)= dk(x) rk 1K(x, xk 1)。

2.实验内容
假设正常(类)和非正常(类)对患者三项主要指标进行检查的数据如下:
类1:(1,2,5), (1,1, (3,3,6);
类2: (5、6、10),(7、6、11).

3.实验步骤

①选定势函数;
②确定适当的数据结构,以完成势函数和判断函数的正确表示;
③训练学习训练样本,建立判别函数,满足分类要求
④记录并输出训练轮;
⑤用你的分类器判断所有样本的类别,比较实际类别的差异;
⑥判断分类样本,得到其类别,如可能,用几何分布来解释;
⑦输出判别函数的表达形式。

4.代码

#include??
#include??
#define?n?6
#define?m?30?
#define?d?3??
struct?sample?{??
int?x[d];?
int?cl;?
};
?struct?func{?
?int?symbol;??
int?index;
?};?
struct?func?ftbl[m];?
int?k,r=-1,tag=1,i,j;
float?g=0,temp;
struct?sample?s[n]={?
{1,2,5,1},
?{3,3,6,1}
{5,6,10,2},
{7,6,11,2},
{8,7,12,2}
};?
int?main()?{
while(tag==1){?
tag=0;???
for?(k=0;k if?(r==-1){
?r ;
?ftbl[r].symbol=1;?
ftbl[r].index=0;?
continue;?
}else{
g=0;
for(i=0;i<=r;i ){
temp=0;
for(j=0;j temp =(s[k].x[j]-s[ftbl[i].index].x[j])*(s[k].x[j]-s[ftbl[i].index].x[j]);
g =ftbl[i].symbol*exp(-temp);
}?
if((g>0&&s[k].cl==1)||(g<0&&s[k].cl==2))?{}
continue;
}else?{
r ;
ftbl[r].index=k;
tag=1;
if(g>0&&s[k].cl==2){
ftbl[r].symbol=-1;
}
else?if(g<0&&s[k].cl==1){
ftbl[r].symbol=1;
}
}
}
}
}
cout<<"\n\n\n";
for(i=0;i<=r;i ){
if(ftbl[i].symbol==1)
if(i==0)?
cout<<"exp{-[(x1";
else?
cout<<" exp{-[(x1";else
cout<<"-exp{-[(x1";
if?(s[ftbl[i].index].x[0]>0){
?cout<<"-"< }
else?if(s[ftbl[i].index].x[0]<0){
cout<<" "<<-s[ftbl[i].index].x[0]<<")^2 (x2";
}else{
cout<<")^2 (x2";
}
if?(s[ftbl[i].index].x[1]>0){
cout<<"-"< }
else?if(s[ftbl[i].index].x[1]<0){
cout<<" "<<-s[ftbl[i].index].x[1]<<")^2 (x3";
}else{
cout<<")^2 (x3";
}
?if?(s[ftbl[i].index].x[2]>0){
cout<<"-"< }
else?if(s[ftbl[i].index].x[2]<0){
cout<<" "<<-s[ftbl[i].index].x[2]<<")^2]}";
}else{
cout<<")^2]}";

cout< }?

5.测试

(1)先测试现有样本的正确性。
(2)用待分类数据进行分类。 (二、三、五)
分别测试,检查它们的几何分布是否与分类和分类的结果一致,以确认设计的分类器是正确的。

测试代码:

cout<<"判断每个样本的类别:"< for?(k=0;k g=0;
for(i=0;i<=r;i )?{?
temp=0;?
for(j=0;j ?temp =(s[k].x[j]-s[ftbl[i].index].x[j])*(s[k].x[j]-s[ftbl[i].index].x[j]);?
?g =ftbl[i].symbol*exp(-temp);?
}?
if?(g>0){
cout<<"第"< else?if?(g<0){
cout<<"第"< }else{
cout<<"第"< }
?cout< ///先判断(2、3、5)的类别
  int a[]={2,3,5};    
  g=0;
  for(i=0;i<=r;i++){ 
  temp=0;
  for(j=0;j   temp+=(a[j]-s[ftbl[i].index].x[j])*(a[j]-s[ftbl[i].index].x[j]);
  g+=ftbl[i].symbol*exp(-temp); 
} 
  if (g>0){
    cout<<“样本a=(2,3,5)的类别为"<<1<<"\t\t"; 
}
  else if (g<0){
  cout<<“个样本a=(2,3,5)的类别为"<<2<<"\t\t";
} else{
  cout<<“个样本a=(2,3,5)的类别无法识别"<<"\t\t"<<“个样本a=(2,3,5)的类别为"< }
//再判断(6,7,10)的类别
int b[]={6,7,10} ;
g=0; 
for(i=0;i<=r;i++){
temp=0;
for(j=0;j temp+=(b[j]-s[ftbl[i].index].x[j])*(b[j]-s[ftbl[i].index].x[j]);
g+=ftbl[i].symbol*exp(-temp);
}
if (g>0){
cout<<“样本b=(6,7,10)的类别为"<<1<<"\t\t";
}
else if (g<0){
cout<<“个样本a=b=(6,7,10))的类别为"<<2<<"\t\t";
}else{
cout<<“个样本b=(6,7,10)的类别无法识别"<<"\t\t" <<“个样本b=(6,7,10)的类别为"< }
}

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章