实验目的
用势函数的概念来确定判别函数和划分类别界面。

理论基础
势函数法是非线性分类器中常用到的一种方法,它借用电场的概念,来解决模式分类问题。用势函数的概念来确定判别函数和划分类别界面。在势函数法中,把属于一类的样品看做正电荷,而属于另一类的样品看作负电荷,从而把模式的分类转变为正负电荷的转移,电位为0 的等位线即为判别界限。

基本思想:

假设要划分属于两种类别w1w1和w2w2的模式样本,这些样本可堪称是分布在nn维模式空间中的点xkxk。
把属于w1w1的点比拟维某种能源点,在点上,电位达到峰值。
随着与该点距离的增大,电位分布迅速减小,即把样本xkxk附近空间xx点上的电位分布,看成是一个势函数K(x,xk)K(x,xk)。
对于属于w1w1的样本集群,其附近空间会形成一个“高地”,这些样本所处的位置就是“山头”。
同理,用电位的几何分布来看待属于w2w2的模式样本,在其附近形成“凹地”。
只要在两类电位分布之间选择合适的等高线,就可以认为是模型分类的判别函数。
势函数与积累势函数

实验代码:

#include <iostream> 
#include <math.h> 
#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<n;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<d;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<<"-"<<s[ftbl[i].index].x[0]<<")^2+(x2";
}
  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<<"-"<<s[ftbl[i].index].x[1]<<")^2+(x3";
}
  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<<"-"<<s[ftbl[i].index].x[2]<<")^2]}";
}
  else if(s[ftbl[i].index].x[2]<0){
  cout<<"+"<<-s[ftbl[i].index].x[2]<<")^2]}";
}else{
  cout<<")^2]}";

  cout<<endl;
} 

1、先测试已有样本的正确性。
2、用待分类数据加以分类。这里,对样本: (2,3,5),(6,7,10)
分别测试,检查它们几何分布情况是否与得到的分别属于类和类的结果相符,从而确认所设计的分类器是正确的。

