news 2026/8/24 1:21:37

Deeptime 完整指南:三步把时间序列变成马尔可夫模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Deeptime 完整指南:三步把时间序列变成马尔可夫模型

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

完整流程五步:

  1. 取数据:内置样本(如dt.data.double_well_discrete())或自己的时间序列
  2. 跑 TICA:给定 lagtime 和 dim,得到慢变量投影
  3. 聚类:用 RegularSpace 把投影切成离散状态
  4. 估计 MSM:数转移次数、归一化,得到转移矩阵
  5. 按需查询平稳分布、时间尺度,或画网络图

打开终端跑一遍双势阱样本,亲眼看看平稳分布如何呈现"两阱"结构,是上手最快的方式 🚀

【免费下载链接】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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 1:20:07

基于大语言模型的战役记忆引擎Table Canon部署与实战指南

1. 先搞清楚 Table Canon 到底解决了跑团中的什么问题如果你跑过或者主持过桌面角色扮演游戏,比如《龙与地下城》或者《克苏鲁的呼唤》,一定遇到过这个场景:一场持续数周甚至数月的战役,玩家和主持人创造了海量的对话、地点、人物…

作者头像 李华
网站建设 2026/8/24 1:15:45

格雷码算法精解:从递归到位运算,攻克CSP/NOIP经典赛题P5657

1. 项目概述:从一道经典赛题说起 如果你参加过信息学竞赛,或者正在准备CSP/NOIP,那么“格雷码”这道题大概率是你的老朋友,或者即将成为你的“拦路虎”。洛谷上的P5657,正是2019年CSP-S第二轮(也就是以前的…

作者头像 李华
网站建设 2026/8/24 1:15:14

AList 网盘聚合上手指南:从启动服务到接入第一个存储源

AList 网盘聚合上手指南:从启动服务到接入第一个存储源 【免费下载链接】alist 🗂️A file list/WebDAV program that supports multiple storages, powered by Gin and Solidjs. / 一个支持多存储的文件列表/WebDAV程序,使用 Gin 和 Solidjs…

作者头像 李华
网站建设 2026/8/24 1:13:43

Koodo Reader:跨平台电子书阅读器,进度多端同步

Koodo Reader:跨平台电子书阅读器,进度多端同步 【免费下载链接】koodo-reader A modern ebook manager and reader with sync and backup capacities for Windows, macOS, Linux, Android, iOS and Web 项目地址: https://gitcode.com/GitHub_Trendin…

作者头像 李华