许多机器学习问题设计到从特殊训练样例中得到一般概念。给定一样例集合以及每个样例是否属于某一概念的标注,怎样自动推断出该概念的一般定义。这一问题被称为概念学习(concept learning)
归纳学习假设:任一假设如果在足够大的训练样例中很好地逼近目标函数,它也能在未见实例中很好地逼近目标函数。
FIND-S:寻找极大特殊假设
举例:
#include <stdio.h>
//训练集
int examples[4][7] = {
{1,1,1,1,1,1,1},
{1,1,0,1,1,1,1},
{0,0,0,1,1,0,0},
{1,1,0,1,0,0,1}
};
int h[7] = {-1,-1,-1,-1,-1,-1,-1};
void train(int*, int*);
int main(){
for(int i=0;i<4;i++)
//当为正例时进行训练
if(examples[i][6] == 1) train(h, examples[i]);
return 0;
}
void train(int* h, int* s){
for(int i=0;i<6;i++){
if(s[i] != h[i]){
//当为极大特殊时,将其具体化
if(h[i] == -1) h[i] = s[i];
//当出现多样值时,将其一般化
else h[i] = -2;
}
//检测训练结果
printf("%d\t",h[i]);
}
printf("\n");
}
该实例中,值-1表示极大特殊,-2表示极大一般。
原文地址:http://blog.csdn.net/gscienty/article/details/43788317