FOIL介绍

Foil(First Order Inductive Learner), [Quinlan,1990]paper: Learning Logical Definitions from Relations.

Foil是著名的一阶规则学习算法,它遵循序贯覆盖框架采用自顶向下的规则归纳策略。

———序贯覆盖:规则学习的目标是产生一个能覆盖尽可能多的样例的规则集。最直接的做法是序贯覆盖(sequential covering),即逐条归纳:在训练集上每学到一条规则,就将该规则覆盖的训练样例去除,然后以剩下的训练样例组成训练集重复上述过程。由于每次只处理一部分数据,因此也称为分治(separate-and-conquer)策略。

———自顶向下(top-down):即从比较一般的规则开始,逐渐增加新文字以缩小规则覆盖范围,直到满足预定条件为止,也称为生成-测试(generate-then-test)法,是规则逐渐特化(specialization)的过程,是从一般到特殊的过程;
(一般的规则是:例如不含任何属性的空规则,它覆盖所有的样例,就是一条比较一般的规则)

  

Foil在规则生成时需考虑不同的变量组合。例如:

西瓜数据集5.0(详见 西瓜数据集)对"更好(X, Y)"这个概念,最初的空规则是(自顶向下,从一般规则开始,所以这里从空规则开始):

               更好(X,Y)<— .

接下来数据中其他谓词以及各种变量搭配作为候选文字。新加入的文字应包含至少一个已出现的变量,否则没有任何意义。在这个例子中考虑下列候选文字:

Foil使用“FOIL增益”(Foil gain)来选择文字: 

例如给初始的空规则体加入“色泽更深(X, Y)”或“脐部更凹(X, Y)”,新规则就能覆盖16个正例和2个反例,所对应的FOIL增益位候选最大值。则得到:

           更好(X,Y)<— 色泽更深(X, Y).

该规则扔覆盖2个反例:“更好(15, 1)”与“更好(15, 6)”。于是,FOIL继续增加规则体长度,最终生成合适的单条规则加入规则集。然后进行剪枝优化。

原文地址:https://www.cnblogs.com/hozhangel/p/7880674.html