前言:基于决策树的结构学习方法在最近的文献中比较普遍,今天来精读一下这篇文章。
主要参考文献:
Bombara, G., Vasile, C.-I., Penedo, F., Yasuoka, H., & Belta, C. (2016, April 11). A Decision Tree Approach to Data Classification using Signal Temporal Logic. Proceedings of the 19th International Conference on Hybrid Systems: Computation and Control. https://doi.org/10.1145/2883817.2883843
文章目录
概览
这篇文章针对公式学习提出了以下新方法:
- 二叉决策树
- 杂质度量法
在以下案例中进行了验证:
- 海事监控的异常检测
- 燃油控制系统的异常监控
流水账笔记
1 Introduction
本文提出了一个基于决策树的时序逻辑推理框架。为什么叫做框架呢?因为这个框架包含了一系列不同的算法,可以根据情况进行选择。
2 Related Work
文献整理
- 参数学习
[1] Parametric Identification of Temporal Properties
[2] Querying Parametric Temporal Logic Properties on Embedded Systems
[3] Mining Requirements From Closed-Loop Control Models
[4] System design of stochastic models using robustness of temporal properties
- DAG方法
[1] Anomaly detection in cyber-physical systems: A formal methods approach
[2] Temporal logic inference for classification and prediction from data
- 结构学习与参数学习分离的方法
[1] Data-Driven Statistical Learning of Temporal Logic Properties
[2] Temporal Logic Based Monitoring of Assisted Ventilation in Intensive Care Patients
- Spatial Logic Inference
[1] Learning and detecting emergent behavior in networks of cardiac myocytes
[2] A formal methods approach to pattern synthesis in reaction diffusion systems
3 Signal Temporal Logic
这里STL和PSTL的定义与这篇文献的定义一致,这里就不做介绍了。
4 Problem Formulation
本篇文章解决的问题,依然是给据信号
s
s
s,求时序公式
ϕ
\phi
ϕ,使最小化误分类率:
MCR
(
ϕ
)
:
=
∣
{
s
i
∣
(
s
i
⊨
ϕ
∧
l
i
=
C
n
)
∨
(
s
i
⊭
ϕ
∧
l
i
=
C
p
)
}
∣
N
\operatorname{MCR}(\phi):=\frac{\left|\left\{s^{i} \mid\left(s^{i} \models \phi \wedge l^{i}=C_{n}\right) \vee\left(s^{i} \not \models \phi \wedge l^{i}=C_{p}\right)\right\}\right|}{N}
MCR(ϕ):=N∣∣{si∣(si⊨ϕ∧li=Cn)∨(si⊨ϕ∧li=Cp)}∣∣
上面
C
n
C_n
Cn和
C
p
C_p
Cp分别代表负例集合和正例集合。
5 Learning Decision Trees
- key:找到STL子式和决策树的对应
- 二叉决策树:每个非叶节点将数据分入两个子节点中,最后的叶节点代表数据的分类
In this paper, we focus on binary decision trees, where every non-terminal node splits the data into two children nodes and every leaf node predicts a label.
- 树生长算法的3个meta-parameter:
- 划分方式:即一系列 ϕ \phi ϕ
- 最佳划分选取:如果选取最佳的 ϕ ∗ \phi^* ϕ∗
- 终止条件
5.1 Parameterized Learning Algorithm
第一个算法buildTree讲的是如何构建决策树。
要看懂这段代码,首先要理解代码中几个函数的意义:
- b u i l d T r e e ( ϕ p a t h , S , h ) buildTree(\phi^{path},S,h) buildTree(ϕpath,S,h)接受三个参数, ϕ p a t h \phi^{path} ϕpath代表当前节点到根节点的路径所代表的公式, S S S是一系列带标签的信号, h h h是当前节点所在的深度,函数返回以当前节点为根节点的决策树。
- s t o p ( ϕ p a t h , h , S ) stop(\phi^{path},h,S) stop(ϕpath,h,S)也是接受三个参数,判断这三个参数满足递归的终止条件
- l e a f ( c ) leaf(c) leaf(c)创建一个带标签的叶节点
- n o n _ t e r m i n a l ( ϕ ) non\_terminal(\phi) non_terminal(ϕ)创建一个包含原子命题的非叶节点,原子命题从 P \mathcal{P} P中选取
- J ( S , S ⊤ , S ⊥ ) J(S,S_\top,S_\perp) J(S,S⊤,S⊥)输入分类后的信号,返回本节点最佳的子公式 ϕ ∗ \phi^* ϕ∗(即选择最佳划分方式)
- p a r t i t i o n ( S , ϕ ) partition(S,\phi) partition(S,ϕ)根据 ϕ = ϕ p a t h ∧ ϕ ∗ \phi=\phi^{path}\land\phi^* ϕ=ϕpath∧ϕ∗将信号分类
运行 b u i l d T r e e ( ⊤ , S r o o t , 0 ) buildTree(\top,S_{root},0) buildTree(⊤,Sroot,0)就可以得到决策树了。在运行以上函数之前要自己定义好 P \mathcal{P} P(可供选择的PSTL), J J J(最佳划分方式的选取方法), s t o p stop stop(终止条件)。
5.2 Tree to STL formula
那么得到决策树之后怎样得到我们需要的STL公式呢?下面这个算法建立了决策树到STL公式的映射,我们来看一看具体是怎么做的。
要得到总公式,我们需要从根节点开始遍历整棵决策树,这里遍历同样是通过递归实现。对于每个非叶节点,都可以通过以下递归式
(
t
.
ϕ
∧
T
r
e
e
2
S
T
L
(
t
.
l
e
f
t
)
)
∨
(
¬
t
.
ϕ
∧
T
r
e
e
2
S
T
L
(
t
.
r
i
g
h
t
)
)
(t.\phi\land Tree2STL(t.left))\lor(\neg t.\phi \land Tree2STL(t.right))
(t.ϕ∧Tree2STL(t.left))∨(¬t.ϕ∧Tree2STL(t.right))来进行描述;对于每个叶节点,直接返回标签即可。下面的图表述的很清晰:
5.3 PSTL primitives
PSTL列表 P \mathcal{P} P
上文中提到了一个可供选择的PSTL列表 P \mathcal{P} P,这个列表具体长什么样呢?这里给出了两类:
-
一阶命题 First-Level Primitives:包含一个时序操作子的命题,参数变量为 ( μ , τ 1 , τ 2 ) (\mu,\tau_1,\tau_2) (μ,τ1,τ2),如:
P 1 = { F [ τ 1 , τ 2 ) ( x i ∼ μ ) or G [ τ 1 , τ 2 ) ( x i ∼ μ ) ∣ i ∈ { 1 , … , n } , ∼ ∈ { ≤ , > } } \begin{gathered} \mathcal{P}_{1}=\left\{\mathbf{F}_{\left[\tau_{1}, \tau_{2}\right)}\left(x_{i} \sim \mu\right) \text { or } \mathbf{G}_{\left[\tau_{1}, \tau_{2}\right)}\left(x_{i} \sim \mu\right)\right. \\ \mid i \in\{1, \ldots, n\}, \sim \in\{\leq,>\}\} \end{gathered} P1={F[τ1,τ2)(xi∼μ) or G[τ1,τ2)(xi∼μ)∣i∈{1,…,n},∼∈{≤,>}}
解释为线性不等式在 [ τ 1 , τ 2 ) [\tau_1,\tau_2) [τ1,τ2)内始终成立(globally/always)或至少成立一次(finally/eventually). -
二阶命题 Second-Level Primitives:包含2个时许操作子的命题,参数多一些,为 ( μ , τ 1 , τ 2 , τ 3 ) (\mu,\tau_1,\tau_2,\tau_3) (μ,τ1,τ2,τ3),如:
P 2 = { { G [ τ 1 , τ 2 ) F [ 0 , τ 3 ) ( x i ∼ μ ) or F [ τ 1 , τ 2 ) G [ 0 , τ 3 ) ( x i ∼ μ ) ∣ i ∈ { 1 , … , n } , ∼ ∈ { ≤ , > } } \begin{aligned} \mathcal{P}_{2}=\{&\left\{\mathbf{G}_{\left[\tau_{1}, \tau_{2}\right)} \mathbf{F}_{\left[0, \tau_{3}\right)}\left(x_{i} \sim \mu\right) \text { or } \mathbf{F}_{\left[\tau_{1}, \tau_{2}\right)} \mathbf{G}_{\left[0, \tau_{3}\right)}\left(x_{i} \sim \mu\right)\right.\\ &\mid i \in\{1, \ldots, n\}, \sim \in\{\leq,>\}\} \end{aligned} P2={{G[τ1,τ2)F[0,τ3)(xi∼μ) or F[τ1,τ2)G[0,τ3)(xi∼μ)∣i∈{1,…,n},∼∈{≤,>}}
可以分别这么解释:
∀ t ∈ [ τ 1 , τ 2 ) ∃ t ′ ∈ [ t , min { t + τ 3 , τ 2 } ) x i ( t ′ ) ∼ μ ∃ t ∈ [ τ 1 , τ 2 ) ∀ t ′ ∈ [ t , min { t + τ 3 , τ 2 } ) x i ( t ′ ) ∼ μ \forall t\in[\tau_1,\tau_2)\quad \exist t' \in [t,\min\{t+\tau_3,\tau_2\}) \quad x_i(t') \sim \mu \\ \exist t\in[\tau_1,\tau_2)\quad \forall t' \in [t,\min\{t+\tau_3,\tau_2\}) \quad x_i(t') \sim \mu ∀t∈[τ1,τ2)∃t′∈[t,min{t+τ3,τ2})xi(t′)∼μ∃t∈[τ1,τ2)∀t′∈[t,min{t+τ3,τ2})xi(t′)∼μ
Boolean Closure 布尔闭包
什么是Boolean Closure呢?离散数学中我们学过:
A
∧
B
⊆
A
or
B
⊆
A
∨
B
A \land B \subseteq A \text{ or }B \subseteq A \lor B
A∧B⊆A or B⊆A∨B
放到STL框架下,易得:二阶命题包含一阶命题。
5.4 Impurtity measures
基于鲁棒度的改进不纯度方法
借用决策树理论中的表达,上面的 P \mathcal{P} P其实就是一系列不同的分类器,现在使用不纯度(impurity)为指标,来评价分类效果的好坏,进而来选取分类器。
首先定义分组权重,也就是不同类别在整体信号中所占的比例。
这里的不纯度方法和传统机器学习决策树文献中定义相一致,分为以下几类:
- 信息增益 IG
- 基尼增益 GG
- 误分类率增益 MG
在本文中,作者联系STL的量化语义对分组权重的定义进行了修改:
p
⊤
=
∑
s
i
∈
S
⊤
r
(
s
i
,
ϕ
)
∑
s
i
∈
S
∣
r
(
s
i
,
ϕ
)
∣
p
⊥
=
−
∑
s
i
∈
S
⊥
r
(
s
i
,
ϕ
)
∑
s
i
∈
S
∣
r
(
s
i
,
ϕ
)
∣
p
(
S
,
c
;
ϕ
)
=
∑
s
i
∈
S
c
∣
r
(
s
i
,
ϕ
)
∣
∑
s
i
∈
S
∣
r
(
s
i
,
ϕ
)
∣
p_\top=\frac{\sum_{s^i\in S_\top}r(s^i,\phi)}{\sum_{s^i\in S}|r(s^i,\phi)|} \quad p_\perp=-\frac{\sum_{s^i\in S_\perp}r(s^i,\phi)}{\sum_{s^i\in S} |r(s^i,\phi)|} \quad p(S,c;\phi)=\frac{\sum_{s^i\in S_c}|r(s^i,\phi)|}{\sum_{s^i\in S}|r(s^i,\phi)|}
p⊤=∑si∈S∣r(si,ϕ)∣∑si∈S⊤r(si,ϕ)p⊥=−∑si∈S∣r(si,ϕ)∣∑si∈S⊥r(si,ϕ)p(S,c;ϕ)=∑si∈S∣r(si,ϕ)∣∑si∈Sc∣r(si,ϕ)∣
因为
S
⊥
S_\perp
S⊥是不满足公式
ϕ
\phi
ϕ的样本结合,所以
S
⊥
S_\perp
S⊥中信号相对于
ϕ
\phi
ϕ的鲁棒度小于0,因此
p
⊥
p_\perp
p⊥会多出一个负号。代码中直接按照最后一个式子处理就可以了。
那么为什么要这样处理呢?
- 普通的不纯度方法是分段常值函数,基于鲁棒度的不纯度方法的梯度更大,优化的时候区分更加显著
- 基于鲁棒性的方法在面对新的测试数据时具有更好的泛化性能,为什么这么说呢?鲁棒性越大,就是说分类边界离两类信号都尽量的远。这里作者还画了一个饼,说要具体对比一下两种方法的性能。
局部优化算法
对于n维信号,可以对应4n条一阶公式(为什么不是2n条??),每条公式中有3个参数;对应4n条二阶公式(不理解,还是觉得应该是2n条),每条公式中4个参数。
这里的优化算法可以选取任意全局非线性优化算法,如模拟退火、微分进化等。但是调用过以上算法的小伙伴一定知道,优化的参数是需要输入上下界的,那么这个参数范围目前只能靠人为指定。
鲁棒度的增量计算方法
所谓增量计算法,就是借助前面算好的
r
(
s
i
,
ϕ
p
a
t
h
)
r(s^i,\phi^{path})
r(si,ϕpath)来简便计算,根据鲁棒度的定义可以得到下式:
r
(
s
i
,
ϕ
t
r
e
e
)
=
r
(
s
i
,
ϕ
p
a
t
h
∧
ϕ
)
=
m
i
n
{
r
(
s
i
,
ϕ
p
a
t
h
)
,
r
(
s
i
,
ϕ
)
}
r(s^i,\phi^{tree})=r(s^i,\phi^{path}\land\phi)=min\{r(s^i,\phi^{path}),r(s^i,\phi)\}
r(si,ϕtree)=r(si,ϕpath∧ϕ)=min{r(si,ϕpath),r(si,ϕ)}
5.5 Stop Conditions
这里提出了几种不同的终止条件可供选择:
- 当前结点只包含一类信号时终止
- 当前结点的纯度达到指定数值(如99%)终止
- 到达指定深度终止
5.6 Complexity
C
(
N
)
=
Θ
(
N
⋅
(
1
+
∫
1
x
g
(
u
)
u
2
d
u
)
)
C(N)=\Theta\left(N \cdot\left(1+\int_{1}^{x} \frac{g(u)}{u^{2}} \mathrm{~d} u\right)\right)
C(N)=Θ(N⋅(1+∫1xu2g(u) du))
证明有空再补充吧
6 Case Studies
6.1 Maritime surveillance
这个案例中用STL来区分海事监控的正常(绿色)与异常(蓝色和紫色)情况,总共有1000个正例样本和1000个负例样本,每个样本包含61个二维坐标点。
6.2 Fuel control system
第二个案例是MatLab/Simulink中燃油控制系统的异常监控。
本文对这个模型进行了修改:
- 删去了原有的异常检测单元
- 修改了异常发生器,使异常的发生时间和发生幅值都变得随机
- 输出加入了
(
μ
,
σ
2
)
=
(
0
,
0.01
)
(\mu,\sigma^2)=(0,0.01)
(μ,σ2)=(0,0.01)的高斯噪声
选取了下面两个传感器的信号,包含正负例信号各600组,每组信号有200个采样点:
7 Implementation and Results
这里把一阶命题和二阶命题分别生成决策树实例
I
1
I_1
I1和
I
2
I_2
I2,其中一阶决策树是用MATLAB写的,利用模拟退火方法求解;二阶决策树是用Python写的,利用SciPy中的微分进化算法求解。使用的meta如下:
代码地址在这里
7.1 Maritime Surveillance
二阶决策树:
- 10折交叉验证
- 平均误分类率=0.007
- 误分类率标准差=0.08
- 用时≈4h/split (有点慢呀)
- 某次得到公式:
一阶决策树:
- 5折交叉验证
- 平均误分类率=0.0040
- 误分类率标准差=0.0029
- 用时≈16min/split (还行)
- 某次得到公式:
7.2 Fuel Control
二阶决策树:
- 10折交叉验证
- 平均误分类率=0.054
- 误分类率标准差=0.025
- 用时≈15h/split (啊这)
- 某次得到公式:
一阶决策树: - 5折交叉验证
- 平均误分类率=0.0350
- 误分类率标准差=0.0176
- 用时≈18min/split (还行)
- 某次得到公式:
8 Conclusion
未来方向
- 拓展在线学习
- 对比不同的 P \mathcal{P} P选取和不纯度方法的效果。
- 提升计算效率
思考与记录
- 这里提出的是带标签的分类算法,是由分类联想到的决策树,可以思考是否还有其他的分类算法可以纳入TLI的框架
- 公式中的参数数量会大大影响分支效率,因此本文提出的算法还是有很大的局限性
- 在这样的计算效率下拓展在线学习…?