命题规则学习(上)
(Press ?
for help, n
and p
for next and previous slide)
命题逻辑语言是用来描述原子命题与它们之间关系的一种形式语言。
通常,用\(\Sigma\)来定义或生成\(S\)的方法被成为句法(Syntax/grammar)。
命题逻辑演算公理(Łukasiewicz):
三段论:\(p\rightarrow q, q\rightarrow r\vdash p\rightarrow r\)
证明:
编号 | 色泽 | 根蒂 | 敲声 | 纹理 | 脐部 | 触感 | 好瓜 |
---|---|---|---|---|---|---|---|
1 | 青绿 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
2 | 乌黑 | 蜷缩 | 沉闷 | 清晰 | 凹陷 | 硬滑 | 是 |
3 | 乌黑 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
4 | 青绿 | 蜷缩 | 沉闷 | 清晰 | 凹陷 | 硬滑 | 是 |
5 | 浅白 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
6 | 青绿 | 稍蜷 | 浊响 | 清晰 | 稍凹 | 软粘 | 是 |
7 | 乌黑 | 稍蜷 | 浊响 | 稍糊 | 稍凹 | 软粘 | 是 |
8 | 乌黑 | 稍蜷 | 浊响 | 清晰 | 稍凹 | 硬滑 | 是 |
9 | 乌黑 | 稍蜷 | 沉闷 | 稍糊 | 稍凹 | 硬滑 | 否 |
10 | 青绿 | 硬挺 | 清脆 | 清晰 | 平坦 | 软粘 | 否 |
11 | 浅白 | 硬挺 | 清脆 | 模糊 | 平坦 | 硬滑 | 否 |
12 | 浅白 | 蜷缩 | 浊响 | 模糊 | 平坦 | 软粘 | 否 |
13 | 青绿 | 稍蜷 | 浊响 | 稍糊 | 凹陷 | 硬滑 | 否 |
14 | 浅白 | 稍蜷 | 沉闷 | 稍糊 | 凹陷 | 硬滑 | 否 |
15 | 乌黑 | 稍蜷 | 浊响 | 清晰 | 稍凹 | 软粘 | 否 |
16 | 浅白 | 蜷缩 | 浊响 | 模糊 | 平坦 | 硬滑 | 否 |
17 | 青绿 | 蜷缩 | 沉闷 | 稍糊 | 稍凹 | 硬滑 | 否 |
我们想要的规则是这样的:
IF 色泽 = 青绿 AND 根蒂 = 稍蜷 THEN 好瓜 = 是
或者,
IF 色泽 = 浅白 AND 纹理 != 清晰 THEN 好瓜 = 否
编号 | 色泽 | 根蒂 | 敲声 | 纹理 | 脐部 | 触感 | 好瓜 |
---|---|---|---|---|---|---|---|
1 | 青绿 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
2 | 乌黑 | 蜷缩 | 沉闷 | 清晰 | 凹陷 | 硬滑 | 是 |
3 | 乌黑 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
4 | 青绿 | 蜷缩 | 沉闷 | 清晰 | 凹陷 | 硬滑 | 是 |
5 | 浅白 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
6 | 青绿 | 稍蜷 | 浊响 | 清晰 | 稍凹 | 软粘 | 是 |
7 | 乌黑 | 稍蜷 | 浊响 | 稍糊 | 稍凹 | 软粘 | 是 |
8 | 乌黑 | 稍蜷 | 浊响 | 清晰 | 稍凹 | 硬滑 | 是 |
9 | 乌黑 | 稍蜷 | 沉闷 | 稍糊 | 稍凹 | 硬滑 | 否 |
10 | 青绿 | 硬挺 | 清脆 | 清晰 | 平坦 | 软粘 | 否 |
11 | 浅白 | 硬挺 | 清脆 | 模糊 | 平坦 | 硬滑 | 否 |
12 | 浅白 | 蜷缩 | 浊响 | 模糊 | 平坦 | 软粘 | 否 |
13 | 青绿 | 稍蜷 | 浊响 | 稍糊 | 凹陷 | 硬滑 | 否 |
14 | 浅白 | 稍蜷 | 沉闷 | 稍糊 | 凹陷 | 硬滑 | 否 |
15 | 乌黑 | 稍蜷 | 浊响 | 清晰 | 稍凹 | 软粘 | 否 |
16 | 浅白 | 蜷缩 | 浊响 | 模糊 | 平坦 | 硬滑 | 否 |
17 | 青绿 | 蜷缩 | 沉闷 | 稍糊 | 稍凹 | 硬滑 | 否 |
命题逻辑规则是命题逻辑(合式)公式的一个子集,形式如下: \[H\leftarrow B_1 \wedge B_2 \wedge\ldots \wedge B_n.\]
其正式名称叫做命题霍恩子句(Propositional Horn clause)。
找到满足一组命题霍恩子句的有效赋值的问题叫做HORNSAT,它是P-完全问题,因此线性时间内可解。
与专家合作的冠心病诊断规则学习[Fürnkranz et al., 2012.]
IF 总胆固醇 >= 6.1 mmol/L AND 年龄 >= 53 岁 AND BMI < 30 THEN 冠心病 IF BMI >= 25 AND 高密度脂蛋白 < 1.25 mmol/L AND 尿酸 < 360 mmol/L AND 血糖 < 7 mmol/L AND 血纤维蛋白原 > 3.7 g/L THEN 冠心病
规则\(\mathcal{R}\)在样本集\(\mathcal{E}\)上的覆盖情况:
命题规则的特征(feature)为原子命题或其否定,即取值为\(\{0, 1\}\)的命题逻辑公式。
常见的数据集一般是属性-值(attribute-value)表格,常见的种类有:
色泽 | 根蒂 | 敲击 | 纹理 | 脐部 | 触感 | 密度 | 含糖率 | 好瓜 |
---|---|---|---|---|---|---|---|---|
青绿 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 0.697 | 0.46 | 是 |
乌黑 | 蜷缩 | 沉闷 | 清晰 | 凹陷 | 硬滑 | 0.774 | 0.376 | 是 |
浅白 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 0.556 | 0.215 | 是 |
乌黑 | 稍蜷 | 沉闷 | 稍糊 | 稍凹 | 硬滑 | 0.666 | 0.091 | 否 |
青绿 | 硬挺 | 清脆 | 清晰 | 平坦 | 软粘 | 0.243 | 0.267 | 否 |
浅白 | 硬挺 | 清脆 | 模糊 | 平坦 | 硬滑 | 0.245 | 0.057 | 否 |
集合值属性、有序值属性、层次值属性
离散属性一般通过选择器(selector)来转化为命题特征。
例如,当属性\(\mathbf{A}_i\)的取指拥有\(v_{i,j}, j=1,2,\ldots\)时,可以构造命题:
连续值和有序值属性可以通过等号大、小于号来转化为命题特征,例如
连续值属性也可用函数建关系型特征(relational feature):
ID | 色泽 | 根蒂 | 敲击 | 纹理 | 脐部 | 触感 | 好瓜 |
---|---|---|---|---|---|---|---|
1 | 青绿 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
2 | 乌黑 | 蜷缩 | 沉闷 | 清晰 | 凹陷 | 硬滑 | 是 |
3 | 浅白 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
4 | 乌黑 | 稍蜷 | 沉闷 | 稍糊 | 稍凹 | 硬滑 | 否 |
5 | 青绿 | 硬挺 | 清脆 | 清晰 | 平坦 | 软粘 | 否 |
6 | 浅白 | 硬挺 | 清脆 | 模糊 | 平坦 | 硬滑 | 否 |
ID | 色泽 | 根蒂 | 敲击 | 纹理 | 脐部 | 触感 | 好瓜 |
---|---|---|---|---|---|---|---|
1 | 青绿 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
2 | 乌黑 | 蜷缩 | 沉闷 | 清晰 | 凹陷 | 硬滑 | 是 |
3 | 浅白 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
4 | 乌黑 | 稍蜷 | 沉闷 | 稍糊 | 稍凹 | 硬滑 | 否 |
5 | 青绿 | 硬挺 | 清脆 | 清晰 | 平坦 | 软粘 | 否 |
6 | 浅白 | 硬挺 | 清脆 | 模糊 | 平坦 | 硬滑 | 否 |
证明:
ID | 色泽 | 根蒂 | 敲击 | 纹理 | 脐部 | 触感 | 好瓜 |
---|---|---|---|---|---|---|---|
1 | 青绿 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
2 | 乌黑 | 蜷缩 | 沉闷 | 清晰 | 凹陷 | 硬滑 | 是 |
3 | 浅白 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
4 | 乌黑 | 稍蜷 | 沉闷 | 稍糊 | 稍凹 | 硬滑 | 否 |
5 | 青绿 | 硬挺 | 清脆 | 清晰 | 平坦 | 软粘 | 否 |
6 | 浅白 | 硬挺 | 清脆 | 模糊 | 平坦 | 硬滑 | 否 |
1: # P/N: 正样例/负样例
2: # A: 属性集合
3: function gen_discrete_attribute_feature(P, N, A)
4: F = []
5: for attr_i in A # 第i个属性
6: # 正样例里出现的所有属性值
7: V_P = [p[attr_i] for p in P]
8: # 负样例里出现的所有属性值
9: V_N = [n[attr_i] for n in N]
10: for v in V_P
11: push!(F, Expr(attr_i == v))
12: end
13: for v in V_N
14: push!(F, Expr(attr_i != v))
15: end
16: end
17: return F
18: end
1: # P/N: 正样例/负样例
2: # A: 属性集合
3: function gen_continuous_attribute_feature(P, N, A)
4: F = []
5: for attr_i in A # 第i个属性
6: # 正样例里出现的所有属性值
7: V_P = [p[attr_i] for p in P]
8: # 负样例里出现的所有属性值
9: V_N = [n[attr_i] for n in N]
10: # 将所有样本中属性i的取值排序
11: V = sort!(values(attr_i))
12: for i in 1:length(V)-1
13: # 两个取值的中间值
14: v = (v[i] + v[i+1])/2
15: if (v[i] in V_P) && (v[i+1] in V_N) # i正,i+1负
16: push!(F, Expr(attr_i < v))
17: end
18: if (v[i] in V_N) && (v[i+1] in V_P) # i负,i+1正
19: push!(F, Expr(attr_i >= v))
20: end
21: end
22: end
23: return F
24: end
ID | 密度 | 含糖率 | 好瓜 |
---|---|---|---|
1 | 0.697 | 0.46 | 是 |
2 | 0.774 | 0.376 | 是 |
3 | 0.556 | 0.215 | 是 |
4 | 0.666 | 0.091 | 否 |
5 | 0.243 | 0.267 | 否 |
6 | 0.245 | 0.057 | 否 |
以密度为例:
没有被该算法所生成的特征,要么完全无关,要么比该算法生成的特征相对更无关。
UCI数据集上的结果[Wohlrab and Fürnkranz, 2011]:
目标:学习一条
命题逻辑规则。
1: # E = P + N: 样本集合
2: # F: 特征集合
3: function find_best_rule(E, F)
4: # 初始化规则
5: r_best = init_rule(E, F)
6: # 计算规则打分
7: h_best = score(r_best, E)
8: # 初始化备选规则集
9: R = [ r_best ]
10: # 开始对每条备选规则进行精化
11: while !empty(R)
12: for r in R
13: # 对r进行精化
14: rho_r = refine_rule(r, E, F)
15: for r_refined in rho_r
16: # 如果符合停止标准(如过长)则跳过
17: if meet_stop_criterion(r_refined)
18: continue
19: else
20: # 计算打分
21: h_refined = score(r_refined, E)
22: # 插入候选规则集
23: R = insert_sort(r_refined, R)
24: # 计算是否最优
25: if h_refined > h_best
26: h_best = h_refined
27: r_best = r_refined
28: end
29: end
30: end
31: end
32: # 过滤规则集合,如删除差规则、剪枝等等
33: R = filter_rules(R, E)
34: end
35: return r_best
36: end
在命题规则学习中,特化就是向规则中增加文字:
在命题规则学习中,特化就是向规则中增加文字:
在命题规则学习中,特化就是向规则中增加文字:
在命题规则学习中,特化就是从规则中删除文字:
在命题规则学习中,特化就是从规则中删除文字:
在命题规则学习中,特化就是从规则中删除文字:
打分函数是一种启发式函数,用于定量地描述规则的质量:
名字 | 记号 |
---|---|
正样例数 | \(P\) |
负样例数 | \(P\) |
覆盖正样例数(TP) | \(\hat{P}\) |
覆盖负样例数(FP) | \(\hat{N}\) |
未覆盖正样例数(FN) | \(\bar{P}\) |
未覆盖负样例数(TN) | \(\bar{N}\) |
在查准率和查全率中折衷
显然,这一类方法都和(带权相对)准确率\(\frac{\hat{P}}{\hat{P}+\hat{N}}\)等价,因此可以与样本覆盖率\(\frac{\hat{P}+\hat{N}}{P+N}\)作各种复合:
\[ \text{正样本覆盖率}\cdot(\text{信息量}-\text{精化前信息量})=\hat{P}\cdot\left(\log_2{\frac{\hat{P}}{\hat{P}+\hat{N}}}-\log_2 c\right) \]