转载:https://blog.csdn.net/dicker6315/article/details/81265066
1.1 求版本空间
题目: 表1.1中若只包含编号为1和4的两个样例,试给出相应的版本空间。
与训练集一致的“假设集合”我们称之为版本空间。本题即在假设空间中搜索包含正例且不包含反例的所有假设
首先,用一个六位二进制数将整个假设空间表示出来,每两位描述一个属性。前两位取01表示色泽的取值为“青绿”,10表示色泽取值为“乌黑”,11表示色泽取值为 。后四位分别表示根蒂与敲声的取值,以此类推.注意题中只包含1和4两个样例,因此假设空间中色泽的取值范围为: ,乌黑、青绿;根蒂的取值范围为:,蜷缩、稍蜷;敲声的取值范围为:,浊响、沉闷。
假设空间
若两个假设的二进制表示分别为A和B,则 A | B == A ⇒ B⊂A,A&B ==B ⇒ B⊂A.(任意一个等式都可以判断出假设A是否包含假设B)
==|==是并的意思
设P为假设1(正例),N为假设4(反例),假设H只要满足H | P==H && H | N != H为真,那么假设H就应该被包含在版本空间内。遍历假设空间内的所有假设进行上述判断,就可以获得版本空间内的所有假设。
#include<stdio.h>
int hypo_const[27] = {0x3f,0x3d,0x3e,0x37,0x3b,0x1f,0x2f,0x35,0x36,0x39,0x3a,0x1d,0x1e,0x2d,0x2e,
0x17,0x1b,0x27,0x2b,0x15,0x16,0x19,0x1a,0x25,0x26,0x29,0x2a};//用十六进制的方式表示,每个十进制数字代表一个4位的二进制数
void main()
{
int sample[2] = {0x15,0x2a},sum=0;//0x15是真,0x2a是假
for(int i=0;i<27;i++)
{
if( (hypo_const[i] | sample[1] ) != hypo_const[i] && (hypo_const[i] | sample[0]) == hypo_const[i] )
{
sum++;
printf("%x %d\n",hypo_const[i],i+1);
}
}
printf("\nsum:%d\n\n",sum);
}
求得版本空间为假设2、4、6、8、12、16、20.
版本空间
版本空间有以下3种不同的求法。
删除不能包含所有正例以及包含任意反例的假设
删除不能包含所有正例的假设
删除包含任意反例的假设
本题使用了第一种方法来求版本空间,三种求法的选择应该属于归纳偏好的范畴。