拐点检测常用算法介绍

本文介绍了拐点检测的不同算法,包括损失函数如线性、核函数和马氏距离等,以及固定K值和可变K值的查找算法,如最优检测、滑动窗口、二分分割和自底向上分割。还探讨了线性惩罚项和贝叶斯方法,并推荐了Python库ruptures用于实际应用。
摘要由CSDN通过智能技术生成

前言

最近在学习拐点检测的相关问题, 发现 C.Truong 的论文 对拐点检测的整个流程和目前主流的一些算法介绍的比较清楚,所以在这里进行了一些记录以及总结,并且对 Truong 发布的 ruptures 库做了一些简单的介绍。如果想要进行更深入的研究,请参考原论文ruptures

概览

问题定义

拐点检测名为 change point detection,对于一条不平缓的时间序列曲线,认为存在一些时间点 ( t 1 , t 2 , . . . , t k ) (t_{1},t_{2},...,t_{k}) (t1,t2,...,tk),使得曲线在这些点对应的位置发生突变,这些时间点对应的曲线点称为拐点,在连续的两个拐点之间,曲线是平稳的。

在这里插入图片描述

拐点检测算法的质量通过算法输出拐点与实际观测到的拐点的差值绝对值除以样本数来评估。
∀ k , ∣ t ^ k − t k ⋆ ∣ / T , \forall k, \quad\left|\hat{t}_{k}-t_{k}^{\star}\right| / T, k,t^ktk/T,
理想情况下,当样本数T无穷大时,误差应该减少到0,这种性质称为满足渐近一致性 (asymptotic consistency.)
max ⁡ k = 1 , … , K ∗ ∣ t ^ k − t k ⋆ ∣ / T ⟶ p 0 \max _{k=1, \ldots, K^{*}}\left|\hat{t}_{k}-t_{k}^{\star}\right| / T \stackrel{p}{\longrightarrow} 0 k=1,,Kmaxt^ktk/Tp0

符号定义

y a . . b y_{a..b} ya..b 表示时间点 a 和 b 之间的时间序列,因此完整信号为 y 0.. T y_{0..T} y0..T

对于给定的拐点索引 t t t,它的关联分数 associate fraction 称为拐点分数 change point fractions ,公式为 :
τ : = t / T ∈ ( 0 , 1 ] . \tau :=t / T \in(0,1]. τ:=t/T(0,1].

拐点分数的集合 τ = { τ 1 , τ 2 , … } \boldsymbol{\tau}=\left\{\tau_{1}, \tau_{2}, \ldots\right\} τ={ τ1,τ2,} 写作 ∣ τ |\boldsymbol{\tau} τ|

研究方法

一般思路是构造一个对照函数 contrast function,目标是将对照函数的值最小化。
V ( t , y ) : = ∑ k = 0 K c ( y t k … t k + 1 ) , V(\mathbf{t}, y) :=\sum_{k=0}^{K} c\left(y_{t_{k} \ldots t_{k+1}}\right), V(t,y):=k=0Kc(ytktk+1)
其中 c ( ⋅ ) c(\cdot) c() 表示用来测量拟合度 goodness-of-fit 的损失函数 cost function, 损失函数的值在均匀的子序列上较低,在不均匀的子序列上较高。

基于离散优化问题 discrete optimization problem,拐点的总数量记为 K K K

如果 K K K 是固定值,估算的拐点值为:
min ⁡ ∣ t ∣ = K V ( t ) , \operatorname{min}_{|\mathbf{t}|=K} V(\mathbf{t}), mint=KV(t),
如果 K K K 不是固定值,估算的拐点值为:
min ⁡ t V ( t ) + pen ⁡ ( t ) . \min _{t} V(\mathbf{t})+\operatorname{pen}(\mathbf{t}). tminV(t)+pen(t).
其中 p e n ( t ) pen(t) pen(t)为对 t t t 的惩罚项项

在这种方法论下,拐点检测的算法包含以下三个元素:

  1. 选择合适的损失函数来测算子序列的均匀程度 homogeneity,这与要检测的变化类型有关
  2. 解决离散优化问题
  3. 合理约束拐点的数量,确定使用固定的 K K K 还是用 p e n ( ) pen() pen() 来惩罚 penalizing 不固定的数量

损失函数

损失函数与被检测拐点的变化类型有关,下文介绍的损失函数使用在子序列 y a . . b y_{a..b} ya..b 上,其中 1 < = a < b < = T 1 <= a < b <= T 1<=a<b<=T

Piecewise i.i.d. signals

首先介绍一种使用 i . i . d . i.i.d. i.i.d. 变量对信号 y y y 进行建模的一般参数模型。

i . i . d . i.i.d. i.i.d. Independent and identically distributed,独立同分布,指一组随机变量中每个变量的概率分布都相同,且这些随机变量互相独立。

