用于变化点分析的 Python 模块

机器算法验证 时间序列 Python 变化点
2022-01-16 04:10:11

我正在寻找一个对时间序列执行变化点分析的 Python 模块。有许多不同的算法,我想探索其中一些算法的功效,而不必手动滚动每种算法。

理想情况下,我想要一些模块,例如 R 中的bcp(贝叶斯变化点)或strucchange包。我希望在 Scipy 中找到一些,但我无法找到任何东西。

我很惊讶没有任何设施:

Python中是否有任何具有变化点检测算法的模块?

4个回答

你可以在 PyPI 上试用changefinder库。描述说它是一个基于 ChangeFinder 算法的在线变更检测库

在这个Github repo上,还有一些 Michele Basseville 的统计变化点检测技术的 Python 实现,以教程格式提供。

Python 库在使用高级统计包方面仍有一些差距。您是否尝试过使用 RPy 模块?使用 RPy 时,您可以加载 R 模块。

RPy 简要教程:http ://www.sciprogblog.com/2012/08/using-r-from-within-python.html strucchange

我刚刚在 Python 中遇到了一个名为“ruptures”的变化点检测库:https ://arxiv.org/abs/1801.00826

也许这可能有用。

Python 包 rpy2 的这个实现对我有用:

import numpy as np
from rpy2.robjects.packages import importr
import rpy2.robjects as robjects

r = robjects.r #allows access to r object with r.

bcp = importr('bcp') #import bayesian change point package in python

values = bcp.bcp( r.c( r.rnorm(50) , r.rnorm(50,5,1), r.rnorm(50) ) ) #use bcp function on vector

posterior_means = np.array(values[5]).flatten()
posterior_probability = np.array(values[7]).flatten()

然后,您可以针对原始向量绘制后验均值和后验概率。有关此示例的更多详细信息,请参阅 R 中的 bcp 函数示例。

此外,使用数字(即 values[5])的硬索引值并不理想,但我在使用 rx 和 rx2 提取器时遇到了困难。因此,如果有人能告诉我一种不那么骇人听闻的提取方法,我很想知道!