Deeptime 完整指南:三步把时间序列变成马尔可夫模型
【免费下载链接】deeptimePython library for analysis of time series data including dimensionality reduction, clustering, and Markov model estimation项目地址: https://gitcode.com/gh_mirrors/de/deeptime
Deeptime 是一个 Python 时间序列分析库,把降维、聚类和马尔可夫模型估计串成一条流水线:输入一串随时间演化的数据,输出一个可查询、可预测的离散状态模型。本文用一条完整任务演示它的三步核心用法,代码只有安装命令和一段最小调用。
一条轨迹能换来什么
先说结论:Deeptime 解决的是"数据在手、规律不明"的问题。拿粒子在流体里的运动轨迹举例,点云看起来杂乱无章,但背后其实只有少数几个稳定区域,以及区域之间固定的跳转规律。Deeptime 的任务就是把连续轨迹压缩成一张状态跳转地图:哪些区域是系统长期停留的"家",从哪个家跳到哪个家、平均多久跳一次。
没有数据也能练手——它内置了双势阱、椭圆、粒子流体等样本数据集(见 deeptime/data/),先跑通流程再换自己的数据。
第一步:用 TICA 降维挑出慢变量
结论先行:聚类和建模之前必须先降维,否则高频噪声会把真正的信号淹没。
TICA(time-lagged independent component analysis)和 PCA 不是一回事:PCA 找方差最大的方向,TICA 找在滞后时间 τ 下自相关最强的方向。通俗讲,一个方向变化越快,它的值就越"快忘掉"历史;TICA 保留的正是最慢忘掉自己的那几个方向——也就是系统的慢运动。它还能把特征值换算成弛豫时间,直接告诉你每个方向对应多慢的运动。
TICA 所在的 deeptime/decomposition/ 里还有核 TICA、VAMP、DMD 等变体,可按数据特点替换。
第二步:正则空间聚类,给状态空间划格子
为什么需要聚类?因为马尔可夫模型只能定义在有限个离散状态上,必须先把连续空间切成几块区域。
Deeptime 默认用 RegularSpace 聚类:顺序扫过数据,某个点到所有已选中心的距离都超过 dmin 时,它就成为新中心;最后把每个点分给最近的中心(Voronoi 划分)。类比给城市划行政区——不预设几个区,只要求相邻区中心至少隔 dmin 远,区域数量和形状由数据密度自然决定,这比先定 k 的 k-means 更适合喂给马尔可夫模型。
k-means、盒划分等方案同在 deeptime/clustering/ 下,可对照实验。
第三步:估出马尔可夫状态模型并读出动力学
把轨迹按聚类标签切成离散序列后,数一下每次从状态 i 出发跳向各状态的次数,除以出发总数,就得到转移概率矩阵T——马尔可夫状态模型(MSM)的核心:把系统运动建模成状态图上的随机游走。
模型本身还是一堆可查询的物理量:
- 平稳分布:系统在长时间后停在各状态的概率
- 隐含时间尺度:每种运动模式要花多久完成
- 首次平均通过时间:从状态 A 第一次走到状态 B 平均要多久
核心调用就这么多:
import deeptime as dt traj = dt.data.ellipsoids(seed=1).observations(n_steps=2000) ticamodel = dt.decomposition.TICA(lagtime=10, dim=2).fit(traj) proj = ticamodel.transform(traj)模型类全部放在 deeptime/markov/,里面还有隐马尔可夫模型(HMM)、TRAM、贝叶斯 MSM 等变体。
不止马尔可夫:SINDy 直接学动力学方程
如果你的目标不是"系统现在在哪个状态",而是"每个坐标怎么随时间变化",可以用 SINDy 从轨迹里拟合出稀疏的微分方程 Ẋ = f(X),然后从任意初始条件向前模拟。下图里模型模拟轨迹和真实解几乎完全重合——方程本身被数据"背"了下来 🎯
深度学习路线(VAMPnet、深度 MSM)和可视化模块(网络图、等高线图、隐含时间尺度图)也在库里,按需取用。
三分钟安装并跑通
安装一条命令,Linux / Windows / macOS 的 x86_64 和 arm64 都有预编译二进制:
pip install deeptime完整流程五步:
- 取数据:内置样本(如
dt.data.double_well_discrete())或自己的时间序列 - 跑 TICA:给定 lagtime 和 dim,得到慢变量投影
- 聚类:用 RegularSpace 把投影切成离散状态
- 估计 MSM:数转移次数、归一化,得到转移矩阵
- 按需查询平稳分布、时间尺度,或画网络图
打开终端跑一遍双势阱样本,亲眼看看平稳分布如何呈现"两阱"结构,是上手最快的方式 🚀
【免费下载链接】deeptimePython library for analysis of time series data including dimensionality reduction, clustering, and Markov model estimation项目地址: https://gitcode.com/gh_mirrors/de/deeptime
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考