在Mitchell的《机器学习》的书中,介绍了学习规则集合的方法。以下是我在阅读完这章内容之后的想法。
首先,明白什么是学习规则集合:
从两个层次上来讲
· 从命题的层次:
如果A,那么B。
序列覆盖算法:
输入:许多样例,以及它们的真值情况。
输出:学习到的命题规则。
首先,学习一个规则rule, 让它覆盖大多数的正例(真值为1),覆盖较少的反例(真值为0);
然后,从样本中移去rule所覆盖的正例,该剩余的样本中重新学习一个规则。这样迭代下去。知道覆盖所有的正例。
最后将这些学习的rule进行析取运算,便为最终学习到的规则。
·从一阶Horn字句的层次(谓词):
存在变量。
A(x, y) ^ B(x, y) ^ ... ^ C(x, y) ---> H
其中A,B,..., C是前件,而H是后件。
而上面的句子就是一阶Horn字句。
在学习一阶Horn字句规则时,主要介绍了两个例子FOIL 和 PROGOL。其中FOIL是采用类似于序列覆盖的方法,而PROGOL采用逆归结的方法。两者有很大的不同。
例如给了样本结合,用于学习GrandDaughter(x, y), 其中每个样本的组成为
<Name1 = *, Mother1 = *, Father1 = *, Male1 = *, Female1* =
Name2 = *, Mother2 = *, Father2 = *, Male2 = *, Female2 * =
GrandDaugther(1, 2) = true|false
>
FOIL学习是从一般到特殊进行学习。为了学习GrandDaughter(x, y),就从GrandDaugther(x, y)最一般的情况进行入手。 采用爬山式搜索,进行学习;
例如从GrandDaugther(x, y)出发,可能下一个就学习到了Father(z, x) , Father(y, x)等。
PROGOL学习方法则是从GrandDaugther(1, 2)最具体的情况入手,通过多次逆归结,将其一步步一般化,最后得到结果。(对于逆归结的概念,请参考《机器学习》这本书)
两种相反的思路,解决同样的问题。