信息速览

Gait in Neurodegenerative Disease Database(gaitndd)— 神经退行性疾病步态动力学 AI-Ready Wikipedia
INFOBOX
| 数据集名称 | Gait in Neurodegenerative Disease Database |
| 英文全称 | Gait in Neurodegenerative Disease Database(Gait Dynamics in Neuro-Degenerative Disease Data Base) |
| 别名/简称 | GaitND、gaitndd;社区文献中亦被称作 Gait in Aging and Related Disease / Gait in Aging and Disease |
| 疾病分类 | 帕金森病(ICD-11:8A00)/ 亨廷顿病(ICD-11:8A01.0)/ 肌萎缩侧索硬化(ICD-11:8B06.0) |
| SNOMED CT | 49049000 Parkinson’s disease / 58150001 Huntington’s disease / 86044000 Amyotrophic lateral sclerosis |
| 数据模态 | 鞋底力敏传感步态节奏信号(时序)+ 步行时间衍生指标 + 受试者临床元数据 |
| AI 任务类型 | 疾病 vs 健康对照分类、三种疾病间鉴别、步态变异性与分形动力学分析、步态时序建模、严重度预测 |
| 样本总数 | 64 名受试者(PD 15 / HD 20 / ALS 13 / 健康对照 16);后续研究切分出约 15,092 个步态样本 |
| 数据大小 | 约 17.9 MB(未压缩) |
| 数据格式 | .ts 文本时序 / .let、.rit 二进制足底信号 / .hea 头文件 / tab 分隔元数据 |
| 许可证 | Open Data Commons Attribution License v1.0(ODC-BY 1.0) |
| 访问级别 | 开放(无需注册、无需申请) |
| DUO 标签 | NRES(无限制使用) |
| 语言 | 英文 |
| 首发日期 | 2000-12-21(v1.0.0) |
| 最后更新 | 2000-12-21(唯一版本 1.0.0,此后未发布新版本) |
| 发布机构 | 贝斯以色列女执事医疗中心(哈佛医学院)Margret and H. A. Rey 非线性动力学医学实验室 & 特拉维夫苏拉斯基医疗中心(Jeffrey M. Hausdorff 团队) |
| 官方主页 | https://physionet.org/content/gaitndd/ |
| 下载地址 | https://physionet.org/content/gaitndd/1.0.0/ |
| DOI | 10.13026/C27G6C(数据集)/ 10.1152/jappl.2000.88.6.2045(原始论文) |
| 引用次数 | 393+(American Physiological Society 出版社统计,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐(3/5)— .ts 文本时序可直接读取、字段文档完整;扣分项:无官方数据划分、.let/.rit 二进制无公开解析文档、样本量小、严重度字段跨疾病异构 |
| 页面状态 | published |
§0 E-E-A-T 信任声明与免责声明
医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(ICD-11 与 SNOMED CT 映射、三种神经退行性疾病的临床任务定义、金标准描述)、§7 偏倚分析。
数据工程审核者:千方病案医学编辑部交叉审核:医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典(.ts 13 列衍生时序与元数据表)、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
审核日期:2026-09-05
审核方式:交叉审核
利益冲突声明:千方病案医数集与 Beth Israel Deaconess Medical Center、Tel Aviv Sourasky Medical Center、PhysioNet 无任何商业利益关联。本页面不销售数据集本身,仅提供 AI 就绪指南与学术信息服务。编辑者未接受上述机构的任何形式资助。
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。本数据集采用 ODC-BY 1.0 许可证在 PhysioNet 开放获取,使用时须注明数据来源与原始论文出处;本页面所述 DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 30 秒速览
这是什么? Gait in Neurodegenerative Disease Database(gaitndd)是 2000 年 12 月发布在 PhysioNet 上的开放步态数据库,收录了 64 名受试者走路时的「步态节奏」记录:15 名帕金森病患者、20 名亨廷顿病患者、13 名肌萎缩侧索硬化(ALS)患者和 16 名健康人。受试者鞋底垫上薄薄的力敏传感器、脚踝绑一台小型记录仪,以平常速度在 77 米走廊来回走 5 分钟,仪器自动记下每一次迈步的精确时间。
为什么重要? 这项研究的核心洞察是:步态的「节奏波动」携带神经系统健康信息——健康人的步幅间期看似随机,实则隐藏着分形式的长程相关结构;而帕金森病、亨廷顿病、ALS 等基底节与运动神经元疾病会系统性地破坏这种结构。该库的原始论文(Hausdorff et al., 2000)已积累 393+ 次引用(American Physiological Society 统计,截至 2026-09),是步态变异性与非线性动力学领域的奠基性数据源之一。
我能用它做什么? 典型用途包括:疾病 vs 健康的二分类与三病鉴别基准(文献中最高报告约 98% 四分类准确率)、步态变异性特征工程、去趋势波动分析(DFA)等非线性动力学教学与研究、可穿戴步态监测算法的早期验证。注意:样本量仅 64 例,适合经典机器学习与方法学研究,不适合从零训练深度网络。
§1.1 摘要
gaitndd 由 Hausdorff、Lertratanakul、Cudkowicz、Peterson、Kaliton 与 Goldberger 于 1990 年代在波士顿学术医疗中心完成采集(第一单位为 Beth Israel Deaconess Medical Center 的 Margret and H. A. Rey 非线性动力学医学实验室),2000 年 12 月 21 日以 1.0.0 版本发布于 PhysioNet 并沿用至今。采集协议高度统一:所有受试者鞋内置超薄力敏电阻(输出约正比于足底受力),踝戴微型计算机以 300 Hz 采样;受试者沿 77 米走廊以自选平常步速连续行走 5 分钟;步触地事件由自动算法从力信号中提取(该方法经与测力台金标准比对验证)。每例受试者产出 4 个文件:二进制左/右足底原始信号(.let/.rit)、文本头文件(.hea)与 13 列衍生时序(.ts),涵盖左/右步幅间期、摆动相、支撑相、双支撑的绝对秒数与占步幅百分比两套表达;另有 tab 分隔的 subject-description.txt 记录年龄、性别、身高、体重、步行速度与疾病严重度(PD 用 Hoen & Yahr 分级、HD 用总功能容量 TFC、ALS 用确诊后月数、健康对照以 0 占位)。全部数据以 ODC-BY 1.0 许可证开放,合计约 17.9 MB,是物理量纲清晰、结构极简但科研密度很高的经典小型时序库。
§1.2 战略价值
维度一:非线性动力学研究的「果蝇级」标准样本。 步态时序是复杂性科学进入临床生理学的代表性入口:健康人步幅间期的涨落并非白噪声,而具有分形自相似与长程相关性(Hausdorff et al., 1997 报告健康年轻人 DFA 标度指数 α 约 0.87,老年人与亨廷顿病患者显著降低)。gaitndd 把帕金森病、亨廷顿病、ALS 三种病因不同但均累及运动控制的疾病放进同一采集协议下,使「运动控制系统疾病如何改变时间结构」这一科学问题第一次拥有了可直接对比的公开数据。对 AI 研究者而言,它是检验时序特征(变异性、熵、DFA、小波、谱分析)临床意义的理想试验床。
维度二:小样本严谨方法的长期Benchmark。 64 例、四类、类间 13-20 例的规模,恰恰使 gaitndd 成为「小样本医疗时序方法论」的标准考题:文献中 all-train-all-test 与留一交叉验证(LOOCV)的性能差距可达 10 个百分点以上(同一 RBF 神经网络在 ALS 二分类上分别为 93.1% 与 89.66%,Klomsae et al., 2018),任何声称的高精度都必须经受受试者级划分的检验。对于教授数据泄漏、评估偏差、类别不平衡等医疗 AI 核心概念,它是最轻量、最容易复现的教学数据集——整个库不到 20 MB,一台笔记本数秒内即可完成全流程实验。
§1.3 同类数据集横向对比
| 数据集 | 规模 | 模态 | 标注 | 与 gaitndd 的差异化 |
|---|---|---|---|---|
| gaitndd(本条目) | 64 例(PD 15/HD 20/ALS 13/对照 16) | 鞋内力敏电阻,300 Hz,13 列衍生时序 | 4 类疾病标签 + 跨病异构严重度 | 唯一同时覆盖 PD/HD/ALS 三病的步态节奏库,含分形动力学研究渊源 |
| gaitdb(Gait in Aging and Disease Database) | 15 例(年轻 5/老年 5/PD 5) | 同类力敏鞋垫,300 Hz | 3 组年龄/疾病标签 | 官方声明为教学用途 mini-collection,明确不建议用于研究发表;胜在含健康年轻与老年对照 |
| Gait in Parkinson’s Disease(gaitpdb) | 93 例 PD + 73 例对照 | 8 只足底传感器 vGRF,100 Hz | PD vs 对照 + ID | 规模约为 gaitndd 的 2.6 倍,原始垂直地面反作用力更利于深度学习;但仅覆盖 PD |
| Gait Maturation Database | 50 名儿童(40-163 月龄) | 同类力敏鞋垫 | 年龄连续变量 | 研究步态发育而非疾病,可与 gaitndd 组成「发育-衰老-疾病」全生命周期叙事 |
| Long-term Recordings of Gait Dynamics | 10 名年轻人 | 便携记录仪 | 健康人长时程 | 数天连续记录,适合研究长时程步态动力学,无疾病标签 |
§1.4 版本时间轴
| 版本 | 发布日期 | 状态 | 说明 |
|---|---|---|---|
| 1.0.0 | 2000-12-21 | 当前唯一版本 | 首发即终版;文件于 2012-11、2019-02 有页面与校验和层面的整理(SHA256SUMS 更新),数据内容未变 |
§1.5 典型应用场景
- 神经退行性疾病步态分类基准:以 13 列衍生指标或原始 stride 序列为输入,构建 PD/HD/ALS vs 健康对照的二分类与四分类模型,文献基准覆盖 SVM、随机森林、模糊 KNN 到神经网络。
- 步态变异性与跌倒风险方法学研究:以步幅间期标准差、变异系数(CV)、双支撑占比等特征研究运动控制的稳定性度量——原始论文指出健康成人 stride-to-stride 波动幅度约为 2%(CV)。
- 非线性动力学教学:数据量小、物理意义清晰,是讲解去趋势波动分析(DFA)、多尺度熵、分形标度的理想教学库;同族 gaitdb 页面甚至配套了交互式 mini-tutorial。
- 可穿戴步态监测算法的早期验证:鞋内力敏电阻 + 踝戴记录仪是现代可穿戴步态仪的直系祖先,该库可用于验证从力信号到步态参数的提取算法。
- 疾病间鉴别与运动控制机制研究:PD(基底节多巴胺通路)、HD(纹状体变性)、ALS(上下运动神经元变性)三种病理如何映射到不同的步态时序特征,是计算神经科学的经典问题。
§2 医学背景
§2.1 疾病与标签 ICD-11 编码表
gaitndd 的「标签」本质是受试者所属疾病组(文件名前缀 hunt/park/als/control),三种疾病均属 ICD-11 神经系统疾病章节(第 08 章)的运动障碍与神经肌肉病区块:
| 标签组 | 疾病中文名 | ICD-11 编码 | ICD-11 名称 | 所属区块 |
|---|---|---|---|---|
| park | 帕金森病 | 8A00 | Parkinson’s disease | 运动障碍病(锥体外系) |
| hunt | 亨廷顿病 | 8A01.0 | Huntington’s disease | 运动障碍病(锥体外系) |
| als | 肌萎缩侧索硬化 | 8B06.0 | Amyotrophic lateral sclerosis | 神经肌肉病(运动神经元病) |
| control | 健康对照 | 无(健康状态不编码) | — | — |
§2.1b SNOMED CT 映射表
| 标签组 | ICD-11 | SNOMED CT 码 | SNOMED 术语 |
|---|---|---|---|
| park | 8A00 | 49049000 | Parkinson’s disease(disorder) |
| hunt | 8A01.0 | 58150001 | Huntington’s disease(disorder) |
| als | 8B06.0 | 86044000 | Amyotrophic lateral sclerosis(disorder) |
| control | — | 无对应诊断码 | 正常受试者以 severity=0 占位标识 |
§2.2 疾病简介与流行病学
帕金森病(PD):最常见的锥体外系运动障碍病之一,病理特征为黑质多巴胺能神经元进行性丢失与 α-突触核蛋白路易小体沉积,临床以静止性震颤、肌强直、运动迟缓与姿势步态异常「四主征」为特点。步态层面典型表现为小碎步、慌张步态、起步犹豫与冻结,步幅间期变异性随病情进展增大。数据集中 PD 严重度以 Hoen & Yahr 分级(页面写作 Hohn and Yahr,即临床通称 Hoehn & Yahr)记录,分数越高病情越重。
亨廷顿病(HD):常染色体显性遗传的纹状体变性病,以舞蹈样不自主运动、认知衰退与精神症状三联征为特征。不自主运动使步态节奏的时间组织显著紊乱;数据集中严重度以总功能容量(Total Functional Capacity, TFC,UHDRS 量表组分)记录,分数越低功能损害越重——注意与 PD 的方向相反。
肌萎缩侧索硬化(ALS):累及上、下运动神经元的进行性变性病,导致肌无力、痉挛与最终呼吸衰竭。原始论文假设运动神经元丢失会破坏步态节奏的稳定性,并证实 ALS 患者步态「较不稳定、时间组织更紊乱」;数据集中以确诊后月数(病程)作为严重度/时程指标。
健康对照:16 名无神经肌肉、呼吸或心血管疾病史的成年人,与患者采用完全相同的采集协议,构成所有组间比较的基线。
§2.3 临床任务定义
| 临床任务 | 在本数据集中的形态 | 输入 → 输出 |
|---|---|---|
| 筛查(辅助识别) | 步态节奏异常检测:区分神经退行性疾病患者与健康人 | stride 时序/衍生特征 → 疾病 vs 对照二分类 |
| 鉴别诊断支持 | 三种运动控制系统疾病的步态动力学指纹比较 | stride 时序 → PD/HD/ALS 三分类或四分类 |
| 分级(严重度量化) | 以 Hoen & Yahr、TFC、病程月数分别量化三病严重程度 | 步态特征 → 严重度回归/分组(跨病不可比,见 §6.5 坑点 4) |
| 预后与监测 | 步态动力学标志物随病程变化的纵向监测潜力(原始论文提出的研究方向) | 序列步态特征 → 进展轨迹建模(本库单时点,仅供方法开发) |
§2.4 患者人群表
| 维度 | 说明 |
|---|---|
| 来源 | 波士顿学术医疗中心(Beth Israel Deaconess Medical Center、Massachusetts General Hospital)招募的门诊患者与健康志愿者 |
| 时间 | 1990 年代采集(配套论文发表于 1996-2000 年) |
| 年龄 | 覆盖成年至高龄;PubMed 收录的原始论文 MeSH 关键词含 Adult、Middle Aged、Aged、Aged 80 and over,提示样本含高龄受试者;逐例年龄见 subject-description.txt |
| 性别 | 男性与女性均纳入(逐例性别见元数据表) |
| 种族 | 数据集文档未提供种族字段 |
| 就医类型 | 神经科门诊患者与健康社区志愿者,全部为可在走廊连续行走 5 分钟的活动能力保留者 |
§2.5 临床价值
gaitndd 的临床价值在于把「步态节奏」确立为可量化的运动控制标志物:原始论文证明步态动力学指标(波动幅度 + 涨落动力学)能够区分病理类型并可能用于定量监测疾病进展与疗效评估。对运动障碍病而言,与传统临床量表相比,步态时序具有客观、可重复、可远程采集的潜在优势;对现代数字生物标志物(digital biomarker)研究而言,该库提供了最早的病种-步态特征对照数据之一。其局限同样具有临床启示意义:自选步速未标准化、单次 5 分钟记录、样本量小,均提示从研究标志物到临床工具还需更大规模、多中心的纵向验证。
§2.6 金标准表
| 维度 | 描述 |
|---|---|
| 划分方式 | 疾病组标签由临床诊断确定(PD/HD/ALS 按神经科临床标准入组),健康对照经病史筛查排除神经肌肉、呼吸与心血管疾病 |
| 标注方式 | 全自动:步触地事件由自动算法从鞋底力敏电阻信号中提取;每步的步幅间期、摆动/支撑/双支撑相时长自动计算为 13 列衍生时序 |
| 标注者 | 自动提取算法(无人工逐帧标注);临床诊断与严重度评分由神经科医师在入组时评定 |
| 标注性质 | 衍生时序为连续数值型「软标注」;疾病标签为文件名级分组标签;严重度为跨病异构的序数量表(详见 §6.5 坑点 4) |
| 算法验证 | 同族库 gaitdb 文档明示:该步触地自动检测方法为既往已验证方法的改良版,与测力台(force-platform)金标准测量一致 |
§3 数据集规格
§3.0 版本与同族数据集抉择矩阵
gaitndd 自 2000-12-21 起仅有 1.0.0 一个版本,不存在多版本选择问题。实际使用中更常见的抉择是「PhysioNet 同族步态库选哪个」,决策矩阵如下:
| 你的需求 | 推荐数据集 | 大小 | 理由 |
|---|---|---|---|
| PD/HD/ALS 三病鉴别或四分类基准 | gaitndd | 17.9 MB | 唯一同时覆盖三种神经退行性疾病的步态节奏库 |
| 帕金森病专用、较大样本、原始力信号做深度学习 | gaitpdb | 更大(166 例 vGRF) | 93 PD + 73 对照,100 Hz 原始垂直地面反作用力 |
| 教学/课堂演示步态时序与分形概念 | gaitdb | 354.6 KB | 官方定位教学资源,含年轻/老年/PD 三组对照叙事 |
| 步态发育(儿童)研究 | Gait Maturation Database | 小 | 50 名儿童 40-163 月龄连续年龄变量 |
| 长时程健康人步态动力学 | Long-term Recordings of Gait Dynamics | 小 | 10 名年轻人连续数天记录 |
§3.1 模态详情
gaitndd 是单模态生理时序库,核心模态为鞋底力敏传感步态节奏信号,由三个层次构成:
- 原始力信号层(.let/.rit):鞋内置超薄力敏电阻(force-sensitive resistor),输出约正比于足底受力;左/右脚各一路模拟信号经踝戴微型计算机以 300 Hz 采样后存储为二进制文件。这是信号最完整的层次,但官方文档未公开其字节布局。
- 衍生时序层(.ts,推荐使用):从力信号自动检测每次足跟触地事件后计算的时间序列——每行一个 stride 事件,13 列涵盖左/右步幅间期(stride interval)、摆动相(swing)、支撑相(stance)与双支撑相(double support)的绝对秒数与占步幅百分比。官方明示这些时序未经滤波。
- 元数据层(subject-description.txt):tab 分隔的受试者级表格,含年龄、性别、身高、体重、步行速度与疾病严重度(详见 §4.1)。
§3.2 按子集样本数表
| 子集(文件前缀) | 受试者数 | 疾病 | 严重度/病程字段 | 每例文件数 |
|---|---|---|---|---|
| control | 16 | 健康对照 | 占位 0 | 4 |
| hunt | 20 | 亨廷顿病 | TFC(越低越重) | 4 |
| park | 15 | 帕金森病 | Hoen & Yahr 分级(越高越重) | 4 |
| als | 13 | 肌萎缩侧索硬化 | 确诊后月数 | 4 |
| 合计 | 64 | — | — | 256 个记录文件 |
§3.3 数据格式表
| 文件类型 | 格式 | 内容 | 读取建议 |
|---|---|---|---|
| .ts | 纯文本,13 列数值 | 衍生步态时序(每行一个 stride) | pandas 按空白分隔直接读 |
| .hea | 纯文本 | 记录头(信号说明) | 文本编辑器/手动解析 |
| .let | 二进制 | 左脚力敏电阻原始信号 | 无公开字节布局文档,不建议解析(见 §6.5 坑点 1) |
| .rit | 二进制 | 右脚力敏电阻原始信号 | 同上 |
| subject-description.txt | tab 分隔文本 | 受试者级临床元数据 | pandas.read_csv(sep=‘\t’) |
| RECORDS / SHA256SUMS.txt | 纯文本 | 记录清单与校验和 | 下载完整性校验 |
§3.4 存储大小
- 未压缩总大小:约 17.9 MB;PhysioNet ZIP 包同为 17.9 MB。
- 单例 4 个文件合计约 280 KB:.let/.rit 各约 132 KB(二进制),.ts 约 10-21 KB(文本),.hea 约 115 B。
- 磁盘规划建议:预留 200 MB(数据 + 解压副本 + 派生特征)即可完成绝大多数实验;无 GPU 需求。
§3.5 标注方式
- 信号级(自动):足跟触地事件检测与 13 列时序计算全部由自动算法完成,无人工逐帧修正;算法为既往已验证方法(与测力台金标准一致)的改良版。
- 受试者级(临床):疾病诊断标签由临床入组标准确定;严重度由神经科量表评定(PD:Hoen & Yahr;HD:TFC;ALS:确诊月数);对照以 0 占位。
- 弱监督性质:本库没有「每个 stride 一个疾病标签」的细粒度标注——标签挂在受试者层,时序通过文件名前缀间接获得标签。
§3.6 标注者资质与一致性
- 信号提取:自动算法,一致性由算法确定性保证(无标注者间变异);与测力台金标准的一致性见 §2.6。
- 临床诊断:由波士顿学术医疗中心神经科医师完成入组诊断(论文作者团队含运动障碍病与 ALS 领域专家,Cudkowicz 为 MGH 神经科 ALS 项目专家);官方未公布量表评定者间一致性系数,该信息不可得。
§3.7 采集周期
- 单例采集:单次实验,走廊行走 5 分钟(自选平常步速,77 米走廊往返)。
- 数据集整体:1990 年代采集,跨越多个研究项目(配套论文发表于 1996、1997、1998、2000 年);逐例采集日期未提供。
- 发布:2000-12-21 于 PhysioNet 首发,此后无数据内容更新。
§3.8 地域覆盖
全部受试者在美国马萨诸塞州波士顿都会区招募(Beth Israel Deaconess Medical Center 与 Massachusetts General Hospital 体系)。单一城市、单一医疗体系、单一国家样本,外推到其他人群时须谨慎(见 §7.1)。
§3.9 设备规格
| 组件 | 规格 |
|---|---|
| 传感器 | 超薄力敏电阻(force-sensitive resistor),置于鞋内,输出约正比于足底受力 |
| 采集主机 | 踝戴式微型计算机(ambulatory ankle-worn microcomputer),同步完成模数转换与存储 |
| 采样率 | 300 Hz |
| 量化 | 12 位 A/D(同族 gaitdb 文档描述的同一套系统) |
| 步态事件提取 | 自动足跟触地检测算法(改良版已验证方法),输出步触地时间与 13 列衍生时序 |
§3.10 深度溯源链
| 环节 | 主体 | 说明 |
|---|---|---|
| 设计与采集 | Hausdorff JM、Lertratanakul A、Cudkowicz ME、Peterson AL、Kaliton D、Goldberger AL | Rey 非线性动力学医学实验室(BIDMC)与 MGH 合作 |
| 物理传感 | 鞋内力敏电阻 + 踝戴记录仪 | 300 Hz 采样 |
| 信号处理 | 自动步触地检测算法 | 输出 .let/.rit(原始)与 .ts(衍生),未滤波 |
| 临床评定 | 神经科医师 | 诊断 + Hoen & Yahr / TFC / 病程月数 |
| 整理发布 | PhysioNet(MIT 体系) | 2000-12-21,ODC-BY 1.0,DOI 10.13026/C27G6C |
| 原始论文 | Hausdorff et al., J Appl Physiol 88(6):2045-2053, 2000 | 使用数据时必须引用 |
§4 数据结构
§4.0 目录树
gaitndd/1.0.0/
├── RECORDS # 64 条记录名清单
├── SHA256SUMS.txt # 全部文件校验和
├── subject-description.txt # 受试者级元数据(tab 分隔)
├── control 组(扁平命名,前缀即标签)
│ ├── control1.hea # 头文件(文本)
│ ├── control1.let # 左脚原始信号(二进制)
│ ├── control1.rit # 右脚原始信号(二进制)
│ ├── control1.ts # 13 列衍生时序(文本)★主用
│ └── ...(共 16 例 × 4 文件)
├── hunt 组
│ ├── hunt1.hea / hunt1.let / hunt1.rit / hunt1.ts
│ └── ...(共 20 例 × 4 文件)
├── park 组
│ ├── park1.hea / park1.let / park1.rit / park1.ts
│ └── ...(共 15 例 × 4 文件)
└── als 组
├── als1.hea / als1.let / als1.rit / als1.ts
└── ...(共 13 例 × 4 文件)
注:PhysioNet 采用扁平命名(control1.ts、hunt1.ts 等直接位于根目录),上文「组」仅为阅读便利的逻辑划分;文件名前缀即疾病标签。
§4.1 DAIMS 字段字典
.ts 衍生时序(每行一个 stride 事件,13 列,核心 10 行):
| 字段(列序) | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| col1 Elapsed Time | float | 记录开始后经过的秒数 | 12.34 | 时间轴、采样窗口切分 | 步触地检测精度内 | 无 | 单调递增,0 至约 300 |
| col2 Left Stride Interval (s) | float | 左脚相邻两次足跟触地间隔 | 1.08 | 核心分析对象:变异性/DFA/分类 | 检测误差±数 ms | 无 | 约 0.6-2.0 s |
| col3 Right Stride Interval (s) | float | 右脚步幅间期 | 1.10 | 同上;左右对称性分析 | 同上 | 无 | 约 0.6-2.0 s |
| col4/5 Left/Right Swing Interval (s) | float | 摆动相时长(秒) | 0.38 | 步态相位结构特征 | 同上 | 无 | 约 0.2-0.6 s |
| col6/7 Left/Right Swing Interval (% of stride) | float | 摆动相占步幅百分比 | 35.2 | 归一化相位特征(与秒列冗余) | 同上 | 无 | 约 20-45 % |
| col8/9 Left/Right Stance Interval (s) | float | 支撑相时长(秒) | 0.70 | 支撑控制稳定性 | 同上 | 无 | 约 0.4-1.5 s |
| col10/11 Left/Right Stance Interval (% of stride) | float | 支撑相占步幅百分比 | 64.8 | 归一化相位特征(与秒列冗余) | 同上 | 无 | 约 55-80 % |
| col12/13 Double Support Interval (s 与 %) | float | 双支撑相时长(秒与百分比) | 0.20 / 18.5 | 双支撑占比与年龄/疾病相关,跌倒研究常用 | 同上 | 无 | 约 5-35 % |
subject-description.txt(每行一个受试者):
| 字段 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| subject | text | 记录名 = 组前缀 + ID | hunt7 | 主键、分组 | 无 | 无 | control1-16/hunt1-20/park1-15/als1-13 |
| age | int | 年龄(岁) | 62 | 协变量、年龄匹配 | 自报/登记误差 | 无 | 成年至 80+ |
| gender | text | 性别 | M / F | 协变量、公平性分析 | 无 | 无 | M/F |
| height / weight | float | 身高 /体重 | 1.70 / 70 | BMI 计算、体格协变量 | 测量误差 | 无 | 常规成人体格范围 |
| walking speed | float | 自选步速(m/s) | 1.12 | 关键混杂协变量(见坑点 7) | 平均速度估计 | 无 | 约 0.5-1.8 m/s |
| severity/duration | float | PD:Hoen & Yahr;HD:TFC;ALS:确诊月数;对照:0 | 2.5 | 严重度建模(跨病异构!见坑点 4) | 量表评定误差 | 0 = 对照占位(非缺失) | 组内量表范围 |
§4.2 标签分布
| 组 | 受试者数 | 占比 | 严重度字段语义 |
|---|---|---|---|
| hunt(亨廷顿病) | 20 | 31.3% | TFC,越低越重 |
| control(健康对照) | 16 | 25.0% | 0 占位 |
| park(帕金森病) | 15 | 23.4% | Hoen & Yahr,越高越重 |
| als(肌萎缩侧索硬化) | 13 | 20.3% | 确诊后月数 |
| 合计 | 64 | 100% | 三套互不可比的量表 |
类别分布总体均衡(最大/最小类比约 1.54),无需重采样即可做四分类;但若做「疾病 vs 对照」二分类再细分,对照组仅 16 例,评估方差较大。
§4.3 关键统计
- 记录总数:64 例 × 4 文件 = 256 个记录文件;.ts 每例约 250-500 行 stride 事件(5 分钟步行、步幅间期约 1 秒的合理推算量级)。
- 衍生样本量:后续深度学习研究从全部 .ts 中切分出约 15,092 个步态样本(Ertugrul et al. 2022 相关研究 的统计口径)。
- 健康成人 stride-to-stride 波动幅度约 2%(CV,原始论文);步幅间期均值约 1 秒量级,5 分钟约 250-300 个 stride。
- 数据物理量纲清晰:全部时间列以秒或占步幅百分比表示,可直接做跨受试者比较,无需单位换算。
§4.4 数据层级
受试者(64) subject-description.txt 一行
└── 记录(64) hunt7 / park3 / als12 / control5 …
└── 文件四件套(×4) .hea + .let + .rit + .ts
└── stride 事件(约 250-500/例) .ts 每行
└── 相位区间(13 列) stride / swing / stance / double support
关键点:分析的最小独立单元是受试者,不是 stride 行。同一受试者的相邻 stride 高度自相关,任何把行当独立样本的划分都会泄漏(§5.3、§6.5 坑点 3)。
§4.5 缺失值与信息性缺失
| 情形 | 表现 | 处理建议 |
|---|---|---|
| 官方缺失值编码 | 未定义(.ts 无 NaN 约定) | 读入后自行检查 NaN/inf;官方未保证逐列无缺失 |
| 对照组严重度 | 固定为 0 | 信息性占位而非缺失:直接当数值参与回归会把「健康」编码为最小严重度,需按组哑变量化(坑点 4) |
| 首尾 stride 伪影 | 时序未滤波,首步与转身处可现异常值 | 计算 CV/DFA 前 trim 首尾若干点(坑点 2) |
| 元数据字段完整性 | 官方列出 age/gender/height/weight/speed/severity 六字段 | 个别字段可能缺省,逐列核对后再用 |
| 二进制文件布局 | .let/.rit 字节序与量化格式未公开 | 不解析,以 .ts 为主(坑点 1) |
§5 数据划分与使用建议
§5.1 官方划分
无。官方文档未提供任何训练/验证/测试划分,也未提供划分脚本。这是 AI 就绪度扣分的主因之一(INFOBOX ⭐⭐⭐)。
§5.2 社区惯例划分
文献中的三种主要做法,可靠性递增:
| 惯例 | 做法 | 文献表现 | 评价 |
|---|---|---|---|
| all-train-all-test | 全数据训练后回代 | RBF 网络 ALS/HD/PD 二分类达 93.1-100% | 严重乐观偏置,仅作参考上限 |
| 留一交叉验证(LOOCV) | 每轮留出 1 例(受试者级) | 同一模型降至 83.33-89.66% | 小样本下的公平默认选择 |
| 随机划分 + 重复 | 分层随机受试者级划分 × N 次 | Klomsae 2018 报告 96-98% ± 3-7% | 需报告均值±标准差 |
⚠️ 注意:部分深度学习文献把 15,092 个「样本」当作独立单元随机划分,这在方法学上等同于 all-train-all-test 式泄漏(同一受试者的相邻 stride 同时出现在训练与测试集),其数字不可与受试者级划分的结果混排比较。
§5.3 泄漏风险(重点)
- 受试者内 stride 自相关:相邻 stride 间期实质上由同一运动状态生成,逐行随机划分使测试集信息在训练集中近乎完全暴露。解决:所有划分以受试者为单位(GroupShuffleSplit / LOOCV,group = 受试者 ID)。
- 跨受试者特征标准化泄漏:在全部数据上计算均值/方差再标准化,会把测试受试者的分布信息带入训练。解决:标准化统计量只在训练折内计算。
- 特征选择的隐藏泄漏:先用全部数据做特征重要性排序再交叉验证,等于把未来信息注入每折。解决:特征选择包进 CV 循环内部(pipeline 化)。
- 元数据间接泄漏:步行速度与疾病状态强相关,把 speed 当特征会人为抬高准确率且临床无意义(疾病导致慢速)。建议:主实验剔除 speed,或单列「含/不含 speed」两组结果。
§5.4 划分策略建议
- 默认协议(小样本公平基准):受试者级分层 LOOCV(分层:按组保证每折类比例稳定),报告准确率、平衡准确率、宏 F1 与混淆矩阵。
- 进阶协议(评估方差):受试者级分层 5 折重复 10 次(不同随机种子),报告均值 ± 标准差,避免单次划分的偶然性。
- 深度学习协议:若必须做端到端模型,固定一个受试者级 60/20/20 划分并公开随机种子;数据增强只用 §6.6 列出的安全项;结果必须标注「64 例小样本,解释谨慎」。
§5.5 交叉验证建议
LOOCV 是 n=64 时的无偏默认(训练集每轮 63 例),但方差高;折衷方案为分层 5 折交叉验证(每轮留约 13 例)。两协议的数字不可直接混排。所有 CV 必须以受试者为 group;同一受试者的 4 个文件天然同组,无需额外对齐。
§5.6 外部验证建议
- 首选同源外部集:gaitpdb(PD 93 + 对照 73,vGRF 模态不同需特征层对齐:从 vGRF 重提 stride 事件后计算同名衍生指标)。
- 同协议外部队列:检索使用相同「力敏鞋垫 + 走廊行走」协议的后续 footswitch 数据(如 TaiChi-Gait,注意其含双任务条件)。
- 若无外部数据:至少做「留一疾病组外推」(训练时排除一组,测试该组),评估模型对未见病理的泛化边界——文献中 PD vs HD 二分类明显难于疾病 vs 对照(K-NN 最高约 83%),提示疾病间外推是真正的难点。
§6 AI 就绪指南
§6.0 云端快速启动
数据仅 17.9 MB,任何环境数秒可用;PhysioNet 提供免登录 AWS 开放镜像:
# 方式一:AWS 开放数据镜像(无需账号、无需签名)
aws s3 sync --no-sign-request s3://physionet-open/gaitndd/1.0.0/ ./data/gaitndd/
# 方式二:wget 递归下载(约 17.9 MB)
wget -r -N -c -np https://physionet.org/files/gaitndd/1.0.0/ -P ./data/gaitndd/
Colab/Kaggle 均可零配置运行本文全部代码;无需 GPU,CPU 即可。
§6.1 快速上手
# ─── 目录结构预期 ─────────────────────────────────────────────
# data/gaitndd/
# ├── als1.ts ... als13.ts (13 例)
# ├── control1.ts ... control16.ts(16 例)
# ├── hunt1.ts ... hunt20.ts (20 例)
# ├── park1.ts ... park15.ts (15 例)
# └── subject-description.txt (tab 分隔元数据)
# data_root 与文件名的拼接关系:data_root / f"{record}.ts"
# 最小可用子集:仅 *.ts(文本)即可完成本节全部代码;.let/.rit 不需要
# ─────────────────────────────────────────────────────────────
import pandas as pd
from pathlib import Path
DATA_ROOT = Path("data/gaitndd")
TS_COLS = [
"elapsed_time",
"left_stride", "right_stride",
"left_swing_s", "right_swing_s",
"left_swing_pct", "right_swing_pct",
"left_stance_s", "right_stance_s",
"left_stance_pct", "right_stance_pct",
"double_support_s", "double_support_pct",
]
def load_one(record: str) -> pd.DataFrame:
"""读取单例 .ts:空白分隔、无表头、13 列。"""
df = pd.read_csv(DATA_ROOT / f"{record}.ts", sep=r"\s+", header=None, names=TS_COLS)
df["record"] = record
df["group"] = "".join(c for c in record if c.isalpha()) # als/control/hunt/park
return df
records = sorted(
p.stem for p in DATA_ROOT.glob("*.ts")
)
all_ts = pd.concat([load_one(r) for r in records], ignore_index=True)
print(all_ts.groupby("group")["record"].nunique()) # 应输出 13/16/20/15
print(all_ts.groupby("group")["left_stride"].agg(["mean", "std"]))
§6.2 数据获取
| 项目 | 内容 |
|---|---|
| 官方主页 | https://physionet.org/content/gaitndd/ |
| 版本页 | https://physionet.org/content/gaitndd/1.0.0/ |
| ZIP 直下 | ZIP 约 17.9 MB(版本页一键下载) |
| 命令行 1 | wget -r -N -c -np https://physionet.org/files/gaitndd/1.0.0/ |
| 命令行 2 | aws s3 sync --no-sign-request s3://physionet-open/gaitndd/1.0.0/ DEST |
| 申请流程 | 无——开放访问(ODC-BY 1.0),无需注册、无需 DUA |
| 校验 | 下载后核对 SHA256SUMS.txt |
# 完整获取 + 完整性校验
aws s3 sync --no-sign-request s3://physionet-open/gaitndd/1.0.0/ ./data/gaitndd/
cd ./data/gaitndd && sha256sum -c SHA256SUMS.txt | grep -v ': OK$' || echo "ALL OK"
§6.3 预处理全流程
import numpy as np
import pandas as pd
from pathlib import Path
DATA_ROOT = Path("data/gaitndd")
# ── 步骤 0:读取元数据并生成受试者级总表 ──────────────────────
meta = pd.read_csv(DATA_ROOT / "subject-description.txt", sep="\t")
meta.columns = [c.strip().lower().replace(" ", "_") for c in meta.columns]
meta["group"] = meta["subject"].str.extract(r"([a-z]+)")[0]
# ⚠ severity 字段跨疾病异构(PD: Hoen&Yahr / HD: TFC / ALS: 月数 / 对照: 0)
# 不做统一数值化;分组内使用,或仅作哑变量/组内序数(见坑点 4)
# ── 步骤 1:格式转换(.ts 文本 → 长表)────────────────────────
TS_COLS = ["elapsed_time", "left_stride", "right_stride",
"left_swing_s", "right_swing_s", "left_swing_pct", "right_swing_pct",
"left_stance_s", "right_stance_s", "left_stance_pct", "right_stance_pct",
"double_support_s", "double_support_pct"]
def load_one(record: str) -> pd.DataFrame:
df = pd.read_csv(DATA_ROOT / f"{record}.ts", sep=r"\s+", header=None, names=TS_COLS)
df["record"] = record
return df
long_df = pd.concat([load_one(p.stem) for p in DATA_ROOT.glob("*.ts")], ignore_index=True)
# ── 步骤 2:清洗(时序未滤波!先修数再提特征)─────────────────
def clean_group(g: pd.DataFrame, trim: int = 2) -> pd.DataFrame:
g = g.sort_values("elapsed_time")
g = g.iloc[trim:-trim] # trim 首尾伪影(坑点 2)
q_lo, q_hi = g["left_stride"].quantile([0.005, 0.995])
g = g[(g["left_stride"] >= q_lo) & (g["left_stride"] <= q_hi)] # 极端离群 stride
return g
clean_df = long_df.groupby("record", group_keys=False).apply(clean_group)
# ── 步骤 3:受试者级特征提取(防泄漏单元 = 受试者)────────────
def features_one(g: pd.DataFrame) -> dict:
f = {"record": g["record"].iloc[0]}
for col in ["left_stride", "right_stride", "double_support_pct"]:
f[f"{col}_mean"] = g[col].mean()
f[f"{col}_sd"] = g[col].std(ddof=1)
f[f"{col}_cv"] = f[f"{col}_sd"] / f[f"{col}_mean"] # 变异系数
f["stride_asym"] = abs(g["left_stride"].mean() - g["right_stride"].mean())
return f
feat = pd.DataFrame([
features_one(g) for _, g in clean_df.groupby("record")
])
# ── 步骤 4:标准化(折内!此处仅演示单次划分写法)─────────────
from sklearn.preprocessing import StandardScaler
FEATURES = [c for c in feat.columns if c != "record"]
feat[FEATURES] = StandardScaler().fit_transform(feat[FEATURES]) # 严格做法见坑点 3
要点回顾:清洗(trim + 离群剔除)→ 受试者级特征 → 折内标准化。DFA/熵等非线性特征可在 features_one 中扩展(如 nolds.dfa)。
非线性特征扩展(本库的研究渊源所在——分形动力学正是原始论文的分析核心):
# 非线性动力学特征:DFA 标度指数 α 与样本熵
# pip install nolds (DFA 参考实现;窗口 4-16 步为 stride 时序惯例范围)
import nolds
def nonlinear_features(g: pd.DataFrame) -> dict:
seq = g.sort_values("elapsed_time")["left_stride"].to_numpy(dtype=float)
seq = seq[2:-2] # 与 §6.3 主流程一致的 trim
seq = seq[(seq > 0.4) & (seq < 2.5)] # 物理范围截断
out = {"record": g["record"].iloc[0]}
try:
out["dfa_alpha"] = nolds.dfa(seq, fit_trend="poly", order=1) # 标度指数 α
except ValueError:
out["dfa_alpha"] = np.nan # 步数过少时放弃该例
out["sampen"] = nolds.sampen(seq, emb_dim=2) # 样本熵(复杂度)
return out
nl_feat = pd.DataFrame([
nonlinear_features(g) for _, g in long_df.groupby("record")
])
# 文献参照(Hausdorff 1997):健康年轻人 α≈0.87,老年人≈0.68,HD≈0.60
# 在本库中复算 α 并按组统计,是验证清洗方案是否保真分形结构的快速自检。
print(nl_feat.groupby(nl_feat["record"].str.extract(r"([a-z]+)")[0])["dfa_alpha"].mean())
§6.4 PyTorch DataLoader 完整代码
# 以「原始 stride 序列 → 深度模型」为例:变长时序 pad 成批
# 数据层级:受试者 = 1 个样本;每个样本 = 左脚步幅间期一维序列
import numpy as np
import pandas as pd
import torch
from torch.utils.data import Dataset, DataLoader
from pathlib import Path
DATA_ROOT = Path("data/gaitndd")
LABEL_MAP = {"control": 0, "park": 1, "hunt": 2, "als": 3}
MAX_LEN = 300 # 5 分钟 × 约 1 Hz stride ≈ 250-300 步
class GaitNDDDataset(Dataset):
"""每个样本 = 一名受试者的左脚步幅间期序列 + 疾病标签。
划分必须是受试者级:train_records 与 test_records 来自 §6.5 坑点 3 的 GroupSplit。"""
def __init__(self, records, data_root=DATA_ROOT, max_len=MAX_LEN):
self.records, self.data_root, self.max_len = records, Path(data_root), max_len
def __len__(self):
return len(self.records)
def __getitem__(self, idx):
rec = self.records[idx]
ts = pd.read_csv(self.data_root / f"{rec}.ts", sep=r"\s+", header=None)
seq = ts.iloc[2:-2, 1].to_numpy(dtype=np.float32) # col2 左步幅间期,trim 首尾
seq = np.clip(seq, 0.4, 2.5) # 物理范围截断
seq = (seq - 1.0) / 0.3 # 粗标准化(统计量固定,无泄漏)
x = torch.zeros(self.max_len, dtype=torch.float32)
m = torch.zeros(self.max_len, dtype=torch.float32)
n = min(len(seq), self.max_len)
x[:n] = torch.from_numpy(seq[:n]); m[:n] = 1.0
y = LABEL_MAP["".join(c for c in rec if c.isalpha())]
return x, m, y
def collate(batch):
xs, ms, ys = zip(*batch)
return torch.stack(xs), torch.stack(ms), torch.tensor(ys)
# ── 受试者级划分示例(严禁逐行随机划分,见坑点 3)────────────
all_records = sorted(p.stem for p in DATA_ROOT.glob("*.ts"))
rng = np.random.default_rng(42)
train_recs = list(rng.choice(all_records, size=int(len(all_records) * 0.8), replace=False))
test_recs = [r for r in all_records if r not in train_recs]
train_loader = DataLoader(GaitNDDDataset(train_recs), batch_size=8,
shuffle=True, collate_fn=collate) # 8 ≈ 每批一组
test_loader = DataLoader(GaitNDDDataset(test_recs), batch_size=8,
shuffle=False, collate_fn=collate)
for x, m, y in train_loader: # 冒烟测试
print(x.shape, m.mean(dim=1)[:3], y[:8]); break
配套的轻量序列模型(mask 感知双向 GRU + 均值池化,参数量刻意压小以适配 64 例):
import torch
import torch.nn as nn
class GaitClassifier(nn.Module):
"""输入:padding 后的 stride 序列 (B, MAX_LEN) + mask (B, MAX_LEN)。
结构刻意保守:GRU 一层 + 均值池化 + 两层 MLP。
小样本设计原则:参数 < 200K;dropout 强;不使用 BatchNorm(批内受试者混杂)。"""
def __init__(self, hidden: int = 48, n_classes: int = 4, p_drop: float = 0.5):
super().__init__()
self.rnn = nn.GRU(input_size=1, hidden_size=hidden,
num_layers=1, batch_first=True, bidirectional=True)
self.head = nn.Sequential(
nn.Dropout(p_drop),
nn.Linear(hidden * 2, 32), nn.ReLU(), nn.Dropout(p_drop),
nn.Linear(32, n_classes),
)
def forward(self, x: torch.Tensor, m: torch.Tensor) -> torch.Tensor:
h, _ = self.rnn(x.unsqueeze(-1)) # (B, T, 2H)
m3 = m.unsqueeze(-1)
pooled = (h * m3).sum(dim=1) / m3.sum(dim=1).clamp(min=1.0) # mask 均值池化
return self.head(pooled)
model = GaitClassifier()
out = model(x, m) # 复用上方 DataLoader 冒烟输出
print(out.shape) # torch.Size([8, 4])
训练要点:交叉熵 + 权重衰减(≥1e-3)、早停以平衡准确率为准、固定随机种子并把 train/test 受试者名单写入实验记录;受试者级划分协议见坑点 3。
§6.5 坑点 8 个
⚠️ 坑点 1:把 .let/.rit 当文本读或试图逆向解析(分类:工程陷阱)
问题:.let/.rit 是左/右脚力敏电阻的二进制原始信号,官方未公开字节布局(位宽、字节序、缩放系数均未记载)。新手按扩展名猜测格式或强行
np.fromfile会得到毫无意义的数值流。
症状:解析出的「信号」是锯齿状无结构噪声;直方图呈均匀分布而非足压的脉冲形态;或直接 UnicodeDecodeError。
解决:
- 简单方法:放弃二进制层,只用 .ts 衍生时序(13 列覆盖了 stride/swing/stance/double support 的完整时间结构),官方研究亦以此层为主。
- 进阶方法:如确需原始力波形(如做触地事件检测算法研究),用 .hea 头文件中的采样信息辅助试探性解析(常见组合为 16-bit 小端),并用「双支撑期两脚信号应同时高位」这一物理约束做格式假设的自检;假设不成立即回退方案 1。
- SOTA 方法:需要原始力信号做深度学习时,改用模态公开完整的 gaitpdb(100 Hz vGRF 文本),而非逆向工程 gaitndd。
参考:PhysioNet gaitndd 官方文件说明
⚠️ 坑点 2:对未滤波时序直接计算变异性指标(分类:预处理陷阱)
问题:官方明示 .ts 时序未经滤波。开步与转身段的 stride 间期偏离稳态(起步加速、廊道端点回转),个别受试者存在检测伪影,直接算 SD/CV/DFA 会把非稳态伪影混入「变异性」。
症状:CV、DFA α 等指标在不同 trim 策略下数值波动巨大;组间差异的方向随清洗参数翻转;复现文献数字困难。
解决:
- 简单方法:每例 trim 首尾各 1-2 个 stride,再按物理范围(如 0.4-2.5 s)截断。
- 进阶方法:分位数截断(0.5%-99.5%)+ 稳态性检查(滑动窗口均值漂移检验),并把清洗超参数固定写入 pipeline,杜绝逐例手调。
- SOTA 方法:参照非线性动力学文献的标准做法——只分析稳态段并做敏感性分析(trim 0/1/2/5 步各跑一遍,报告结论是否稳健);DFA 使用窗口 4 ≤ n ≤ 16 步并报告拟合质量。
参考:官方数据说明「time series have not been filtered」;Hausdorff et al., J Neuroeng Rehabil 2005(变异性方法学综述)
⚠️ 坑点 3:按 stride 行随机划分训练/测试集(分类:数据泄漏)
问题:深度学习文献常把库切分为约 15,092 个「样本」后逐行随机划分。同一受试者的相邻 stride 高度自相关且共享运动习惯,逐行划分等于把受试者指纹同时喂给训练集与测试集。
症状:测试准确率虚高(文献中 all-train-all-test 与 LOOCV 差距可达 10 个百分点:RBF 网络 ALS 二分类 93.1% vs 89.66%);换受试者部署后性能断崖下跌。
解决:
- 简单方法:所有划分以受试者为 group(
sklearn.model_selection.GroupShuffleSplit/LeaveOneGroupOut,group = 记录名)。- 进阶方法:分层受试者级重复 CV(每组比例固定,重复 10 次不同种子),报告均值 ± 标准差;标准化、特征选择全部包进 CV 内部。
- SOTA 方法:LOOCV(n=64 可承受)+ 完整 pipeline 化(
Pipeline中含清洗、特征、标准化),任何数据驱动步骤不得越过折边界。
参考:Klomsae et al., Comput Intell Neurosci 2018(同一模型两种划分的差距表)
⚠️ 坑点 4:把严重度字段当统一数值特征(分类:标签理解)
问题:subject-description 的 severity 列在四组中语义完全不同——PD 是 Hoen & Yahr(越高越重)、HD 是 TFC(越低越重)、ALS 是确诊后月数(越大病程越长)、对照固定为 0 占位。直接作为回归目标或数值特征会构造出「健康 = 最轻、HD 的 13 分 = 比 5 分更重」这类伪关系。
症状:跨病严重度模型的「相关系数」虚高;对照组被当成零严重度正样本;模型把组间均值差异误学成严重度梯度。
解决:
- 简单方法:组内使用——只做单病种的严重度建模(如 park 组内 Hoen & Yahr 回归),对照样本不参与。
- 进阶方法:哑变量化(组 × 组内严重度交互特征),或把 severity 只作分层/分层划分依据而非目标。
- SOTA 方法:跨病严重度研究改用统一量表(如统一的功能分级)的新数据集,或在论文中明示「跨量表不可比」并将其排除出特征空间。
参考:官方 subject-description 说明;Ertugrul et al., 2022(按病种分别设定严重度标签的处理先例)
⚠️ 坑点 5:忽视类别不平衡与小样本的评估方差(分类:评估误用)
问题:四组 13-20 例,对照组仅 16 例;单次划分的准确率随机波动可达 ±7 个百分点(Klomsae 2018 的方法标准差为 3.13-7.14)。只报一次划分的最高准确率(如 98.44%)而忽略方差,会系统性夸大模型能力。
症状:不同论文同一数据集数字从 74% 到 100% 不等;复现结果落在区间外;模型选择过拟合到验证折。
解决:
- 简单方法:报告平衡准确率与宏 F1(不把多数组误判合理化),并附混淆矩阵。
- 进阶方法:重复分层 CV(≥10 次重复)报告均值 ± 标准差与置信区间;模型比较用配对检验(如 Wilcoxon signed-rank over folds)。
- SOTA 方法:LOOCV 逐例预测汇总成一个混淆矩阵再算指标(Klomsae 2018 式),小样本下的标准报告格式。
参考:Klomsae et al., Comput Intell Neurosci 2018(均值±标准差报告范式)
⚠️ 坑点 6:混用「秒列」与「百分比列」造成共线性(分类:偏倚陷阱)
问题:.ts 中 swing/stance/double support 各有秒与占步幅百分比两套列,且二者由同一原始量直接换算(swing% = swing_s / stride × 100)。把两套列同时塞进特征向量会注入结构性共线;不同受试者步速不同,秒列与百分比列对疾病的响应方向也不同。
症状:线性模型系数符号混乱、方差膨胀因子(VIF)爆表;特征重要性被换算列稀释,跨研究不可比。
解决:
- 简单方法:二选一——跨受试者比较用百分比列(已对步幅长度归一),做组内时间结构分析用秒列。
- 进阶方法:只保留一套列后计算 VIF,剔除 VIF > 10 的特征;或直接用 PCA 降维(在训练折内拟合)。
- SOTA 方法:按临床语义构造最小特征集——步幅间期 CV、双支撑占比、左右不对称度三类各一,既避免共线又便于临床解释。
参考:官方 .ts 13 列定义
⚠️ 坑点 7:忽略步行速度混杂(分类:偏倚陷阱)
问题:步速为自选(未标准化),而疾病组普遍比健康组走得慢;步态变异性与速度存在已知的 U 形关系(过快过慢都增大变异)。模型可能只学会了「慢 = 病」,而非真正的动力学异常。
症状:加入 speed 特征后准确率骤升(这是混杂信号而非增益);剔除 speed 后性能大跌;用模型解释「疾病机制」时得出「患者走路慢所以有病」的循环论证。
解决:
- 简单方法:主实验剔除 speed;单独报告「含 speed」版本以暴露混杂强度。
- 进阶方法:以速度分层/协变量校正(把 speed 分箱后组内建模,或回归取残差);报告各组 speed 分布以供审稿核查。
- SOTA 方法:对变异性指标做速度归一化建模(速度-变异性关系回归后的残差作为校正指标),并在局限中明示未标准化步速的影响。
参考:Hausdorff et al., J Appl Physiol 2000(自选步速协议与组间比较讨论)
⚠️ 坑点 8:把「疾病间鉴别」当成和「疾病 vs 健康」一样容易(分类:评估误用)
问题:文献中疾病 vs 对照的准确率常见 90%+,但疾病之间的二分类显著更难——PD vs HD 的最佳报告仅约 83%(K-NN),因为三者都表现为步态节奏失稳,组间动力学差异远小于组间-组内差异。
症状:把「四分类 98%」误读为「任意两类间都 98%」;四分类宏指标掩盖某一两对疾病(如 PD/HD)接近随机的混淆;宣称可用于鉴别诊断支持但混淆矩阵显示 PD/HD 互混过半。
解决:
- 简单方法:报告成对二分类矩阵(每对疾病单独训练评估),明确标出难分对。
- 进阶方法:对四分类混淆矩阵做按类召回分解;对 PD/HD 难分对做特征差异分析(如 HD 的 TFC 相关波动模式)而非只报总准确率。
- SOTA 方法:把任务重定义为「异常检测 + 疾病亚型聚类」,承认单次 5 分钟记录的鉴别能力上限,用层次化评估(先病/健,再病间)给出各层可信度。
参考:Data-Driven Based Approach to Aid Parkinson’s Disease Diagnosis, Sensors 2019(PD vs HD 仅 83.33% 的对照表)
§6.6 数据增强
| 类别 | 方法 | 说明 |
|---|---|---|
| ✅ 安全:随机时序裁剪 | 从 5 分钟稳态段随机截取连续 60-120 stride 子窗口 | 保持真实节奏结构,等效扩充受试者内样本(仍按受试者分组) |
| ✅ 安全:抖动加噪 | 高斯噪声 σ ≤ 5 ms 叠加在 stride 间期上 | 模拟检测抖动,物理量级合理 |
| ✅ 安全:左右脚视图 | 左/右 stride 序列视为同一受试者的两个视图 | 物理上对称合法,仅用于对比学习预训练 |
| ✅ 安全:标准化视角 | 秒列 ↔ 百分比列换算后作为独立视图 | 信息等价的合法重参数化 |
| ❌ 危险:时间轴重采样/拉伸 | 上采样或非线性时间扭曲 | 直接改变变异性与分形标度——而它们正是标签的物理来源 |
| ❌ 危险:SMOTE 在 stride 行级过采样 | 合成「假 stride」或「假受试者」 | 合成样本跨越受试者边界,制造泄漏与伪分布 |
| ❌ 危险:速度归一化增强 | 按比例缩放全部间期模拟快/慢走 | 速度-变异性的非线性关系使缩放后的序列物理上不真实 |
| ❌ 危险:跨受试者序列拼接 | 把不同受试者序列首尾相连 | 伪造不存在的受试者,破坏分组结构 |
§6.7 模型推荐表
| 模型 | 适用任务 | 输入 | 预期表现 | 备注 |
|---|---|---|---|---|
| 逻辑回归 / 线性 SVM | 二分类基线 | 受试者级手工特征 | 疾病 vs 对照约 85-90% | 强基线,必须先跑 |
| RBF 核 SVM | 二分类/四分类 | 手工特征 | 文献 89-97%(协议敏感) | Daliri 2012 与 Ye 等的常用选择 |
| 随机森林 | 二分类/特征重要性 | 手工特征 | 4 分类约 94.7% | 对共线性较稳健 |
| 模糊 KNN / 原型方法 | 二分类/四分类 | 字符串化 stride 序列 | Klomsae 2018 最高 96-98% | 可解释原型,适合小样本 |
| 1D-CNN / 轻量 LSTM | 端到端序列分类 | padding 后 stride 序列 | 依赖划分协议,无受试者级划分的数字不可信 | 64 例从零训练需强正则与固定划分 |
| 预训练时序模型微调 | 端到端(进阶) | stride 序列 | 未有公开成熟基准 | 需注意域差异与泄漏 |
§6.8 硬件需求表
| 场景 | CPU | RAM | GPU | 磁盘 |
|---|---|---|---|---|
| 特征工程 + 经典 ML(推荐) | 任意 4 核 | 4 GB | 不需要 | 200 MB |
| LOOCV 全量重复实验 | 4-8 核 | 8 GB | 不需要 | 500 MB |
| 轻量深度模型(1D-CNN) | 8 核 | 8 GB | 可选(CPU 分钟级) | 1 GB |
| 预训练模型微调 | 8 核 | 16 GB | 单卡消费级即可 | 2 GB |
§6.9 评估指标代码
# 小样本标准评估:受试者级 LOOCV + 逐例预测汇总混淆矩阵
import numpy as np
from sklearn.model_selection import LeaveOneGroupOut, cross_val_predict
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import (balanced_accuracy_score, f1_score,
confusion_matrix, classification_report)
X = feat[FEATURES].to_numpy() # §6.3 的受试者级特征
y = feat["record"].str.extract(r"([a-z]+)")[0].map(LABEL_MAP).to_numpy()
groups = feat["record"].to_numpy() # 受试者 = 组
pipe = make_pipeline(StandardScaler(), SVC(kernel="rbf", C=1.0))
logo = LeaveOneGroupOut()
y_pred = cross_val_predict(pipe, X, y, groups=groups, cv=logo)
print("balanced acc:", balanced_accuracy_score(y, y_pred))
print("macro F1 :", f1_score(y, y_pred, average="macro"))
print("confusion :\n", confusion_matrix(y, y_pred))
print(classification_report(y, y_pred, target_names=list(LABEL_MAP)))
§6.10 MLOps 笔记
- 数据版本化:库唯一版本 1.0.0 且文件有 SHA256SUMS.txt,把校验和写入实验元数据即可实现 bit 级复现锚点。
- 配置即代码:清洗超参(trim 步数、分位数阈值)、划分种子、特征清单全部进 YAML/JSON 配置,实验记录配置哈希。
- 小样本防过拟合流水线:模型选择与超参搜索只在 CV 内部进行;最终测试集(若设)只允许触碰一次。
- 监控与再训练:本库为历史研究数据,无部署流;若移植到真实可穿戴流(连续 stride 流),需监控输入分布漂移(步速、记录时长、传感器批次)。
- 审计线索:保留每次实验的 records 列表(训练/测试受试者名单),小样本研究中受试者身份即超参数。
§7 质量评估与局限性
§7.1 已知偏倚表
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 招募偏倚 | 波士顿单城市学术医疗中心便利抽样,非人群代表性样本 | 中 | 外部验证(gaitpdb/多中心队列)后再外推 |
| 步速混杂 | 自选步速未标准化,疾病组普遍偏慢,变异性与速度存在非线性关系 | 高 | 主实验剔除 speed/速度分层/残差校正(坑点 7) |
| 能力截断偏倚 | 只纳入能连续行走 5 分钟者,最重的患者(轮椅/卧床)系统性缺席 | 高 | 结论仅适用于「活动能力保留」人群;不外推至晚期失能患者 |
| 小样本方差 | 每组 13-20 例,评估统计量的置信区间宽 | 高 | LOOCV/重复 CV 报告均值±标准差(坑点 5) |
| 严重度异构 | PD/HD/ALS 使用三套不可比量表 | 中 | 组内建模,跨病不数值比较(坑点 4) |
| 时代偏倚 | 1990 年代诊断标准与量表版本,与当代临床实践存在漂移 | 中 | 引用当代指南复核入组标准后再映射到现代标签 |
| 设备年代偏倚 | 力敏鞋垫与踝戴记录仪为 1990 年代硬件,与当代可穿戴设备信号特性不同 | 中 | 模型迁移前做信号域自适应或重校准 |
§7.2 标注质量
疾病标签来自临床诊断(金标准层级高);时序「标注」来自自动算法,其检测方法为既往验证方法(与测力台一致)的改良版,误差在毫秒级。主要不确定性:官方未公布量表评定者间一致性系数,亦未提供逐例诊断依据文本。总体判断:受试者级标签可信,信号级衍生量受未滤波与自动检测误差影响,需按坑点 2 清洗。
§7.3 泛化性评估
| 部署场景 | 失效风险 | 证据 |
|---|---|---|
| 其他城市/国家人群 | 高:单中心波士顿样本,人群构成与就医路径不同 | 数据集全部来自 BIDMC/MGH(§3.8) |
| 当代可穿戴设备 | 中高:信号特性(采样率、传感器位置、算法)与 1990 年代鞋垫不同 | 设备规格差异(§3.9) |
| 疾病间鉴别(PD vs HD) | 高:组间动力学差异小,文献最佳约 83% | Sensors 2019 对照表 |
| 快速筛查场景(短记录) | 中:本库协议为 5 分钟,短于 1 分钟的窗口稳定性未验证 | 单时点 5 分钟协议(§3.7) |
| 严重度跨病预测 | 极高:量表异构 + 方向相反 | 坑点 4 |
§7.4 伦理与隐私
数据以匿名形式发布:不含姓名、精确日期或直接标识符;时序数据本身不构成受试者再识别的高风险载体。原始研究在 1990 年代完成,经所在机构伦理审查(论文按当时规范发表);当代使用者以 ODC-BY 1.0 许可获取,无 DUAS/CITI 要求,但引用原始论文是许可的署名条件。二次分析仍建议按所在机构 IRB 政策确认豁免地位。
§7.5 公平性
- 性别:男女均纳入,但各组内性别构成未在官方文档汇总公布;建模前应统计并报告分组性别分布。
- 年龄:疾病组与对照组年龄匹配程度官方未说明,年龄本身影响步态变异性,未匹配会成为混杂。
- 种族/民族:无字段,无法评估——这本身就是该年代数据集的公平性盲区。
- 可及性偏差:仅纳入可行走者,重度失能群体在数据中系统性缺席(见 §7.1)。
公平性核查代码(建模前必跑,把「分布是否可比」变成数字事实):
import pandas as pd
from pathlib import Path
meta = pd.read_csv(Path("data/gaitndd") / "subject-description.txt", sep="\t")
meta.columns = [c.strip().lower().replace(" ", "_") for c in meta.columns]
meta["group"] = meta["subject"].str.extract(r"([a-z]+)")[0]
# 1) 性别构成:各组占比 + 卡方检验(小样本建议 Fisher 精确检验)
ct = pd.crosstab(meta["group"], meta["gender"], normalize="index").round(3)
print(ct)
# 2) 年龄与步速:各组均值 ± 标准差(协变量可比性)
print(meta.groupby("group")[["age", "walking_speed"]].agg(["mean", "std"]).round(2))
# 3) 结论动作:若 disease 组与对照组年龄差 > 5 岁或步速差 > 0.2 m/s,
# 主实验应把 age / speed 列入「剔除或校正」清单(联动 §7.1 与坑点 7)。
§7.6 数据漂移
数据冻结于 2000 年(唯一版本),不存在「数据集自身漂移」;漂移风险在部署侧:当代人群、当代设备、当代采集协议与 1990 年代波士顿协议之间的协变量偏移(步速习惯、体重分布、传感器特性)。建议:迁移使用前先做特征分布对比(PSI/KS 检验),再做小规模标注校准集验证。
§7.7 DAIMS 24 项自评
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式数据 | ✅ | 受试者级元数据一张宽表 + 时序文件分离,结构清晰 |
| 2 | 唯一标识 | ✅ | 记录名(组前缀+ID)全局唯一,文件名即主键 |
| 3 | 特殊字符处理 | ✅ | 纯 ASCII 数值文本,无特殊字符风险 |
| 4 | 重复行 | ✅ | 每例单次记录,无重复 |
| 5 | 缺失值编码 | ⚠️ | 官方未定义 NaN 约定,需自行检查 |
| 6 | 标签标识 | ✅ | 文件名前缀即疾病标签,无歧义 |
| 7 | 罕见类分组 | ⚠️ | 每组 13-20 例,官方无聚合指引 |
| 8 | 偏倚评估 | ⚠️ | 官方未系统评估;本 wiki §7.1 补全 |
| 9 | 数据字典 | ✅ | 13 列逐列定义 + 元数据字段说明完整 |
| 10 | 信息性缺失解释 | ✅ | 对照 severity=0 占位语义官方明示 |
| 11 | 设备记录 | ✅ | 传感器类型/采样率/记录仪完整记载 |
| 12 | 共线性 | ⚠️ | 秒列与百分比列结构性冗余,官方未提示 |
| 13 | 编码映射 | ⚠️ | 严重度跨病异构,无统一编码映射表 |
| 14 | 时间戳处理 | ✅ | elapsed_time 单调秒制,物理量纲清晰 |
| 15 | 划分建议 | ❌ | 官方零划分指引 |
| 16 | 泄漏讨论 | ❌ | 官方未讨论;本 wiki §5.3 补全 |
| 17 | 标签分布 | ✅ | 64 例四组分布官方明示 |
| 18 | 测量偏倚 | ⚠️ | 自选步速未标准化,官方未评估 |
| 19 | 外部验证建议 | ⚠️ | 官方仅列研究问题,无外部队列指引 |
| 20 | 版本记录 | ✅ | 单版本 + SHA256SUMS 校验链 |
| 21 | 预处理脚本 | ❌ | 官方未提供任何脚本 |
| 22 | 合规要求 | ✅ | ODC-BY 1.0 条款清晰,开放获取 |
| 23 | 多模态对齐 | ✅ | 单模态库,原始/衍生同源无对齐问题 |
| 24 | 去标识化 | ✅ | 匿名时序,无直接标识符 |
DAIMS 评分:15.5 / 24
评分解读:中等偏好——单模态小库的「干净度」很高(唯一标识、数据字典、设备记录、去标识化、合规条款全部满分),工程风险主要不在数据本身,而在「无划分、无脚本、无泄漏指引」三缺带来的使用侧自由落体:同一份数据,按行划分与按受试者划分能差出 10 个百分点。
对你意味着什么:拿到手 30 分钟内应做三件事——(1) 用 SHA256SUMS 校验数据完整性;(2) 建立受试者级分组 ID 并把 GroupShuffleSplit/LOOCV 写进 pipeline(§6.9 代码可直接复用);(3) 把严重度字段锁进组内使用、把步速从主实验特征中剔除。完成这三步后,这个 17.9 MB 的小库就是一个物理量纲清晰、标签可信、可在笔记本上全量复现的高质量试验床;跳过这三步,任何「98% 准确率」都可能是泄漏假象。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| gaitpdb(vGRF,PD 93/对照 73) | Tel Aviv Sourasky Medical Center / Uncasville 等 | PD vs 对照(特征层对齐后) | 各类模型 74-98% | 无法直接混排:模态与协议不同 | 跨模态需从 vGRF 重提 stride 事件后计算同名衍生指标 |
| 同库不同协议交叉比较 | 多家(见 §8.1) | 同一模型 all-train-all-test vs LOOCV | 同模型差 3-10 个百分点 | — | 「外部验证」的第一课在本库内部即可演示 |
| 深度学习 15,092 样本切分 | 后续研究(Ertugrul et al. 2022 等) | 疾病分类/严重度预测 | 高准确率但划分口径不一 | 与受试者级划分不可比 | 引用任何数字前先核对划分单元 |
注:gaitndd 无严格意义上的「外部同协议队列」公开验证研究;上表仅录有同行评审支撑、但口径互异的比较,数值不可直接排序。
§8 基准性能与生态
§8.1 排行榜
⚠️ 下方数字来自不同划分协议(all-train-all-test / LOOCV / 重复划分)与不同特征集,不可直接横向比较,仅供方法族谱参考。
| 排名 | 模型 | 任务 | 性能 | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|---|
| 1 | K* 分类器 | 4 分类(PD/HD/ALS/对照) | 99.17% | 2017 | 实例化决策算法(划分口径未明示) | Er & Temurtas, 2017(转引自 Klomsae 2018 对照表, Comput Intell Neurosci. DOI: 10.1155/2018/8416946) | 未公开 |
| 2 | sgUPFCMed + 模糊 KNN | 4 分类 | 98.44% ± 3.13% | 2018 | 字符串语法无监督可能性模糊 C-中位数原型 | Klomsae et al., Comput Intell Neurosci, 2018. DOI: 10.1155/2018/8416946 | 论文附录 |
| 2 | sgUPFCMed + 模糊 KNN | ALS/HD/PD 各 vs 对照 | 96.88% ± 6.25% / 97.22% ± 5.56% / 96.43% ± 7.14% | 2018 | 仅用左脚 stride 序列 | 同上 | 论文附录 |
| 4 | RBF 神经网络 | ALS/HD/PD 各 vs 对照(all-train-all-test) | 93.1% / 100% / 100% | 2007 | 神经网络步态动力学建模(参考上限口径) | Gürgen & Akin, 2007(转引自 Klomsae 2018) | 未公开 |
| 5 | LS-SVM + PSO | PD/HD/ALS vs 对照 | 90.32% / 94.44% / 93.10% | 2019 | 粒子群优化最小二乘 SVM | Ye et al., 2019(见 IEEE 综述) | 未公开 |
| 6 | RBF-SVM | ALS/HD/PD 各 vs 对照 | 96.79% / 90.23% / 89.33% | 2013 | RBF 核支持向量机 | Daliri, 2013(转引自 Klomsae 2018) | 未公开 |
| 7 | SVM | PD vs 对照 | 89.33% | 2012 | 时域统计特征 + SVM | Daliri, Measurement 45(6):1472-1482, 2012. DOI: 10.1016/j.measurement.2012.02.024 | 未公开 |
| 8 | K-NN | PD vs HD / PD vs ALS | 83.33% / 92.86% | 2019 | 临床步态特征 + 包装法特征选择 | Sensors 2019, 19(3):540(全文) | 未公开 |
| 9 | HMM + 高斯混合 | PD vs 对照 | 90.3% | 2014 | 原始步态数据隐马尔可夫建模 | Khorasani et al., 2014(转引自 Sensors 2019 对照表) | 未公开 |
§8.2 SOTA 总结与选型建议
- 最高公开数字:4 分类 K* 99.17%(划分口径存疑)与 sgUPFCMed 98.44%±3.13%(LOOCV 口径,最可信的高分)。
- 选型建议:复现或引用时优先采用受试者级 LOOCV 口径的数字(Klomsae 2018 系列、Sensors 2019 系列);RBF 网络 100% 的 all-train-all-test 结果仅作上限参考,切勿写进对比实验表与受试者级结果同列排序。
- 可靠区间:疾病 vs 对照二分类 85-97%;疾病间二分类(尤其 PD vs HD)约 70-83%——这是本库真实难度结构。
§8.3 评测协议
社区未形成唯一协议,建议采用本 wiki §5.4/§6.9 的标准:受试者级 LOOCV + 逐例预测汇总混淆矩阵 + 平衡准确率/宏 F1 + 均值±标准差。引用文献数字时必须核对三项:划分单元(受试者 vs stride 行)、验证方式(回代 vs CV)、特征集(是否含 speed 与 severity)。
最低可发表的基准协议模板(一份脚本同时给出「公平口径」与「文献口径」两列结果,暴露口径差异本身):
from sklearn.model_selection import (LeaveOneGroupOut, GroupShuffleSplit,
cross_val_predict, cross_validate)
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import balanced_accuracy_score
pipe = make_pipeline(StandardScaler(), SVC(kernel="rbf", C=1.0))
# 口径 A(推荐):受试者级 LOOCV —— 可与 Klomsae 2018 直接对话
logo_pred = cross_val_predict(pipe, X, y, groups=groups, cv=LeaveOneGroupOut())
print("LOOCV balanced acc:", balanced_accuracy_score(y, logo_pred))
# 口径 B(仅作参考):受试者级 5 折重复 5 次 —— 评估方差
gss = GroupShuffleSplit(n_splits=5, test_size=0.25, random_state=0)
cv_res = cross_validate(pipe, X, y, groups=groups, cv=gss,
scoring="balanced_accuracy")
print("5x5 balanced acc: %.3f ± %.3f" % (cv_res["test_score"].mean(),
cv_res["test_score"].std()))
# 两个口径的数字不得混入同一张对比表;论文中必须明示所用口径。
§8.4 相关数据集表
| 数据集 | 规模 | 模态 | 许可 | 链接 |
|---|---|---|---|---|
| gaitdb(Gait in Aging and Disease Database) | 15 例(年轻/老年/PD 各 5) | 力敏鞋垫 300 Hz | ODC-BY 1.0 | physionet.org/content/gaitdb |
| Gait in Parkinson’s Disease(gaitpdb) | 93 PD + 73 对照 | 8 足底传感器 vGRF 100 Hz | ODC-BY 1.0 | physionet.org/content/gaitpdb |
| Gait Maturation Database | 50 名儿童 | 力敏鞋垫 | ODC-BY 1.0 | physionet.org(gait 主题) |
| Long-term Recordings of Gait Dynamics | 10 名年轻人 | 便携记录仪连续数天 | ODC-BY 1.0 | physionet.org(gait 主题) |
| TaiChi, Physiological Complexity, and Healthy Aging - Gait | 双任务步态 + EMG | footswitch + EMG | ODC-BY 1.0 | physionet.org(gait 主题) |
§8.5 关键论文 Top 8
- Hausdorff JM, Lertratanakul A, Cudkowicz ME, Peterson AL, Kaliton D, Goldberger AL. Dynamic markers of altered gait rhythm in amyotrophic lateral sclerosis. J Appl Physiol 88(6):2045-2053, 2000. DOI: 10.1152/jappl.2000.88.6.2045 — 本库原始论文;确立 ALS 步态节律失稳并建立三病对照框架。
- Hausdorff JM, Mitchell SL, Firtion R, Peng CK, Cudkowicz ME, Wei JY, Goldberger AL. Altered fractal dynamics of gait: reduced stride-interval correlations with aging and Huntington’s disease. J Appl Physiol 82(1):262-269, 1997. DOI: 10.1152/jappl.1997.82.1.262 — DFA 标度指数随衰老与 HD 降低的分形动力学奠基结果。
- Hausdorff JM, Cudkowicz ME, Firtion R, Wei JY, Goldberger AL. Gait variability and basal ganglia disorders: stride-to-stride variations of gait cycle timing in Parkinson’s and Huntington’s disease. Mov Disord 13(3):428-437, 1998. DOI: 10.1002/mds.870130310 — PD/HD 步幅间期变异性的组间比较经典。
- Klomsae T, Charoenkwan P, Shoombawong W. String grammar unsupervised possibilistic fuzzy C-medians for gait pattern classification in patients with neurodegenerative diseases. Comput Intell Neurosci, 2018. DOI: 10.1155/2018/8416946 — 受试者级 LOOCV 口径的高分基准与系统对照表。
- Daliri MR. Automatic diagnosis of neuro-degenerative diseases using gait dynamics. Measurement 45(6):1472-1482, 2012. DOI: 10.1016/j.measurement.2012.02.024 — 时域特征 + SVM 的经典基线。
- Sensors 2019, 19(3):540(Data-driven based approach to aid Parkinson’s disease diagnosis). DOI: 10.3390/s19030540 — 7 种分类器 × 多个二分类任务的系统比较,暴露 PD vs HD 难点。
- Ertugrul ÖF 等团队的 CNN 严重度预测研究. PeerJ Comput Sci, 2022. DOI: 10.7717/peerj-cs.847 — 15,092 样本切分口径的深度学习严重度预测(注意划分单元争议)。
- Hausdorff JM. Gait variability: methods, modeling and meaning. J Neuroeng Rehabil 2:19, 2005. DOI: 10.1186/1743-0003-2-19 — 步态变异性方法学综述,本库分析方法的权威导读。
§8.6 社区活跃度
- PhysioNet 平台长期稳定托管(S3 开放镜像 + WFDB 工具链兼容),页面访问计数显示持续的研究与教学使用。
- 依托 PhysioNet gait 主题的同族库群(gaitdb/gaitpdb/gait-maturation 等),社区形成「步态时序」细分生态。
- 无官方 GitHub 仓库与 issue 渠道;方法学讨论主要发生在论文与 PhysioNet 论坛。引用量持续增长(原始论文 393+,截至 2026-09)。
§8.7 生态快照表
| 资源 | 类型 | 链接 | 推荐理由 |
|---|---|---|---|
| PhysioNet gaitndd 主页 | 官方数据页 | physionet.org/content/gaitndd | 数据、协议、引用一站式 |
| PhysioNet gait 主题页 | 主题聚合 | physionet.org/content/?topic=gait | 同族步态库横向浏览 |
| Hausdorff 2005 方法学综述 | 综述 | PubMed 16033650 | 变异性指标的正确打开方式 |
| Klomsae 2018 基准论文 | 基准 | PMC30008740 | LOOCV 口径数字 + 文献对照表 |
| PhysioNet AWS 开放镜像 | 数据镜像 | s3://physionet-open/gaitndd/1.0.0/ | 免签名秒级下载 |
§9 相关资源与引用
§9.1 官方与权威资源
- 数据主页与版本页:https://physionet.org/content/gaitndd/ / 1.0.0(文件说明见 TEST.shtml)
- 原始论文(PubMed):PMID 10846017;出版社全文:J Appl Physiol
- 步触地检测方法的验证脉络:同族 gaitdb 文档(gaitdb 1.0.0)记载方法与测力台金标准一致
- 方法学教程:Hausdorff 2005 综述(PMID 16033650)与 PhysioNet/ReyLab 的步态时序 mini-tutorial 链接(见 gaitdb 页面)
- 数据镜像:AWS 开放数据(
s3://physionet-open/gaitndd/1.0.0/)
§9.2 BibTeX 完整引用
@article{hausdorff2000dynamic,
author = {Hausdorff, Jeffrey M. and Lertratanakul, Apinya and Cudkowicz, Merit E. and
Peterson, Amie L. and Kaliton, David and Goldberger, Ary L.},
title = {Dynamic markers of altered gait rhythm in amyotrophic lateral sclerosis},
journal = {Journal of Applied Physiology},
volume = {88},
number = {6},
pages = {2045--2053},
year = {2000},
doi = {10.1152/jappl.2000.88.6.2045}
}
@article{hausdorff1997altered,
author = {Hausdorff, Jeffrey M. and Mitchell, Susan L. and Firtion, Ren{\'e}e and
Peng, C.-K. and Cudkowicz, Merit E. and Wei, Jeanne Y. and Goldberger, Ary L.},
title = {Altered fractal dynamics of gait: reduced stride-interval correlations
with aging and Huntington's disease},
journal = {Journal of Applied Physiology},
volume = {82},
number = {1},
pages = {262--269},
year = {1997},
doi = {10.1152/jappl.1997.82.1.262}
}
@article{hausdorff1998gait,
author = {Hausdorff, Jeffrey M. and Cudkowicz, Merit E. and Firtion, Ren{\'e}e and
Wei, Jeanne Y. and Goldberger, Ary L.},
title = {Gait variability and basal ganglia disorders: stride-to-stride variations
of gait cycle timing in Parkinson's and Huntington's disease},
journal = {Movement Disorders},
volume = {13},
number = {3},
pages = {428--437},
year = {1998},
doi = {10.1002/mds.870130310}
}
@article{hausdorff2005gait,
author = {Hausdorff, Jeffrey M.},
title = {Gait variability: methods, modeling and meaning},
journal = {Journal of NeuroEngineering and Rehabilitation},
volume = {2},
pages = {19},
year = {2005},
doi = {10.1186/1743-0003-2-19}
}
@article{klomsae2018string,
author = {Klomsae, Thanisa and Charoenkwan, Phasit and Shoombawong, Watshara},
title = {String Grammar Unsupervised Possibilistic Fuzzy C-Medians for Gait Pattern
Classification in Patients with Neurodegenerative Diseases},
journal = {Computational Intelligence and Neuroscience},
volume = {2018},
pages = {8416946},
year = {2018},
doi = {10.1155/2018/8416946}
}
@article{daliri2012automatic,
author = {Daliri, Mohammad Reza},
title = {Automatic diagnosis of neuro-degenerative diseases using gait dynamics},
journal = {Measurement},
volume = {45},
number = {6},
pages = {1472--1482},
year = {2012},
doi = {10.1016/j.measurement.2012.02.024}
}
@article{physionet2026platform,
author = {Pollard, Tom and Moody, Benjamin E. and Lehman, Li-wei H. and Gow, Brian J. and
Fernandes, Chrystinne and Xie, Chen and Johnson, Alistair and
Mark, Roger G. and Heldt, Thomas},
title = {PhysioNet as a global platform for biomedical research},
journal = {Nature Health},
volume = {1},
number = {8},
pages = {792--795},
year = {2026},
doi = {10.1038/s44360-026-00096-z}
}
@misc{gaitndd2000data,
author = {Hausdorff, Jeffrey M. and Lertratanakul, Apinya and Cudkowicz, Merit E. and
Peterson, Amie L. and Kaliton, David and Goldberger, Ary L.},
title = {Gait in Neurodegenerative Disease Database},
year = {2000},
publisher = {PhysioNet},
doi = {10.13026/C27G6C},
url = {https://physionet.org/content/gaitndd/}
}
§9.3 引用指南
使用本数据集时,PhysioNet 官方要求引用原始论文(Hausdorff et al., 2000)与 PhysioNet 平台引用(Pollard et al., 2026),并注明数据 DOI(10.13026/C27G6C)。若使用了本页面的划分建议或预处理流程,请另行引用本页面。方法学综述(Hausdorff 2005)建议在步态变异性研究中同时引用。
§10 AI 使用声明卡
§10.1 AI 模型使用
| AI 模型 | 版本 | 用途 |
|---|---|---|
| fast-model(CodeBuddy) | 2026-09 | 初稿生成:INFOBOX 数据汇编、§1-§9 结构化写作、§6 代码示例生成、JSON-LD 构建 |
| WebSearch(多源检索) | 2026-09-08 | 6 组检索:PhysioNet 官方页面(gaitndd/gaitdb)、原始论文与引用统计、ML 基准文献、同族数据集交叉验证 |
§10.2 AI 参与范围
AI 参与范围:初稿生成 + 资料整理 + 代码生成 + 格式化排版。
AI 在本页面的工作中负责:(1) 从 PhysioNet 官方页面(gaitndd/gaitdb)、Hausdorff 2000 原始论文与基准文献中整理结构化信息;(2) 生成 §6 的 Python 代码示例;(3) 系统化组织 §6.5 的 8 个坑点与 §7.1 偏倚表;(4) 执行 G1/G2/G3 排版规范检查与中英文格式标准化;(5) 构建 §C 统一 JSON-LD @graph。
§10.3 输入来源
- Hausdorff JM, Lertratanakul A, Cudkowicz ME, Peterson AL, Kaliton D, Goldberger AL (2000), J Appl Physiol 88(6):2045-2053 — 原始论文(DOI: 10.1152/jappl.2000.88.6.2045;PMID 10846017)
- PhysioNet Gait in Neurodegenerative Disease Database 1.0.0 主页(规模、协议、license、DOI)
- PhysioNet gaitndd 文件说明页(TEST.shtml:.ts 13 列定义、.let/.rit 二进制、severity 字段语义)
- PhysioNet DataCite 元数据页(10.13026/C27G6C:版本 1.0.0、2000-12-21、17.9 MB)
- PhysioNet Gait in Aging and Disease Database(gaitdb)1.0.0 页面 — 同族对照、方法验证脉络、300 Hz/12 位系统描述
- journals.physiology.org 论文页 — 引用统计 393(截至 2026-09)与方法节
- Hausdorff et al. (1997), J Appl Physiol 82(1):262-269 — DFA 标度指数数字(ADS 摘要页)
- Klomsae et al. (2018), Comput Intell Neurosci 8416946(PMC30008740)— 基准对照表与 LOOCV 数字
- Daliri (2012), Measurement 45(6):1472-1482 — SVM 基线 89.33%
- Sensors 2019, 19(3):540(PMC30634600)— 7 分类器对照表、PD vs HD 83.33%、77 m 走廊 5 分钟协议表述
- Ertugrul et al. (2022), PeerJ Comput Sci(PMC35111334)— 15,092 步态样本口径、300 Hz 采样、demographic 字段
- IEEE Access 2021 综述(Computer-Vision Based Diagnosis of PD via Gait: A Survey)— 同族数据集表格(gaitdb 15 例、gaitndd 64 例、gaitpdb 166 例)
- IEEE 综述 2025(A Methodological and Structural Review of PD Detection, doc 11017675)— Ye et al. LS-SVM+PSO 数字
- Hausdorff (2005), J NeuroEng Rehabil 2:19 — 步态变异性方法学综述(Mendeley 引用快照 761)
- PhysioNet gait 主题聚合页 — gaitpdb/gait-maturation/long-term gait/TaiChi-Gait 同族库信息
§10.4 人工校验表
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §1 概览与名称核实结论 | 千方病案医学编辑部 | 与 PhysioNet 官方页面交叉比对 | ✅ 已验证 |
| §2 医学背景(ICD-11/SNOMED 映射、疾病简介、金标准) | 千方病案医学编辑部 | 对照 ICD-11/SNOMED CT 官方术语交叉审核 | ✅ 已通过 |
| §3 数据集规格(64 例构成、文件格式、设备链) | 千方病案医学编辑部 | 与 PhysioNet gaitndd/gaitdb 页面逐项核对 | ✅ 已验证 |
| §4 数据结构(13 列字典、目录树、层级) | 千方病案医学编辑部 | 与官方文件说明交叉比对 | ✅ 已验证 |
| §5 数据划分策略 | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §6 代码示例与坑点 | 千方病案医学编辑部 | 逻辑审查 + 与官方字段定义比对 | ✅ 已通过 |
| §7 质量评估与 DAIMS 评分 | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §8 排行榜与引用数表述 | 千方病案医学编辑部 | 与原文及出版社统计交叉比对 | ✅ 已验证 |
| §9 BibTeX 引用 | 千方病案医学编辑部 | 与 DOI/PubMed 记录逐字段核对 | ✅ 已验证 |
| §C JSON-LD @graph | 千方病案医学编辑部 | Schema v3.9 字段逐项校验 | ✅ 已通过 |
§10.5 AI 生成章节标注
以下章节由 AI 生成初稿并经人工审核:§1.0 30 秒速览、§1.3 同类对比、§3.0 抉择矩阵、§6.0-§6.4 代码示例、§6.5 八个坑点、§6.9 评估指标代码、§7.7 DAIMS 评估表与评分、§8.1 排行榜、§8.7 生态快照、§C JSON-LD。
§10.6 最后人工审核日期
2026-09-05(与 §0 审核日期一致)
页面状态:published(全部内容已完成审核并发布)
