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