ruptures库介绍
环境配置可以直接pip安装,但在github链接中有对其的user-guide介绍,其中包括:
ruptures.base
: base classes;ruptures.detection
: search methods;ruptures.costs
: costs functions;ruptures.datasets
: data set generating utilities;ruptures.metrics
: evaluation metrics;ruptures.show
: display functions.
其中search methods采用的算法,有binseg,bottomup,dynp,kernelcpd,pelt,window6种。
binseg
二进制变化点检测用于执行快速信号分割,并在[Binseg]中实现。它是一种顺序方法:首先,在完整的输入信号中检测一个变化点,然后围绕该变化点分割级数,然后对生成的两个子信号重复该操作。关于[Binseg][breakees.detection.Binseg.Binseg]的理论和算法分析,例如参见[Bai1997]和[Flyzlewicz2014]。二进制分割的好处包括低复杂度(O(Cnlogn)的数量级),其中n是样本数量C在一个子信号上调用所考虑的成本函数的复杂性),它可以扩展任何单个变化点检测方法来检测多个变化点,并且无论状态的数量是否事先已知,它都可以工作
Bottom-up segmentation
自下而上的变化点检测用于执行快速信号分割,并以顺序的方式在[BottomUp][breakuses.detection.BottomUp.BottomUp]中实现。与二进制分割(这是一种贪婪的过程)相反,自下而上的分割是慷慨的:它从许多变化点开始,然后依次删除不太重要的变化点。首先,将信号沿着规则网格划分为许多子信号。然后,根据它们的相似程度,连续的段被依次合并。例如,参见[Keogh2001]或[Freyzlewicz2007],以获得[BottomUp][breakees.detection.BottomUp.BottomUp]的算法分析。自下而上分割的好处包括低复杂性(O(nlogn)的阶数,其中n是样本数),事实上,它可以扩展任何单个变化点检测方法来检测多个变化点,并且无论状态的数量是否事先已知,它都可以工作
Dynamic programming
该方法在[Dynp][tructures.detection.Dynp.Dynp]中实现,这是一个完整的本地python实现,用户可以选择在tructures.costs中定义的任何成本函数
它通过计算给定信号的所有子序列的成本来找到成本总和的(精确的)最小值。它被称为“动态编程”,因为使用动态编程方法对所有可能的分段进行搜索。
为了工作,用户必须提前指定要检测的更改数量。(当这个数字未知时,考虑使用惩罚方法。)
动态编程方法的复杂性为O(CKn2)阶,其中K是要检测的变化点的数量,n是样本的数量,C是在一个子信号上调用所考虑的代价函数的复杂性。因此,分段常数模型(模型=l2)明显快于线性或自回归模型。
Kernel change point detection
把时间序列信号使用一个核函数映射至一个空间,核变化点检测在于找到映射信号中的平均偏移,变点检测被建模为带惩罚的优化问题。 论文参考[Killick2012]
Linearly penalized segmentation
因为枚举所有可能的分区是不可能的,所以该算法依赖于修剪规则。许多索引被丢弃,大大降低了计算成本,同时保留了找到最优分割的能力。实施遵循【Killick2012】。此外,在变化点重新划分的某些条件下,平均计算复杂度为O(CKn)阶,其中K是要检测的变化点的数量,n是样本的数量,C是在一个子信号上调用所考虑的代价函数的复杂度。因此,分段常数模型(模型=l2)明显快于线性或自回归模型
Window-based change point detection
该算法使用两个沿数据流滑动的窗口。将每个窗口内的信号的统计特性与差异度量进行比较。如果滑动窗口属于同一分段,它们的统计特性相似,并且第一窗口和第二窗口之间的差异很低。如果滑动窗口分为两个不同的部分,则差异明显更大,这表明窗口之间的边界是一个变化点。形成差异曲线,并在差异曲线上执行顺序峰值搜索,以检测变化点。