Sehlani
Sehlani
发布于 2025-10-08 / 1 阅读
0
0

机器学习入门:6. 分类:基于规则的分类

1. Rule-Based Classifier 的核心思想

A. 基于规则的分类是什么?

核心就是如果满足什么条件,就怎么怎么样。

IF <条件> THEN <类别>

这种规则由两部分组成:

  • 前件 (antecedent):条件部分(IF …)

  • 后件 (consequent):预测的类别(THEN …)

B. 与决策树的渊源

但是其实这个rule based特别像我们之前说的决策树不是吗?

其实它就是另外一种决策树,只不过决策树一般来说是靠属性来分类的,而基于规则则是更为灵活的将属性组合起来。

也就是说属性现在可以组合成为新的属性罢了。而且作为组合的元素可以出现不止一次。

C. 对于规则的评估方式

a. 覆盖性

一条规则 r covers 一个样本 x,当且仅当这个样本的所有属性都满足规则 r 里的条件。

也就是说,如果一个规则完美的覆盖了这个样本,而且没有其他规则去解释它,那么就符合一个覆盖。

但是并不是都这么完美,所以我们可以计算一个规则的覆盖率。

b. 正确率,就是正确率

比如说,此时的规则 (status=Single)\to \ No就是 百分之40 的覆盖率和百分之50的正确率。

c. 互斥(Mutually Exclusive)

任意两个规则不应该同时覆盖(cover)同一个样本。

也就是说:

  • 一个样本 x 最多只能命中一条规则;

  • 不会出现同时满足 R_1 R_2 的情况。

d. 完备(Exhaustive)

所有样本都应当至少被一条规则覆盖。不能有样本落在“没有任何规则命中的空白区”。

如果怎么分都有漏网之鱼,那么就用默认规则。

D. 规则冲突

假如我们的一个测试对象同时满足两条甚至更多的分类标准,比如经典的鸭嘴兽问题,它到底算什么动物?

a. 无序规则集(Unordered Rule Set)

所有规则都是平等的;匹配多条,就“投票决定”。

具体做法:

  • 把所有匹配的规则都找出来;

  • 看它们各自预测的类别;

  • 最常见的类别获胜(多数投票)。

优点:

  • 简单;

  • 对单条规则的错误不敏感。

缺点:

  • 如果有冲突、规则数多,结果可能不稳定;

  • 每次预测都要检查全部规则,效率略低。

b. 有序规则集(Ordered Rule Set)

给每条规则一个优先级(顺序),一旦匹配成功,立刻停止检查。

优点:

  • 规则执行效率高;

  • 容易控制优先级(先一般性、后特例)。

缺点:

  • 规则顺序非常重要;

  • 如果顺序错了,预测会全乱。

c. 默认规则 (Default Rule)

用来处理没被任何规则覆盖的样本。

2. 规则生成(Rule Generation)

方法

名称

思想

代表算法

Direct Method

直接生成规则

一条条地从训练数据里“挖”出规则(覆盖正例、排除负例)

Sequential Covering, RIPPER

Indirect Method

间接生成规则

先训练决策树,再把每条从根到叶的路径转成规则

C4.5rules, CN2

在 Sequential Covering / learn-one-rule 过程中:

  • 我们通常选择一个目标类(正样本类),

  • 然后去找一条规则,尽量覆盖正样本、排除负样本。

A. 核心思想(Direct Method)

逐条生成、逐步覆盖(Sequential Covering)

简单讲:

  • 一次不生成全部规则;

  • 而是每次找到一条“好规则”(能抓到最多正样本、最少负样本),然后把这条规则覆盖掉的数据从训练集中移除;

  • 再在剩下的数据上重复;

  • 直到所有正类样本都被至少一条规则覆盖。

B. learn-one-rule(D)

每次在当前规则的条件集合上:

1. 从一个“空条件”开始;

2. 每次添加一个条件(attribute test),

让规则的 accuracy 尽可能提升;

3. 当再加条件不能显著提升效果时,停止;

4. 最后得到的那条规则,就加入规则集。

General-to-Specific

Specific-to-General

起点

空规则(全覆盖)

具体实例(只覆盖少量样本)

操作

逐步 添加条件

逐步 去掉条件

效果

覆盖范围越来越小

覆盖范围越来越大

常见算法

Sequential Covering, RIPPER

AQ Algorithm(如 Michalski 的 AQ)

优点

简单、直观、贪心可行

能更直接挖出典型模式

缺点

容易陷入局部最优

需找到代表性样本

一种是逐渐复杂,另外一种是逐渐简化。

C. 信息增益(FOIL 的信息增益)

用来在 learn-one-rule() 的 Grow 阶段评估“往规则里再加一个条件 A 值不值”。

现在有一条“当前规则” R_0(它的前件可能是空的 {}),

  • 尝试再加一个条件 A 得到新规则 R_1 = R_0 \land A

  • p_0,n_0R_0 覆盖到的正/负样本数

  • p_1,n_1R_1 覆盖到的正/负样本数

  • FOIL 增益定义为

\mathrm{Gain}(R_0,R_1)= p_1\Big[\log_2\!\frac{p_1}{p_1+n_1} -\log_2\!\frac{p_0}{p_0+n_0}\Big].

符号

含义

通俗理解

R_0

原来的规则(before adding the new condition)

比如一开始是空条件 {},或者已有部分条件。

R_1

在 R_0 的基础上,加上一个新条件后的规则

R1 = R0 ∧ (Refund = No)

p_0

当前规则 R_0 覆盖的正样本(positive examples)数量

“R₀ 能抓到多少目标类”。

n_0

当前规则 R_0 覆盖的负样本(negative examples)数量

“R₀ 把多少非目标类也误抓进来了”。

p_1

加了新条件后(R₁)仍然被覆盖的正样本数量

“加完条件后,还剩多少目标类被命中”。

n_1

加了新条件后被覆盖的负样本数量

“加完条件后,还剩多少误抓的负类”。

\frac{p}{p+n}

当前规则的准确率 (precision)

规则命中的样本中,有多少是真的正类。

\log_2\frac{p_1}{p_1+n_1} - \log_2\frac{p_0}{p_0+n_0}

准确率的提升(以对数计)

新规则比旧规则更“纯净”多少。

p_1 × [⋯]

用“正样本数”去加权这个提升

提升越大、命中正例越多 → 增益越高。

括号里是“精度(precision)提升的对数”,前面的 p_1 是“覆盖到多少正例”的权重。既想更准,也要抓住足够多的正例。

\frac{p}{p+n} 就是“当前规则的精度”(覆盖样本里有多大比例是真的正类)。

• 新旧精度的 \log 差表示“信息提升/压缩节省”,乘上抓到的正例数 p_1 表示“这次提升影响到了多少正例”。

• 所以 高增益=精度升得多且抓到的正例也多。只涨一点精度却只覆盖 1 个正例,得分就不会高。


评论