实验二:势函数算法的迭代训练
一.实验目的
通过本实验的学习,使学生了解或掌握模式识别中利用势函数思想设计非线性判别函数的方法,能够实现模式的分类。学会运用已学习的先导课程如数据结构和算法设计知识,选用合适的数据结构完成算法的设计和程序的实现。并通过训练数据来建立非线性判别函数,通过代待分类样本进行分类预测,通过检查预测结果和数据的几何分布特性检验分类器的正确性。通过选用此种分类方法进行分类器设计实验,强化学生对非线性分类器的了解和应用,从而牢固掌握模式识别课程内容知识。
二.实验内容
假定对病人3项主要指标检查得到正常(类)和非正常(
类)的数据如下:
: (1,2, 5), (1,1, 2),(3,3,6);
:(5,6,10),(7,6,11),(8,7,12).
三.实验步骤
1、选定势函数(3个双变量对称基函数中选1;或做成多选的,实现人工自动选择);
2、确定合适数据结构,以便分别完成势函数和判别函数的正确表示;
3、对训练样本加以训练学习,建立判别函数,使其满足分类要求
4、记录并输出训练轮次;
5、对所有样本的类别用你的分类器加以判断(分类决策),比较与实际类别的差异;
6、对待分类样本进行判断,得到其类别(预测),如可能,以几何分布情况加以说明;
7、输出你的判别函数的表达形式(注意:表达形式要求便于阅读理解)。
四、实验代码
#include <iostream.h>
#include <math.h>
#define n 6
//n表示样本总数。这里n=6,前3个样本属于第一类,后三个样本属于第二类
#define m 30
#define d 3
//d表示维长
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}, //1表示属于第1类
{1,1,2,1}, //1表示属于第1类
{3,3,6,1}, //1表示属于第1类
{5,6,10,2}, //2表示属于第2类
{7,6,11,2}, //2表示属于第2类
{8,7,12,2}}; //2表示属于第2类
main()
{while(tag==1) { tag=0; for (k=0;k<n;k++) { if (r==-1){ r++; //r为项数 ftbl[r].symbol=1; //该项的符号。 1--正 ftbl[r].index=0; //该项对应的样本下标号 continue; } else{ g=0; for(i=0;i<=r;i++) { temp=0; for(j=0;j<d;j++) //d表示维长 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); //共r项,每项都是一指数形式 } 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; } // end of else } //end of else } // end of for
}// end of while 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 //s[ftbl[i].index].x[0]==0 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; } // end of for
} // end of main()
实验二:势函数算法的迭代训练相关推荐
- 实验二 势函数算法的迭代训练
实验二 势函数算法的迭代训练 一.实验目的 通过本实验的学习,使学生了解或掌握模式识别中利用势函数思想设计非线性判别函数的方法,能够实现模式的分类.学会运用已学习的先导课程如数据结构和算法设计知识,选 ...
- 操作系统:实验二 银行家算法
一.实验目的 用高级语言编写和调试一个银行家算法程序,并可以利用银行家算法模拟分配资源以及进行安全性检查.加深对银行家算法的理解. 二.实验指导 银行家算法中的数据结构 (1) 可利用资源向量Avai ...
- 实验二 动态规划算法 最大字段和问题
基本题二:最大字段和问题 一.实验目的与要求 1.熟悉最长最大字段和问题的算法: 2.进一步掌握动态规划算法: 二.实验题 若给定n个整数组成的序列a1,a2,a3,...,an,求该序列形如ai+a ...
- 算法分析与设计-实验二 动态规划算法设计
文章目录 1. 数字三角问题 2.最长公共子序列问题 3.日常购物 4.台阶问题 一.实验目的: 掌握动态规划算法的基本思想及适用条件,掌握动态规划算法的设计步骤和具体实现. 二.实验所用仪器及环境 ...
- 实验二 动态规划算法 最长公共子序列问题
基本题一:最长公共子序列问题 一.实验目的与要求 1.熟悉最长公共子序列问题的算法: 2.初步掌握动态规划算法: 二.实验题 若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,z ...
- 算法设计与分析 实验二 贪心算法
实验2.<贪心算法实验> 一.实验目的 了解贪心算法思想 掌握贪心法典型问题,如背包问题.作业调度问题等. 二.实验内容 编写一个简单的程序,实现单源最短路径问题. 编写一段程序,实现找零 ...
- 实验二kNN算法之1NN分类
k-NN处理分类问题,即分类:多数投票原则,先将数据集处理成OneHot矩阵,计算测试文本与每一个训练文本的距离,如果k = 1,则找到最小的距离,则测试文本的分类对应于该训练文本的分类.在用C++实 ...
- 操作系统实验二(银行家算法)
实验二 银行家算法 一.实验目的 用高级语言编写和调试一个银行家算法程序,并可以利用银行家算法模拟分配资源以及进行安全性检查.加深对银行家算法的理解. 二.实验指导 银行家算法中的数据结构 (1) 可 ...
- 广州大学 操作系统实验之银行家算法
实验二 银行家算法 一.实验目的 1.了解什么是操作系统安全状态和不安全状态: 2.了解如何避免系统死锁: 3.理解银行家算法是一种最有代表性的避免死锁的算法,掌握其实现原理及实现过程 二.实验环境 ...
最新文章
- 如何团队协作,代码托管?Git使用教程:最详细、最浅显、一文读懂Git常用操作!...
- toString,toLocaleString,valueOf的不同
- 理解Joomla!模板
- 使用ffmpeg合并视频文件的三种方法
- pat 乙级 1047 编程团体赛(C++)
- weakhashmap_Java WeakHashMap keySet()方法与示例
- vue 中使用echart5.2发生TypeError: Cannot read properties of undefined (reading ‘init‘)
- SQL Server中查询ORACLE的数据
- android开发 判断连点退出
- docker-compose listing workers for Build: failed to list workers
- win7笔记本电脑设置WiFi热点
- 麻理工MIT的脑计划eyewire (顺便学习一下医学影像知识)
- 使用PS制作毛玻璃效果
- 简洁Python命名规范
- python人工智能工程师要求_想跻身高薪的AI人工智能工程师,你需要符合哪些条件?...
- Windows11更新后打不开Edge浏览器解决办法
- MySQL引擎:InnoDB VS MyISAM
- 简报 | 呼吁建立全球性加密货币征税体系和法规 或在2020年最终敲定
- C++简单贪吃蛇游戏——入门游戏编程(详细)
- 886n虚拟服务器,TP-Link TL-WR886N V4路由器端口映射怎么设置
热门文章
- 数据分析系列之Python数据分析简介
- MySQL在线环境,[MySQL FAQ]系列 — 线上环境到底要不要开启query cache
- python自定义一个函数求序列中的偶数_使用range函数创建一个从2到10的偶数列表 alist...
- 我个人制作的网页网站作品,自学网站制作,自学网页制作网页制作视频教程
- 虚拟机克隆后mac地址冲突,上不了网问题解决记录
- 微信接入智能机器人回复消息
- MySQL分库分表简单介绍
- 互联网公司2020年新年礼盒歧视指南
- generator详解
- wgs84坐标格式转换度分秒_使用ArcGIS实现WGS84经纬度坐标到北京54高斯投影坐标的转换...