概念学习可近似为分类问题,例如一个小孩子看过几种鸟的图片,如果再给他一张另外一种没见过的鸟的图片,他还是可以认出这是只鸟,换句话说他已经建立了“鸟”这一概念,进而根据一些特征进行判断是或不是属于这个概念。
一、概念和概念学习的定义
概念是在一个更大的集合里面定义一个对象或者事物的子集,或者说是一个从更大的集合里面学到的布尔函数。
概念学习,指自动地给出概念的定义。也就是说概念学习是从训练数据中学到一个符合训练数据的二元函数。从机器学习的角度,也可以说概念学习是一个在假设空间中的假设搜索问题。
例子:
概念:“days on which my friend enjoys water sports”
学习任务:从其他属性里面预测enjoysport的值
假设是属性的合取,是一个约束向量,例如<Sunny,Warm,Normal,Strong,Warm,Same>
属性的取值有三种,1)任意取值都可以<?> 2)其中某个值,注意是某一个值而不是多值的组合,例如<Warm> 3)任意取值都不可以
实例的项集:指属性名。例如:<sky temp humid wind water fore-cast >
要学习的概念叫做目标概念:即enjoysport的取值c:X->{0,1}
训练数据:实例x的集合和目标概念的值即<x,c(x)>
概念学习过程:在假设空间中寻找一个合适的假设,h:X->{0,1},对任意的x,使得h(x)=c(x)
总结一下:
给出:实例X(属性集合),目标函数c{0,1},假设空间H,训练数据<x,c(x)>
求:合适的
注:
1.属性没有析取,只有合取,例如如果第一个实例Sky取Sunny,那么假设中该项取Sunny,此时再有一个实例Sky取Cloudy,此时假设该项将改为<?>,而不是<Sunny or Cloudy>
2.对于上式案例,不同的实例有3*2*2*2*2*2=96
假设空间:句法上的不同假设(每个属性包含<?>和<>)有 5*4*4*4*4*4=5120
语义上的不同假设(所有含都看作一个假设即不可行)有1+4*3*3*3*3*3=973
二、搜索方法
既然概念学习现在变为假设搜索问题了,那么如何搜索到最有效的假设,如果假设空间小可以考虑遍历,如果假设空间大,有find-S算法,List-Then-Eliminate算法
1.find-S算法
初始假设先设为最具体的假设:<,,,,,>
训练
For each positive training instance x
For each attribute constraint ai ∈ h
If the constraint ai ∈ h is satisfied by x
then do nothing
else replace ai ∈ h by the next more general constraint
that is satisfied by x
Output hypothesis
例子
评价:find-S只考虑正样本(目标概念为1)不考虑负样本
find-S是从最具体的假设一步步遇到正实例进行一般化的,因此其找到的是广泛的具体假设
find-S 最终找到的只有一个假设,但是有可能多个假设都满足训练集
find-S是易受噪声干扰的
2.List-Then-Eliminate
正负训练样本都考虑进来,找到的是一个假设的集合,要表示这个假设集合只需要找到其假设边界即可。
例如上图中最上层的即为假设集合的最具体边界,记为S,最下层即为集合的最一般边界,记为GG
初始化:G <- {<?,?,?,?,?,?>}
S <- {<,,,,,>}
遍历训练集 d = < x, c (x) >
If d 是个正例
对G:移出G中与d不一致(即假设得到的概念与样本真实概念取值不符)的所有假设
对S:移出S中与d不一致的所有假设;如果一个假设h与d一致且G中有比h更一般的假设,那么将该假设加入S
If d 是个负例
对S:移出S中与d不一致(即假设得到的概念与样本真实概念取值不符)的所有假设
对G:移出G中与d不一致的所有假设;如果一个假设h与d一致且S中有比h更具体的假设,那么将该假设加入G
上面的算法不太好理解,大体上可以想象一下先画出假设集合的两界G和S,遇到正例调整S使得S更一般化,遇到负例调整G使得G能具体化,调整之后两边界就从两头慢慢接近。
学习到一个假设集合如何使用呢:
如果满足S中所有的假设,那么可以判断为正例,如果不满足G中的任何一个假设,可以判断为负例。那么如果学到的假设集合中有些假设满足有些假设不满足怎么办呢?可以投票决定,满足的假设多于不满足的假设个数,设为正例。
三、归纳偏置
上面的描述还存在一个问题,由于假设空间只能合取,那么可能会出现假设不存在的情况,例如下面例子:
x1 = <Sunny Warm Normal Strong Cool Change> +
x2 = <Cloudy Warm Normal Strong Cool Change>
此时的假设S : { ?, Warm, Normal, Strong, Cool, Change> }
x3 = <Rainy Warm Normal Strong Cool Change > -
这时不存在同时满足x1x2x3的假设,要想找到满足三样本的假设引入无偏学习,无偏假设中一定会存在满足的假设(一般无偏假设为样本的析取)。即上例中假设如下:
S : { Sunny, Warm, Normal, Strong, Cool, Change> }
∨{Cloudy, Warm, Normal, Strong, Cool, Change> }
既然一定会包含样本,为什么不一直使用无偏假设?因为无偏假设不具有泛化性,它只是样本的简单析取,无法形成某种模式进行判断。
最后归纳偏置是什么?网友Alex267 讲的很好,这里直接引用一下:“我觉得无偏学习有点类似于枚举法,如果我们没见过那个实例就无法对他进行分类,而有偏学习则相当于得到一个函数关系式,我们可以根据函数式去预测一个实例的类别,而归纳偏置就是函数关系式遵守的规则,比如斜率,截距之类。”