【论文精读】时序逻辑推理之决策树方法 A Decision Tree Approach to Data Classification using Signal Temporal Logic

前言:基于决策树的结构学习方法在最近的文献中比较普遍,今天来精读一下这篇文章。

主要参考文献:
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. 二叉决策树
  2. 杂质度量法

在以下案例中进行了验证:

  1. 海事监控的异常检测
  2. 燃油控制系统的异常监控

流水账笔记

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:
    1. 划分方式:即一系列 ϕ \phi ϕ
    2. 最佳划分选取:如果选取最佳的 ϕ ∗ \phi^* ϕ
    3. 终止条件

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 ABA or BAB
放到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=siSr(si,ϕ)siSr(si,ϕ)p=siSr(si,ϕ)siSr(si,ϕ)p(S,c;ϕ)=siSr(si,ϕ)siScr(si,ϕ)
因为 S ⊥ S_\perp S是不满足公式 ϕ \phi ϕ的样本结合,所以 S ⊥ S_\perp S中信号相对于 ϕ \phi ϕ的鲁棒度小于0,因此 p ⊥ p_\perp p会多出一个负号。代码中直接按照最后一个式子处理就可以了。

那么为什么要这样处理呢?

  1. 普通的不纯度方法是分段常值函数,基于鲁棒度的不纯度方法的梯度更大,优化的时候区分更加显著
  2. 基于鲁棒性的方法在面对新的测试数据时具有更好的泛化性能,为什么这么说呢?鲁棒性越大,就是说分类边界离两类信号都尽量的远。这里作者还画了一个饼,说要具体对比一下两种方法的性能。
局部优化算法

对于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

这里提出了几种不同的终止条件可供选择:

  1. 当前结点只包含一类信号时终止
  2. 当前结点的纯度达到指定数值(如99%)终止
  3. 到达指定深度终止

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中燃油控制系统的异常监控。
本文对这个模型进行了修改:

  1. 删去了原有的异常检测单元
  2. 修改了异常发生器,使异常的发生时间和发生幅值都变得随机
  3. 输出加入了 ( μ , σ 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的框架
  • 公式中的参数数量会大大影响分支效率,因此本文提出的算法还是有很大的局限性
  • 在这样的计算效率下拓展在线学习…?
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值