假设 y 1 , . . . , y T y_{1},...,y_{T} y1,...,yT 是独立随机变量,概率分布 probability distribution f ( y t ∣ θ ) f\left(y_{t} | \theta\right) f(ytθ) 依赖于向量值参数 θ \theta θ vector-value parameter θ \theta θ 表示预测到发生突然变化的兴趣点。假设存在一系列真实的拐点 t ⋆ = { t 1 ⋆ , … } \mathrm{t}^{\star}=\left\{t_{1}^{\star}, \ldots\right\} t={ t1,},并且满足:
y t ∼ ∑ i = 0 K f ( ⋅ ∣ θ k ) , ( t k ⋆ < t ≤ t k + 1 ⋆ ) . y_{t} \sim \sum_{i=0}^{K} f\left(\cdot | \theta_{k}\right) , \left(t_{k}^{\star}<t \leq t_{k+1}^{\star}\right). yti=0Kf(θk),(tk<ttk+1).
在这种场景下,拐点检测通过最大似然估计 maximum likelihood estimation 实施,相关的损失函数是 negative log-likelihood
c i . i . d ( y a . . b ) : = − sup ⁡ θ ∑ t = a + 1 b log ⁡ f ( y t ∣ θ ) . c_{\mathrm{i.i.d}}\left(y_{a . . b}\right) :=-\sup _{\theta} \sum_{t=a+1}^{b} \log f\left(y_{t} | \theta\right). ci.i.d(ya..b):=θsupt=a+1blogf(ytθ).
分布的选择取决于对数据的先验知识。 历史上,高斯分布通常用于模拟均值和极差(Scale = 最大值 - 最小值)变化。后来的大部分文献选用了其他参数分布,最突出的是关于一般指数族的分布。

例一:Mean-shifts for normal data

均值漂移模型是拐点检测文献研究最多的模型之一, y 1 , … , y T y_{1}, \dots, y_{T} y1,,yT 为具有分段常数均值和常数方差的一系列独立正态随机变量。这种情况下,损失函数 c i . i . d . ( ⋅ ) c_{i.i.d.}(\cdot) ci.i.d.() 为:
c L 2 ( y a . . b ) : = ∑ t = a + 1 b ∥ y t − y ‾ a . . b ∥ 2 2 c_{L_{2}}\left(y_{a . . b}\right) :=\sum_{t=a+1}^{b}\left\|y_{t}-\overline{y}_{a . . b}\right\|_{2}^{2} cL2(ya..b):=t=a+1bytya..b22
其中 y ‾ a . . b \overline{y}_{a..b} ya..b 是子信号 y a . . b y_{a..b} ya..b 的经验均值 empirical mean,这种损失函数一般也称为平方误差损失 quadratic error loss。一般应用于DNA序列和地理信号处理。

例二:Mean-shifts and scale-shifts for normal data

这是一种对均值漂移模型的自然拓展,这种模型也允许方差发生突然变化, y 1 , … , y T y_{1}, \dots, y_{T} y1,,yT 为具有分段常数均值和常数方差的一系列独立正态随机变量。这种情况下,损失函数 c i . i . d . ( ⋅ ) c_{i.i.d.}(\cdot) ci.i.d.() 为:
c Σ ( y a . . b ) : = log ⁡ det ⁡ Σ ^ a . . b c_{\Sigma}\left(y_{a .. b}\right) :=\log \operatorname{det} \widehat{\Sigma}_{a .. b} cΣ(ya..b):=logdetΣ a..b
其中 Σ ^ a . . b \widehat{\Sigma}_{a .. b} Σ a..b 是子信号 y a . . b y_{a..b} ya..b 的经验协方差矩阵 empirical covariance matrix,这种损失函数可用于检测随机(不要求高斯)变量的前两个时刻的变化,即使它是加入 c i . i . d . ( ⋅ ) c_{i.i.d.}(\cdot) ci.i.d.() 的高斯似然。一般应用于股票市场时间序列和医药信息处理。

例三:Count data

y 1 , … , y T y_{1}, \dots, y_{T} y1,,yT 为具有分段常数速率参数的一系列独立泊松分布 Poisson distributed 随机变量,这种模型的损失函数 c poisson ( ⋅ ) c_{\text {poisson}}(\cdot) cpoisson() 为:
c  Poisson  ( y a . . b ) : = − ( b − a ) y ‾ a . . b log ⁡ y ‾ a . . b c_{\text { Poisson }}\left(y_{a . . b}\right) :=-(b-a) \overline{y}_{a .. b} \log \overline{y}_{a .. b} c Poisson (ya..b):=(ba)ya..blogya..b
这种模型常应用于建模统计数据。

从理论上讲,变化点检测将一致性属性视为最大似然估计方法。实际上,已经表明,一般情况下,随着样本数量增长为无穷大,估测的最优拐点在概率上收敛于真实的拐点。拐点检测在 c i . i . d . ( ⋅ ) c_{i.i.d.}(\cdot) ci.i.d.() 下满足渐进一致性。总体而言,参数化的损失函数是有用的并且理论上满足渐进一致性,然而,如果数据不能很好的近似于有效的参数化分布,拐点检测的效果也会受到很大的影响,这迫使我们使用其他的模型。

Linear model

当发生突然变化的变量之间存在线性关系时,可以使用线性模型,这种变化在相关文献中通常被称为结构化变化。这个公式引出了几个著名的模型比如自回归模型 autoregressive (AR) model 和多元回归模型 multiple regressions 等。

在数学上,信号 y 被视为单变量响应变量,两种协变量的信号 x = { x t } t = 1 T x=\left\{x_{t}\right\}_{t=1}^{T} x={ xt}t=1T z = { z t } t = 1 T z=\left\{z_{t}\right\}_{t=1}^{T} z={ zt}t=1T 分别记为 R p − v a l u e d \mathbb{R}^{p} -valued Rpvalued R q − v a l u e d \mathbb{R}^{q}-valued Rqvalued,假设有一系列真实的拐点 t ⋆ = { t 1 ⋆ , … , t K ⋆ } \mathbf{t}^{\star}=\left\{t_{1}^{\star}, \ldots, t_{K}^{\star}\right\} t={ t1,,tK},一般线性模型为:
∀ t , t k ⋆ <

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值