数据挖掘 - 基于规则的分类


IF-THEN 规则

基于规则的分类器利用一组 IF-THEN 规则进行分类。我们可以用以下形式表达一条规则:

IF 条件 THEN 结论

让我们考虑规则 R1,

R1: IF age = youth AND student = yes 
   THEN buy_computer = yes

要记住的要点 -

  • 规则的 IF 部分称为规则前提前提条件

  • 规则的 THEN 部分称为规则结果

  • 条件的先行部分由一个或多个属性测试组成,这些测试在逻辑上进行“与”运算。

  • 接下来的部分由类别预测组成。

注意- 我们还可以将规则 R1 编写如下 -

R1: (age = youth) ^ (student = yes))(buys computer = yes)

如果条件对于给定元组成立,则满足先行条件。

规则提取

在这里,我们将学习如何通过从决策树中提取 IF-THEN 规则来构建基于规则的分类器。

要记住的要点 -

从决策树中提取规则 -

  • 为从根节点到叶节点的每条路径创建一条规则。

  • 为了形成规则先行词,每个分割标准都进行逻辑与运算。

  • 叶节点保存类预测,形成规则结果。

使用顺序覆盖算法的规则归纳

顺序覆盖算法可用于从训练数据中提取 IF-THEN 规则。我们不需要首先生成决策树。在此算法中,给定类的每个规则涵盖该类的许多元组。

一些顺序覆盖算法包括 AQ、CN2 和 RIPPER。根据总体策略,一次学习一个规则。每次学习规则时,都会删除该规则覆盖的元组,并对其余元组继续执行该过程。这是因为决策树中每个叶子的路径都对应一个规则。

注意- 决策树归纳可以被视为同时学习一组规则。

以下是顺序学习算法,一次学习一个类的规则。当从类 Ci 学习规则时,我们希望该规则仅覆盖类 C 的所有元组,而不覆盖任何其他类的元组。

Algorithm: Sequential Covering

Input: 
D, a data set class-labeled tuples,
Att_vals, the set of all attributes and their possible values.

Output:  A Set of IF-THEN rules.
Method:
Rule_set={ }; // initial set of rules learned is empty

for each class c do
   
   repeat
      Rule = Learn_One_Rule(D, Att_valls, c);
      remove tuples covered by Rule form D;
   until termination condition;
   
   Rule_set=Rule_set+Rule; // add a new rule to rule-set
end for
return Rule_Set;

规则修剪

该规则被修剪的原因如下:

  • 质量评估是在原始训练数据集上进行的。该规则可能在训练数据上表现良好,但在后续数据上表现不佳。这就是为什么需要规则修剪的原因。

  • 通过删除合词来修剪该规则。如果 R 的修剪版本的质量高于独立元组集评估的质量,则规则 R 被修剪。

FOIL是一种简单有效的规则剪枝方法。对于给定的规则 R,

FOIL_Prune = pos - neg / pos + neg

其中 pos 和 neg 分别是 R 覆盖的正元组的数量。

注意- 该值将随着剪枝集上 R 的准确性而增加。因此,如果 R 的修剪版本的 FOIL_Prune 值较高,则我们修剪 R。