多语言展示
当前在线:634今日阅读:61今日分享:18

机器学习算法实现:[2]FIND-S算法

机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。FIND-S算法1. 将h初始化为H中最特殊假设2.对每个正例x对h的每个属性约束ai如果x满足ai那么不做任何处理否则将h中ai替换为x满足的下一个更一般的约束3. 输出假设h
工具/原料

Devc++

方法/步骤
2

读文件和进行样例一般化如下图:

3

打印输出函数如下:void printdata(Hypothesis &g_Hypo,int i){int ii;     if(i==-3)     printf('极大特殊假设h:<');     else   printf('第%d个训练样例一般化后 输出假设h:<',i+1);for (ii=0; ii\n');else if (g_hm.value[ii]==NUL)   printf('O>\n');else   printf('%s>\n', g_Hypo.an[ii].att[g_hm.value[ii]-1]);         //.....................循环输出每次一般化后的假设.............................}

4

运行输出的每一次样例一般化结果和,最终的一般化:第1个训练样例一般化后输出假设h:第2个训练样例一般化后输出假设h:第3个训练样例一般化后输出假设h:第4个训练样例一般化后输出假设h:极大特殊假设h:请按任意键继续. . .

5

hypothesis.txt与samples.txt文件中的内容如下:hypothesis.txt6sky 3 sunny rainy cloudyairtemp 2  warm coldhumidity 2 normal highwind 2 strong weakwater 2 warm coolforecast 2 same  change// 从文件中读取假设集合/*/ 文件格式[集合个数n][属性名称1] [属性值个数] [属性值1] [属性值2] [属性值3] ……[属性名称2] [属性值个数] [属性值1] [属性值2] [属性值3] …………[属性名称n] [属性值个数] [属性值1] [属性值2] [属性值3] ……/*/samples.txt41 1 1 1 1 1 11 1 2 1 1 1 12 2 2 1 1 2 01 1 2 1 2 2 1// 从文件中读取样本/*/ 文件格式[样本个数m][样本1属性1的值的序号] [样本1属性2的值的序号] …… [样本1属性n的值的序号] [1(正例)或者0(反例)][样本2属性1的值的序号] [样本2属性2的值的序号] …… [样本2属性n的值的序号] [1(正例)或者0(反例)]……[样本m属性1的值的序号] [样本m属性2的值的序号] …… [样本m属性n的值的序号] [1(正例)或者0(反例)]/*/

6

附完整代码如下:#include #include using namespace std;#define A_CHAR_MAX 16#define A_VALUE_MAX 16#define A_NUM_MAX   32#define SAMPLES_MAX 256#define ALL -1#define NUL -2#define YES     1#define NO      0#define NUKOWN -1// 属性struct Attribute{ /*1wangxiaobo@163.com*/  char name[A_CHAR_MAX];             // 属性名称int num;                           // 属性值个数char att[A_VALUE_MAX][A_CHAR_MAX]; // 属性值};// 假设struct Hypothesis{ /*1wangxiaobo@163.com*/  int num;                          // 属性个数 Attribute an[A_NUM_MAX];          // 属性集合};// 假设值struct HypoValue{int value[A_NUM_MAX];};// 样本struct Sample{ HypoValue ev;                    // 假设int result;                      // 正例/反例}; Hypothesis g_Hypo;                   // 假设集合Sample g_sa[SAMPLES_MAX];            // 样本空间int g_sn;                            // 样本数HypoValue g_hm;                      // 极大假设// 从文件中读取假设集合bool ReadHypothesis( const char* filename){ /*1wangxiaobo@163.com*/  FILE* file;if (!(file=fopen(filename , 'r')))   return false;int i,j,k;fscanf(file, '%d\n', &g_Hypo.num);for (i=0; i\n');else if (g_hm.value[ii]==NUL)   printf('O>\n');else   printf('%s>\n', g_Hypo.an[ii].att[g_hm.value[ii]-1]);         //.....................循环输出每次一般化后的假设.............................}             /*1wangxiaobo@163.com*/                     int main(int arc, char** argv){    system('title 晓博Find-S试验程序');printf('Designed by wangxiaobo email:1wangxiaobo@163.com');// 读取假设和样本if (!ReadHypothesis('hypothesis.txt')){   printf('read Hypothesis file error');   return 0;}if (!ReadSamples('samples.txt')){   printf('read samples file error');   return 0;}int i,j;for (i=0; i

推荐信息