cout<<"判断每一个样本的类别:"<<endl;  
for (k=0;k<n;k++) { 
  g=0;
  for(i=0;i<=r;i++) { 
  temp=0; 
  for(j=0;j<d;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<<"第"<<k<<“个样本的类别为"<<1<<"\t";
else if (g<0){
  cout<<"第"<<k<<“个样本的类别为"<<2<<"\t";
}else{
  cout<<"第"<<k<<“个样本的类别无法识别"<<"\t\t"<< "第"<<k<<“个样本的实际类别为"<<s[k].cl<<endl;
}
   cout<<endl; // 判断(2,3,5),(6,7,10)分别所属的类别 
  //先判断(2,3,5)的类别
  int a[]={2,3,5};    
  g=0;
  for(i=0;i<=r;i++){ 
  temp=0;
  for(j=0;j<d;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)的类别为"<<s[k].cl<<endl;
}
//再判断(6,7,10)的类别
int b[]={6,7,10} ;
g=0; 
for(i=0;i<=r;i++){
temp=0;
for(j=0;j<d;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)的类别为"<<s[k].cl<<endl;
}
}

实验二:势函数实验 预习报告相关推荐

  1. 实验二 势函数算法的迭代训练

    实验二 势函数算法的迭代训练 一.实验目的 通过本实验的学习,使学生了解或掌握模式识别中利用势函数思想设计非线性判别函数的方法,能够实现模式的分类.学会运用已学习的先导课程如数据结构和算法设计知识,选 ...

  2. mysql 实验_实验二 MySQL 实验.doc

    实验二 MySQL 实验 实验二 MySQL数据库操作实验 实验目的: 掌握MySQL数据库的安装方法 掌握MySQL数据库的使用 熟悉数据库管理工具的使用 实验要求: 利用MySQL命令创建数据库和 ...

  3. C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序

    C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序 实验内容:Windows 窗体程序 一.实验目的及要求 二.实验环境 三.实验内容与步骤 一.设计简单的计算器 3.1.实验内容 ...

  4. 计算机网络实验教程钱德沛_北航研究生计算机网络实验_实验二 数据链路层实验...

    实验二 数据链路层实验 实验内容来自<计算机网络实验教程(第2版)>(钱德沛.张力军)相关部分 (另外实验一就是熟悉网络实验环境) 在网络课程学习中,802.3和ETHERNETII规定了 ...

  5. 实验五 java gui(预习报告)

    面向对象--Java实验报告 实验五:图形化应用程序开发 实验五 图形化应用程序开发(预习报告) <center> <strong>姓名:</strong> < ...

  6. 20162329 张旭升 实验二:实验报告

    实验报告 课程:程序设计与数据结构 班级: 1623 姓名: 张旭升 学号:20162329 指导教师:娄嘉鹏 王志强 实验日期:4月14日 实验密级: 非密级 预习程度: 已预习 必修/选修: 必修 ...

  7. 数据库原理实验二 数据库管理 实验报告

    广州大学学生实验报告实验二:数据库管理 此篇分享仅供参考学习,图文禁复制,勿作他用!谢谢配合! 数据库原理实验之实验二:数据库管理 软件:Oracle SQL Developer 今天实验才刚开始,花 ...

  8. 上海交通大学python实验二_20193207 实验二《Python程序设计》实验报告

    20193207 2019-2020-2 <Python程序设计>实验二报告 课程:<Python程序设计> 班级: 1932 姓名: 倪思涵 学号: 20193207 实验教 ...

  9. 实验二:势函数算法的迭代训练

    一.实验目的 通过本实验的学习,使学生了解或掌握模式识别中利用势函数思想设计非线性判别函数的方法,能够实现模式的分类.学会运用已学习的先导课程如数据结构和算法设计知识,选用合适的数据结构完成算法的设计 ...

  10. 上海交通大学python实验二_20183215 实验二《Python程序设计》实验报告

    20183215 2019-2020-2 <Python程序设计>实验二报告 课程:<Python程序设计> 班级: 1832 姓名: 董振龙 学号: 20183215 实验教 ...

最新文章

  1. (转)Blend操作入门: 别站在门外偷看,快进来吧!
  2. 你的 IDEA 酷不酷?
  3. 数据挖掘在企业中应用的四种途径
  4. SAP Spartacus PageMetaService 的单元测试
  5. 一般将来时语法课教案_速看,如何在考场写出一篇脱颖而出的教案
  6. 为什么面试总喜欢考算法题?
  7. 笔记本电脑无法进入睡眠状态_【小A问答】如何延长笔记本电脑电池的续航时间?...
  8. 中国海洋大学第四届朗讯杯高级组 A 2718 Rocky(模拟)
  9. 命令行模式下获取参数的方法
  10. grails 私有库相关设置
  11. python入口文件详解_Python基础系列讲解——那些py文件中容易忽略的细节
  12. SQL解析处理和扩展开发工具 Java
  13. Android热修复Sophix的使用
  14. 三星手机怎么看html5,三星手机查看硬件信息方法
  15. 2011年IT行业薪资调查报告
  16. 华为HCIP数通_H12-222_41-80
  17. A40i nfs挂载问题
  18. 安装Adobe软件时显示:您的浏览器或者操作系统不再受支持,您可能需要安装操作系统的最新更新。
  19. Java设计模式之模板方法模式(UML类图分析+代码详解)
  20. 期末复习操作系统---设备管理

热门文章

  1. 福师《计算机应用基础》期末考试a卷数据是,奥鹏福师2020年《计算机应用基础》期末试卷A卷2页.doc...
  2. DHCP Snooping实验
  3. 为什么fgets()会读取文件最后一行两次?
  4. Android 融云IM集成以及使用详解(二)
  5. AutoCAD的显示界面调佣
  6. 私有IP地址的意义及其范围
  7. 百度地震了,注定了早晚的事
  8. 埃及分数怎么计算java_埃及分数之斐波那契法
  9. 数值计算基础(二)非线性方程解法篇
  10. 使用虚拟磁盘文件创建虚拟机