命题规则学习(下)
(Press ? for help, n and p for next and previous slide)
\[H\leftarrow B_1 \wedge B_2 \wedge\ldots \wedge B_n.\]
也叫析取范式(Disjunctive Normal Form, DNF):用“\(\vee\)”把所有可能的正样例都包含进来 \[positive\leftarrow (\mathbf{f}_1 \wedge \mathbf{f}_2) \vee (\mathbf{f}_3 \wedge \mathbf{f}_4)\vee \ldots.\]
它可以等价地表示为一个命题逻辑规则集:
命题逻辑集是由命题逻辑规则构成的集合。
Closed World Assumption (CWA)
相当于:
🧪 场景背景:
训练后的决策树可能长这样👇
[XRay?]
/ \
异常 正常
/ \
[WBC?] No
/ | \
高 正常 低
/ | \
Yes [Fever?] No
/ \
Yes No
所有判断都沿着单一路径完成,每个病例只能对应树上的一个“叶节点”规则:
规则集可能是这样的(每条规则是独立的 if–then 语句):
RULE 1: Yes :- XRay = 异常, WBC = 高, !. RULE 2: Yes :- XRay = 异常, Fever = Yes, !. RULE 3: Yes :- Cough = Yes, Fever = Yes, Age > 65, !. RULE 4: Yes :- ChestPain = Yes, XRay = 异常, !. RULE 5: No :- XRay = 正常, WBC = 正常, AND Fever = No, !. DEFAULT: No :- true.
例如,有一种特殊情况:“X光正常,但患者高龄、有持续发烧+咳嗽 → 虽然X光没发现异常,也不能完全排除肺炎。”
在规则集里:你只需增加一条规则
RULE 6: Yes :- XRay = 正常, Age > 70, Fever = Yes, Cough = Yes
| 特性 | 规则集 | 决策树 |
|---|---|---|
| 表达方式 | 平行规则集合,可重叠 | 树结构,单一路径 |
| 可解释性 | 高,规则短小、独立 | 结构化,但可能冗长 |
| 可维护性 | 易增删改 | 修改困难,需整体重建 |
| 与专家知识结合 | 方便 | 较困难 |
| 表达复杂逻辑的能力 | 强(组合规则) | 弱,需要深树 |
| 适应类别重叠/不平衡 | 好 | 一般 |
虽然命题规则集有这些优势,但它在一些方面也有挑战:
也叫Sequential Covering
1: # E: 训练样本
2: function covering(E)
3: R = [] # 初始化规则集合
4: E = P, N # P/N: 正/负样例集合
5:
6: E_rest = E # 当前还未覆盖的样本
7: P_rest = P # 当前还未覆盖的负样例
8:
9: F = init_features(E) # 初始化特征集合
10: while isempty(P_rest) == false
11: # 检查是否还需要学更多规则
12: if need_more_rule(R, E_rest) == false
13: break
14: end
15:
16: # 学习单条命题规则r, 并加入规则集R
17: r = find_best_rule(E_rest, F)
18: push!(R, r)
19:
20: # 调整样本集合(例如删掉被覆盖的样例)
21: E_rest = adjust_examples(R, E_rest)
22: end
23:
24: # 后处理
25: R = post_process_ruleset(R)
26:
27: return R
28: end
精度(accuracy,\((TP+TN)/TTL\))vs准确率(precision, \(TP/(TP+FP)\))
\[\frac{TP+TN}{TP+TN+FP+FN}=1-\frac{FP+FN}{Total}\] Sequential covering 使用 Accuracy 作为打分标准时,它倾向于
精度(accuracy,\((TP+TN)/TTL\))vs准确率(precision, \(TP/(TP+FP)\))
\[\frac{TP}{TP+FP}\] 等高线不是平行线,而是从原点发散的射线(iso-precision lines):
在 sequential covering 使用 precision 作为打分标准时,算法倾向于选择:
1: function RISE(E)
2: # P/N为正/负样例
3: P, N = E
4:
5: # 生成bottom rules, 即只覆盖一个正样例的规则
6: R = bottom_rules(E)
7:
8: while true
9: for r in R
10: # 在P中找到:
11: # 1. 距离规则r最近(Hamming)的
12: # 2. 未覆盖的正样例
13: e = select_nearest_uncovered_neighbor(P, r)
14:
15: # 泛化规则,令r_1能覆盖r和e
16: r_1 = generalize(r, e)
17:
18: # 如果新规则不导致准确率下降,则保留
19: R_1 = R - r + r_1
20: if ! accuracy(R_1) < accuracy(R)
21: R = R_1
22: end
23: end
24:
25: # 如果满足退出条件,返回R
26: if meeting_stop_criterion(R)
27: break
28: end
29: end
30:
31: return R
32: end
与所有统计学习模型一样,在有噪声的数据中学习可能造成命题规则集过拟合(overfitting)
与决策树一样,可分为:
利用启发式函数约束,在规则(集)生长时及时停止
对于已学得的规则集进行以下行为,并评估打分函数
REP [Brunk and Pazzani, 1991]和IREP [Fürnkranz and Widmer, 1994]
“A small network illustrating the limitations of prepositional descriptions.” [Quinlan, 1990]
假设网络:
需要学习的目标概念:“两个节点相接”
只需要用一个谓词:\(\text{linked-to}(X,Y)\)
“两个节点相接”:
\[
\text{linked-to-each-other}(X,Y)\leftarrow \text{linked-to}(X,Y)\wedge \text{linked-to}(Y, X)
\]
“两个节点连通”:
“两个节点连通”:
初始规则1:\(\text{can-reach}(X,Y)\leftarrow\)
加入文字:\(\text{can-reach}(X,Y)\leftarrow \text{linked-to}(X,Y)\)
初始规则2:\(\text{can-reach}(X,Y)\leftarrow\)
加入文字:\(\text{can-reach}(X,Y)\leftarrow\text{linked-to}(X,Z)\)
包含变量\(\langle X, Y, Z\rangle\),扩展样例:
加入文字:\(\text{can-reach}(X,Y)\leftarrow\text{linked-to}(X,Z)\wedge\text{can-reach}(Z,Y)\)
\[
\text{正样本覆盖率}\cdot(\text{信息量}-\text{精化前信息量})=\hat{P}\cdot\left(\log_2{\frac{\hat{P}}{\hat{P}+\hat{N}}}-\log_2 c\right)
\]