信息速览

MHEALTH — 穿戴多传感器活动识别基准 AI-Ready Wikipedia
INFOBOX
| 数据集名称 | MHEALTH Dataset |
| 英文全称 | MHEALTH (Mobile HEALTH) Dataset |
| 别名/简称 | MHealth Dataset、Mobile Health Dataset、mHealth_subject 日志集 |
| 疾病分类 | 不适用——健康志愿者活动监测数据,无疾病标签(相关临床场景映射见 §2.1) |
| SNOMED CT | 不适用(本页面的临床概念映射建议见 §2.1b) |
| 数据模态 | 三轴加速度计 + 三轴陀螺仪 + 三轴磁力计(胸/左踝/右前臂)+ 2 导联 ECG |
| AI 任务类型 | 12 类人体活动识别、个体无关/个体依赖分类、多模态传感器融合、ECG 信号分析 |
| 样本总数 | 10 名受试者 / 12 类活动 / 23 个传感器通道 / 每受试者单文件连续日志(50 Hz) |
| 数据大小 | 72.1 MB(UCI 官方 ZIP 下载包) |
| 数据格式 | 空格分隔文本日志(.log,每受试者一个文件,24 列无表头) |
| 许可证 | Creative Commons Attribution 4.0 International(CC BY 4.0) |
| 访问级别 | 开放(无需注册、无需申请) |
| DUO 标签 | NRES(无限制使用) |
| 语言 | 英文(文档与标签说明) |
| 首发日期 | 2014(UCI 官方标注 Year Created 2014,精确日期未披露) |
| 最后更新 | 2014(原始发布版,UCI 此后未发布修订版) |
| 发布机构 | 西班牙格拉纳达大学 CITIC-UGR(Oresti Banos、Rafael Garcia、Alejandro Saez) |
| 官方主页 | https://archive.ics.uci.edu/dataset/319/mhealth+dataset |
| 下载地址 | https://archive.ics.uci.edu/static/public/319/mhealth+dataset.zip |
| DOI | 10.24432/C5TW22(数据集)/ 10.1186/1475-925X-14-S2-S6(关联论文 BMC 2015) |
| 引用次数 | 654+(Google Scholar,mHealthDroid 关联论文,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 文本格式直读、无缺失值、文档清晰;扣分项:无官方训练/测试划分、无官方预处理脚本、无时间戳列、官方列描述存在笔误 |
| 页面状态 | published |
§0 E-E-A-T 信任声明与免责声明
医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(ICD-11 与 SNOMED CT 场景映射、临床任务定义、金标准描述)、§7 偏倚分析。
数据工程审核者:千方病案医学编辑部交叉审核:§4 DAIMS 数据字典(24 列逐列语义、无时间戳隐含时间轴)、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
审核日期:2026-09-05
审核方式:交叉审核
利益冲突声明:千方病案医数集与格拉纳达大学(Universidad de Granada)、UCI 机器学习库无任何商业利益关联。本页面不销售 MHEALTH 数据集本身,仅提供 AI 就绪指南与学术信息服务。编辑者未接受格拉纳达大学或 UCI 的任何形式资助。
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。MHEALTH 采用 CC BY 4.0 许可,允许任何目的的共享与改编,但必须给出恰当署名;原作者另请在发表论文时邮件告知(见 §6.2)。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
这是什么? MHEALTH(Mobile HEALTH)是一个经典的可穿戴传感器基准数据集:10 名志愿者在身上三个部位(胸部、左踝、右前臂)各佩戴一台 Shimmer2 传感器,以 50 Hz 的频率同步记录加速度、角速度、磁场强度共 21 个惯性通道,胸部设备还额外记录 2 导联心电图。志愿者依次完成站立、步行、爬楼梯、骑车、慢跑、跑步、跳跃等 12 类日常与运动活动,每行数据带有活动标签(UCI 官方页面)。
为什么重要? 它是少数同时覆盖多部位惯性信号与心电的公开活动识别数据集之一,且由 mHealthDroid 移动健康框架采集、以 CC BY 4.0 完全开放。围绕它的研究揭示了可穿戴活动识别领域最核心的方法学问题——同一个模型在随机交叉验证下可达 99.85%,而换成面向新用户的留一受试者评估只有 85.1%(Gholamiangonabadi et al., 2020, IEEE Access),这使它成为检验模型是否真正泛化到新用户的试金石。
我能用它做什么? 你可以用它训练 12 类活动识别模型、研究多模态/多部位传感器融合、做滑窗与特征工程对比实验、分析个体间差异,或为可穿戴健康监测产品做算法原型与基准回归。它不适合直接用于临床诊断类应用。
§1.1 摘要
MHEALTH 由西班牙格拉纳达大学 CITIC-UGR 团队(Oresti Banos、Rafael Garcia、Alejandro Saez 等)于 2014 年发布,托管于 UCI 机器学习库(DOI: 10.24432/C5TW22)。数据采集使用三台 Shimmer2 可穿戴传感器,以弹性绑带分别固定于受试者胸部、左踝与右前臂,全部模态以 50 Hz 同步采样,得到 23 个传感器通道;每次采集会话同时以摄像机记录以备校验。10 名志愿者按固定协议依次执行 12 类活动(L1-L12):静态姿势 3 类与走动类 2 类各持续 1 分钟,弯腰、抬臂、屈膝、跳跃 4 类各重复 20 次,骑行、慢跑、跑步 3 类各持续 1 分钟;活动之间穿插休息时段,对应标签 0(null class)。数据以每受试者一个空格分隔文本日志(.log)的形式发布,共 10 个文件、24 列(23 个传感器通道 + 1 个标签列),官方下载包 72.1 MB。数据采集与存储经由开源 mHealthDroid 框架实现,该框架的方法学论文发表于 IWAAL 2014 与 BioMedical Engineering OnLine 2015。
一句话概括其数据形态:「10 个文件 × 24 列的连续流日志,行即时间、列即通道、无缺失、无版本分支」——这一极简形态既是它上手零门槛的原因,也是全部方法学陷阱(划分、泄漏、类口径)都由使用者自行承担的原因。
§1.2 战略价值
维度一:多部位 + 生理信号的多模态基准稀缺性。 在可穿戴活动识别的公开数据集中,多数只提供单一佩戴位置(如 WISDM 的手机口袋、HAPT 的腰部),或只提供惯性信号(如 USC-HAD)。MHEALTH 在同一时间轴上同步提供胸、踝、前臂三个部位的全惯性九轴数据,外加 2 导联 ECG,让研究者能系统回答「哪些身体部位对哪些活动最有判别力」「生理信号能否补充运动学信息」这类多模态融合问题。官方明确说明 ECG 通道未用于原始识别模型开发、系为后续工作收集,这反而为社区留下了一个天然的研究切面。
维度二:个体泛化问题的教学基准。 MHEALTH 的 10 名受试者结构与连续流式日志形态,使它成为演示「数据泄漏」最直观的载体:滑窗 + 重叠 + 随机划分会把同一受试者的相邻样本分入训练与测试集,制造出 99%+ 的虚假高分(IEEE Access 2020 的对照实验)。大量后续论文以 MHEALTH 为例论证留一受试者交叉验证(LOSOCV)的必要性,因此在该数据集上报告的数字天然带有「是否按受试者划分」的方法学门槛,适合作为模型选型与论文审稿的对照组。
维度三:零门槛开放获取的可复现性资产。 与需要注册、培训认证甚至签署 DUA 的临床数据集不同,MHEALTH 以 CC BY 4.0 完全开放——无需注册、无需申请,wget 一条命令即可获得官方原始数据。这使它成为教学、课程实验、论文审稿复核与快速原型验证的理想载体;72.1 MB 的体量让「单机全量实验」成为常态,任何结论都可以在一台笔记本电脑上被独立复现或推翻。对于希望构建 HAR 领域基线直觉的新团队,先在 MHEALTH 上跑通全流程、再迁移到 PAMAP2 或自由生活数据,是一条被大量论文验证过的低成本路径。
§1.3 同类数据集横向对比
| 数据集 | 规模 | 模态 | 标注 | 与 MHEALTH 的差异化 |
|---|---|---|---|---|
| MHEALTH | 10 名受试者 / 12 类活动 | 胸/左踝/右前臂惯性九轴 + 2 导联 ECG,50 Hz | 协议内建活动标签(含 null 类) | 三部位同步 + ECG,完全开放,无官方划分 |
| PAMAP2 | 9 名受试者 / 18 类活动 | 3 个惯性单元 + 心率 + 温度,100 Hz | 协议内建 + 3 个可选活动 | 活动类别更多、含心率数据,但 ECG 缺席且受试者更少 |
| Opportunity | 4 名受试者 / 日常厨房场景 | 身戴传感器 + 环境传感器,30 Hz | 姿势/动作/物体三级标注 | 面向环境感知与复合动作,非运动类活动 |
| RealDisp | 10 名受试者 / 33 类活动 | 单胸部惯性单元 + ECG 连续记录,100 Hz | 连续会话拼接标注 | 活动更多但单部位;MHEALTH 胜在多部位 |
| WISDM v1.1 | 36 名受试者 / 6 类活动 | 手机三轴加速度计,20 Hz | 众包式单模态 | 规模大但仅单加速度计;适合入门,无法研究多模态融合 |
对比要点:MHEALTH 的核心竞争力是「多部位对称通道 + ECG + 零门槛获取」的组合,而非规模;若研究问题是「更大人群的真实世界活动分布」,WISDM 类数据更合适,若问题是「多模态融合与协议级受控对比」,MHEALTH 与 PAMAP2/RealDisp 是更对口的对照系。
§1.4 版本时间轴
| 时间 | 版本/事件 | 说明 |
|---|---|---|
| 2014 | MHEALTH 数据集发布 | 随 mHealthDroid 框架论文(IWAAL 2014)发布,托管于 UCI 机器学习库,编号 319 |
| 2015-08 | 方法学论文正式发表 | BioMedical Engineering OnLine 14(Suppl 2):S6(PMID 26329639),系统描述数据集与识别验证 |
| 2014 至今 | 无修订版本 | UCI 未发布过修订版;当前下载即为 2014 原始版本(截至 2026-09) |
时间轴的关键信息是「稳定」:发布 10 余年无修订,意味着不存在版本碎片化问题——所有论文(无论 2015 年还是 2025 年)讨论的都是同一份字节级数据。这大幅降低了跨文献比较的版本管理成本,也是它在基准复现工作中被偏爱的原因之一。相应地,任何已知的文档瑕疵(如列号笔误)都不会有官方修复版,社区只能以「本地 schema 校正」的方式处理(见坑点 3)。
§1.5 典型应用场景
- 12 类活动识别基准回归:以滑窗 + 深度模型快速验证新架构(CNN、LSTM、U-Net 类密集预测)在多模态惯性数据上的表现。
- 个体无关泛化研究:以留一受试者协议量化模型对新用户的泛化能力,评估个性化/域自适应方案的增益。
- 传感器消融与佩戴部位研究:利用胸/踝/前臂三组对称通道,系统分析部位子集对静态姿势与剧烈活动的判别贡献。
- 可穿戴健康监测原型:为康复训练计数(弯腰、抬臂、屈膝各 20 次)、体力活动量化、老年人活动监测等产品设计算法原型。
- ECG + 惯性联合分析:探索不同运动强度下心电形态与体动信号的耦合关系(需先处理运动伪影,见坑点 5)。
- 评估方法学研究:作为「划分协议敏感性」的标准演示台——同一模型在随机划分与 LOSO 下的巨大差距使它成为方法学教学与审稿复核的首选案例。
§2 医学背景
§2.1 ICD-11 映射表
MHEALTH 为健康志愿者行为数据,不含疾病诊断标签;ICD-11 编码无法直接映射其「标签」。下表给出本页面建议的临床场景级映射,供医学信息学检索与论文写作参考。
| 数据维度 | ICD-11 | SNOMED CT 码 | 术语 |
|---|---|---|---|
| 健康人群活动监测(数据集整体) | —(无疾病编码,不适用) | — | 本数据集为健康行为数据,不映射疾病分类 |
| 心脏电活动记录(ECG 通道) | —(检查场景无诊断编码) | 29303009 | Electrocardiogram(心电图操作) |
| 跌倒相关活动风险(跳跃/楼梯等场景) | —(事件而非诊断) | 28995006 | Fall(跌倒事件) |
| 康复训练依从监测(重复型活动协议) | —(监测场景无诊断编码) | —(官方未提供) | Rehabilitation monitoring(场景概念) |
| 体力活动水平评估(整体任务) | —(行为因素而非诊断) | —(官方未提供) | Physical activity assessment(场景概念) |
注:官方未提供任何医学术语映射;上表为本页面基于通道语义的场景映射建议,仅限信息检索用途,不得用于临床编码。
§2.1b SNOMED CT 映射表
| 标签/场景 | ICD-11 | SNOMED CT 码 | 术语 |
|---|---|---|---|
| 心电监测(列 4-5) | — | 29303009 | Electrocardiogram |
| 步行活动(L4) | — | —(官方未提供;不建议自行套用步行功能码) | Walking(场景概念) |
| 体力活动量化(整体任务) | — | —(官方未提供) | Physical activity(场景概念) |
§2.2 医学背景简介与流行病学
MHEALTH 的医学价值锚定在体力活动与健康状况这一公共卫生命题上。世界卫生组织《身体活动和久坐行为指南》(2020)建议成年人每周进行 150-300 分钟中等强度有氧活动,并指出体力活动不足是心血管疾病、2 型糖尿病与全因死亡的重要可改变风险因素。量化「一个人在做什么、动了多少」因此成为慢病预防、康复随访与老年照护的基础能力——这正是人体活动识别(Human Activity Recognition, HAR)的临床出发点。
在这一命题下,可穿戴传感的价值链条是「连续感知 → 活动识别 → 活动量统计 → 行为干预」。MHEALTH 位于链条的「活动识别」环节:它提供的是带逐样本标签的多模态传感数据,正好覆盖了该环节建模所需的全部监督信号。链路上下游的数据集(上游如自由生活加速度计语料、下游如体力活动问卷与临床结局队列)与 MHEALTH 共同构成数字行为医学的证据基础;单独使用 MHEALTH 无法完成结局关联分析,这是引用其结论时应有的边界意识。
从生理信号角度看,MHEALTH 的 2 导联 ECG 提供了心脏电活动的体表记录,可用于基础心率监测、观察运动对心电的影响(UCI 官方描述);三部位惯性信号则刻画了人体运动的运动学特征。二者结合的场景——例如康复训练监测(弯腰、抬臂、屈膝各 20 次的协议设计明显带有康复处方色彩)、心肺康复中的运动强度分级——构成了该数据集向临床延伸的主要通道。
人群层面需要强调:MHEALTH 的 10 名受试者是格拉纳达大学的健康志愿者,官方未披露年龄、性别构成,也非任何疾病队列。因此它支撑的是方法学研究(算法、特征、评估协议),而非疾病流行病学统计或临床疗效推断。
§2.3 临床任务定义
在「筛查/诊断/分级/预后」四类临床任务框架下,MHEALTH 支持的任务均为筛查与监测级,而非诊断级:
| 临床任务 | MHEALTH 中的对应 | 定位 |
|---|---|---|
| 体力活动筛查 | 12 类活动逐样本分类,统计各类活动时长占比 | 筛查/监测:量化活动谱,支撑「动得够不够」的初级评估 |
| 康复训练监测 | 计数式活动(L6-L8、L12 各 20 次)的识别与计数 | 监测:处方依从性与动作完成度记录 |
| 运动强度分级 | 静态(站立/坐/躺)→ 低强度(步行)→ 高强度(跑步/跳跃)的层级分类 | 分级:与心率/ECG 形态变化交叉验证 |
| 跌倒风险评估 | 跳跃、楼梯、屈膝等高危动作的检出 | 筛查:面向老年照护的动作风险标签(需额外建模) |
| 心脏负荷观察 | 不同活动下的 ECG 形态/节律变化(探索性) | 观察:非诊断用途,需独立临床验证 |
定位提醒:以上任务全部属于「以活动为中心的健康筛查与监测」,MHEALTH 不含任何疾病终点、临床结局或诊断标签;将其结果外推为诊断性能属于方法学误用。
§2.4 患者人群表
| 维度 | 内容 |
|---|---|
| 来源机构 | 西班牙格拉纳达大学 CITIC-UGR |
| 采集时间 | 2014 年(具体月份未披露) |
| 人数 | 10 名志愿者 |
| 年龄 | 官方未披露 |
| 性别 | 官方未披露 |
| 种族 | 官方未披露 |
| 就医类型 | 非患者队列——健康志愿者,无疾病诊断信息 |
| 采集环境 | Out-of-lab(实验室外环境,无执行方式约束,尽力完成即可) |
| 纳入/排除标准 | 官方未披露(仅描述为「不同背景的志愿者」) |
| 伦理披露 | IRB/知情同意细节官方未披露(见 §7.4) |
人群信息的高度不透明是该数据集引用时最常见的审稿质疑点;在论文中使用 MHEALTH 时,建议将「人群信息缺失」明确写入 limitations,而不是默认读者已知。
§2.5 临床价值
MHEALTH 的临床价值不在「诊断某病」,而在为**以活动为中心的数字生物标志物(digital biomarker)**提供训练与验证底座。其三类协议设计分别对应三种临床场景:1 分钟稳定活动(站立、坐、躺、步行、爬楼、骑行、慢跑、跑步)支持体力活动谱量化,是慢病预防与运动处方随访的底层能力;20 次重复活动(弯腰、抬臂、屈膝、前后跳)天然映射康复训练计数与完成质量评估;穿插休息段(标签 0)则贴近真实佩戴场景中大量非标注时间的数据形态,可用于训练「拒识/切换检测」能力。
对数字健康产品而言,该数据集的三部位布局还回答了一个产品级问题:在成本受限、只能佩戴少数传感器时,哪些部位、哪些通道组合能保留最多的活动判别信息。官方明示 ECG 系为后续工作收集,社区因此形成了「惯性通道做识别、ECG 做辅助分析」的默认分工,这与真实可穿戴设备(手环/胸带)的功能划分一致。
从研究生态看,MHEALTH 与 PAMAP2、Opportunity、RealDisp 共同构成了 2014 年前后多模态 HAR 基准的「第一梯队」。它的差异化定位是单位与通道语义清晰、获取零门槛、体量单机可负担,因此常被用作消融实验与协议研究的主战场,而不是追求榜单数字的竞技场——这一角色定位也解释了为什么该数据集最重要的学术贡献之一是一篇评估方法学论文(IEEE Access 2020)而非某个具体 SOTA 模型。
§2.6 金标准表
| 维度 | 说明 |
|---|---|
| 标签划分方式 | 协议内建:按实验脚本将时间轴划分为 12 类活动段 + 休息段(标签 0),逐样本打标 |
| 标注方式 | 自动(协议驱动)——非逐样本人工标注 |
| 标注者 | 实验协议本身;每次会话另有摄像机记录以备核对(UCI 官方) |
| 标注性质 | 弱监督意义上的精确时间分段:段边界由实验脚本决定,段内逐样本继承段标签 |
| 一致性 | 不适用(无多个独立标注者;无标注者间一致性统计披露) |
| 二次标注 | 官方与社区均无公认的细粒度再标注版本(如重复计数、步态相位) |
§3 数据集规格
§3.0 版本抉择矩阵
MHEALTH 没有多个数据版本,但存在三条获取渠道,内容与许可存在差异:
| 你的需求 | 推荐渠道 | 大小 | 理由 |
|---|---|---|---|
| 完整 23 通道原始数据 + 严格可复现 | UCI 官方 ZIP | 72.1 MB | 唯一官方源,CC BY 4.0,全部 10 个 .log 文件 |
| Python 内直接加载、教学演示 | ucimlrepo API(id=319) | 在线拉取 | UCI 官方封装,fetch_ucirepo(id=319) 一行获取 |
| 只要加速度/陀螺子集做快速实验 | Kaggle 镜像(gaurav2022/mobile-health) | 较小 | CSV 单文件、易上手;但不含 ECG 与磁力计,且转载许可标注(CC0)与官方引用要求不同,正式研究请以 UCI 为准 |
§3.1 模态详情
| 设备位置 | 通道组 | 通道数 | 单位 | 说明 |
|---|---|---|---|---|
| 胸部(Shimmer2) | 三轴加速度 | 3 | m/s² | 列 1-3 |
| 胸部(Shimmer2) | 2 导联 ECG | 2 | mV | 列 4-5,官方明示未用于原始识别模型开发 |
| 左踝(Shimmer2) | 三轴加速度 + 三轴陀螺仪 + 三轴磁力计 | 9 | m/s²、deg/s、local | 列 6-14 |
| 右前臂/右腕(Shimmer2) | 三轴加速度 + 三轴陀螺仪 + 三轴磁力计 | 9 | m/s²、deg/s、local | 列 15-23 |
| 标签 | 活动标签 | 1 | 整数 0-12 | 列 24;0 为休息段(null class) |
全部模态以 50 Hz 同步采样,官方认为该频率足以捕捉人体活动(UCI 官方实验设置)。
模态分组与 AI 用途速查:
- 惯性组(21 通道):三个部位各 9 通道结构完全对称(acc + gyro + mag),天然支持「部位子集消融」——只取胸部 9 通道即可模拟单胸戴设备场景,取踝 + 臂 18 通道可研究下肢/上肢分工。
- 生理组(2 通道):ECG 双导联同步记录,是数据集中唯一的生理信号;官方定位为「未来工作」素材,社区主流做法是识别任务中将其排除或降权。
- 标签列(1 列):0-12 的整数,是全部监督信号的来源;标签的时间粒度等于采样帧(逐样本继承段标签),无需对齐操作。
一个常被忽视的细节:三台设备均为 Shimmer2 平台,意味着三组惯性通道的噪声特性、分辨率同源,跨部位对比时不需要为「设备异构」建模——这是 MHEALTH 相对于「手机 + 手环混装」类数据集在受控性上的优势。
§3.2 按子集样本数表
每个受试者一个连续日志文件,UCI 官方文件列表给出(前 5 大文件):
| 文件 | 大小 |
|---|---|
| mHealth_subject1.log | 28.6 MB |
| mHealth_subject9.log | 24.0 MB |
| mHealth_subject2.log | 23.3 MB |
| mHealth_subject8.log | 23.0 MB |
| mHealth_subject3.log | 21.7 MB |
其余 5 个文件同量级;单受试者日志合计约 21.7-28.6 MB 文本。按 50 Hz 折算,1 分钟稳定活动约对应 3,000 行样本;20 次重复型活动行数取决于完成速度;休息段(标签 0)在全量行数中占比较高(社区复现报告中总样本约百万行量级,见 Multi-Model Benchmarking-MHEALTH,非官方数字,仅供参考)。
行数自查公式(用于载入后验证):
1 分钟活动样本数 ≈ 60 s × 50 Hz = 3,000 行
单受试者活动段下限 ≈ 8 × 3,000 + 4 ×(20 次执行行数,经验上少于 1 分钟类)
载入后若单文件行数与文件大小/24 列文本宽度明显不符,应优先排查解析分隔符
以 subject1 的 28.6 MB 为参照:24 列空格分隔文本每行约 130-180 字节,据此推算单文件为十万行量级;用 wc -l 与 df.shape[0] 双向核对是防止解析截断的最低成本手段。
§3.3 格式表
| 渠道 | 格式 | 表头 | 分隔符 | 说明 |
|---|---|---|---|---|
| UCI 官方 ZIP | .log 纯文本 | 无 | 空格 | 每行 24 列(23 通道 + 标签),每受试者一个文件 |
| ucimlrepo API | pandas DataFrame | 有 | — | fetch_ucirepo(id=319) 返回 features/targets |
| Kaggle 镜像 | CSV 单文件 | 有 | 逗号 | 仅加速度 + 陀螺子集,不含 ECG/磁力计 |
§3.4 存储大小
- 官方 ZIP 下载包:72.1 MB(UCI 文件列表)。
- 解压后为 10 个纯文本 .log 文件,单文件 21.7-28.6 MB。
- 载入 pandas(float64)后内存占用约为文本体积的数倍,8 GB 内存机器即可全量处理,无需分布式。
- 派生资产的典型体量:50% 重叠滑窗后窗口数与行数同量级(float32 存储 (N, 23, 128) 张量约数 GB 以内),特征工程路线(每窗口每通道 8 统计量 → 184 维向量)则把数据压缩到兆级,是 CPU 训练路线的推荐存储形态(社区复现即采用该表示,见 §8.7)。
§3.5 标注方式
自动(协议内建)标注。活动段落由实验脚本预先定义:L1-L5、L9-L11 各执行 1 分钟,L6-L8、L12 各重复 20 次;活动之间穿插休息时段,对应标签 0。每行数据的标签由其所处时间段决定,属于协议驱动的逐样本继承标注。UCI 明确说明每次会话以摄像机记录,为标签核对提供了旁证材料。
§3.6 标注者资质与一致性
该数据集不存在逐样本人工标注环节,因此没有标注者资质与标注者间一致性(如 Cohen’s κ)的可披露信息。标签质量依赖实验协议的执行纪律(受试者「尽力完成」即可,不约束动作方式),段边界精度受脚本控制。使用者在论文中引用该数据集时应如实说明「协议标注、无人工逐样本复核」的性质。
§3.7 采集周期
数据于 2014 年采集并随 mHealthDroid 框架成果发布(IWAAL 2014,Belfast;方法学论文正式发表于 2015 年 8 月的 BioMedical Engineering OnLine 特刊,IWBBIO 2014 会议收录)。精确采集起止月份官方未披露。每位受试者完成单次会话(12 类活动 + 休息段),无纵向随访数据。
单次会话的时长可由协议推算下限:8 个 1 分钟活动 + 4 个 20 次重复活动 + 穿插休息,纯活动时间约 10-12 分钟,加上设备穿戴、讲解与休息段,单名受试者的现场投入估计在半小时量级(推断性描述,官方未披露会话总时长)。这意味着该数据集的全部信息来自约 10 人 × 单次会话的横截面快照——「横截面、单会话、无重复测量」三个属性共同决定了它无法支撑任何纵向(within-person over time)研究问题。
§3.8 地域覆盖
单中心:西班牙格拉纳达(Universidad de Granada,信息技术与通信研究中心 CITIC-UGR)。采集在 out-of-lab 环境进行,但受试者均来自同一机构,不构成跨地域样本。
§3.9 设备规格
- 传感平台:Shimmer2 可穿戴传感节点 × 3(官方文档引用 BUR10 平台文献),弹性绑带固定于胸部、左踝、右前臂。
- 采样率:50 Hz(全部模态统一)。
- 通道清单:每台 Shimmer2 提供三轴加速度、三轴陀螺仪、三轴磁力计各 9 通道;胸部设备额外提供 2 导联 ECG。合计 23 通道。
- 量程与校准:官方未公布加速度计量程、磁力计标定矩阵与同步精度参数;磁力计读数标注为 local(局部原始读数),未做世界坐标系对齐。
- 采集软件:开源 mHealthDroid 框架(Android 实现),负责传感器通信、数据获取与持久化存储。
Shimmer2 是 2010 年代初学术 wearable 研究的主流平台(无线体域网传感节点,支持加速度计、陀螺仪、磁力计、ECG 等模块化配置),MHEALTH 中三台同型设备以弹性绑带固定,官方配图与论文给出了佩戴示意。对使用者的含义是:通道噪声水平与分辨率在三个部位之间同源可比;但也意味着该数据集的信号特征反映的是 2014 年代传感器的工艺水平,与当代消费级 IMU(如手机 MEMS)在噪声谱与漂移特性上存在代际差异,做跨设备迁移时应把设备代差视为域偏移的一部分。
§3.10 深度溯源链
| 层级 | 主体 | 证据 |
|---|---|---|
| 数据收集 | 格拉纳达大学 CITIC-UGR 团队(Banos、Garcia、Saez 等),mHealthDroid 框架 | IWAAL 2014 论文(Springer,pp. 91-98) |
| 方法学定稿 | 同团队 + 庆熙大学(韩国)合作 | BioMedical Engineering OnLine 2015, 14(Suppl 2):S6 |
| 数据托管 | UCI 机器学习库(编号 319) | DOI 10.24432/C5TW22,CC BY 4.0 |
| 官方引用请求 | Banos, O., Garcia, R., & Saez, A. (2014). MHEALTH [Dataset] | UCI 页面 Citation 栏 |
§3.11 与同类数据集的规格对齐差异
做跨数据集迁移或合并训练前,先核对下表中的规格差异——每一项都是真实的对齐工作量:
| 规格项 | MHEALTH | PAMAP2 | RealDisp | 对齐含义 |
|---|---|---|---|---|
| 采样率 | 50 Hz | 100 Hz | 100 Hz | 需重采样(升/降采样引入插值伪迹) |
| 加速度单位 | m/s² | m/s² | 以数据文档为准 | 同为 m/s² 的可直接合并 |
| 陀螺仪单位 | deg/s | deg/s | 以数据文档为准 | 一致;若迁移到弧度制需统一 |
| 磁力计 | 有(local 未标定) | 有(16 g/6 g 可选配置) | 无 | 磁力计通道不可跨集复用 |
| ECG | 2 导联 | 无(仅心率值) | 有 | 心率与 ECG 不同语义,不可互换 |
| 佩戴部位 | 胸/左踝/右前臂 | 胸/手腕/脚踝(手踝) | 单胸 | 部位近似但绑带位置与朝向不同 |
| 标注结构 | 逐样本标签(含 null) | 逐样本标签(含 activity 0) | 连续会话分段 | null 类语义需逐集核对 |
| 受试者数 | 10 | 9 | 10 | LOSO 折数不同,结果不可直接比 |
实践建议:合并训练前先在各自数据集内独立复现官方级基线,再引入跨集迁移组件,否则无法归因性能变化来自「域偏移」还是「对齐误差」。
§4 数据结构
§4.0 目录树
MHEALTH/
└── MHEALTHDATASET/
├── mHealth_subject1.log # 受试者 1 连续日志,24 列无表头
├── mHealth_subject2.log
├── mHealth_subject3.log
├── mHealth_subject4.log
├── mHealth_subject5.log
├── mHealth_subject6.log
├── mHealth_subject7.log
├── mHealth_subject8.log
├── mHealth_subject9.log
└── mHealth_subject10.log
解压后所有数据文件位于 MHEALTHDATASET/ 目录下,无嵌套子目录、无配套数据字典文件——列语义以 UCI 页面文字描述为准(注意其列号笔误,见坑点 3)。
§4.1 DAIMS 字段字典
每行 24 列,无表头、空格分隔、无时间戳列(时间轴隐含为 50 Hz 等间隔行序)。核心字段:
| 字段(列序) | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| chest_acc_x/y/z(1-3) | float | 胸部三轴加速度 | -3.911 0.754 -0.723 | 静态/动态判别主特征 | 传感器噪声、绑带松紧漂移 | 无缺失值机制 | 官方未公布量程 |
| ecg_lead_1(4) | float | ECG 导联 1 | -0.641 | 心脏负荷辅助分析 | 运动伪影、基线漂移 | 无 | 官方未公布量程 |
| ecg_lead_2(5) | float | ECG 导联 2 | -4.636 | 同上 | 同上 | 无 | 官方未公布量程 |
| ankle_acc_x/y/z(6-8) | float | 左踝三轴加速度 | 5.339 3.549 2.697 | 步态/下肢动作特征 | 落地冲击饱和 | 无 | 官方未公布量程 |
| ankle_gyro_x/y/z(9-11) | float | 左踝三轴角速度 | 77.744 -28.52 -25.63 | 旋转动作(爬楼、屈膝) | 陀螺零漂 | 无 | 官方未公布量程 |
| ankle_mag_x/y/z(12-14) | float | 左踝三轴磁场(local) | -205.0 -41.03 -88.09 | 朝向粗判(未标定) | 硬/软磁畸变、环境磁场 | 无 | 官方未公布量程 |
| arm_acc_x/y/z(15-17) | float | 右前臂三轴加速度 | 2.848 4.202 1.306 | 上肢动作(抬臂、弯腰) | 同胸部 | 无 | 官方未公布量程 |
| arm_gyro_x/y/z(18-20) | float | 右前臂三轴角速度 | 12.603 -27.791 -38.649 | 上肢旋转特征 | 陀螺零漂 | 无 | 官方未公布量程 |
| arm_mag_x/y/z(21-23) | float | 右前臂三轴磁场(local) | 128.0 -26.0 -73.0 | 朝向粗判(未标定) | 同左踝 | 无 | 官方未公布量程 |
| label(24) | int | 活动标签 | 5 | 监督目标 | 段边界由脚本决定 | 0 = 休息段(null class,非缺失) | 0-12 |
注意:UCI 官方列描述中「Column 13」出现两次、缺列 12 编号,为文档笔误;实际数据为 24 列连续整数列,以本表语义为准(见坑点 3)。
§4.2 标签分布
标签取值 0-12,共 13 个取值。逐值语义与预期体量:
| 标签 | 活动 | 协议 | 单次预期行数(@50 Hz) | 备注 |
|---|---|---|---|---|
| 0 | 休息(null class) | 活动间穿插 | 非固定,累计占比高 | 仅见于列描述,UCI 活动表未列出 |
| 1 | 站立 | 1 min | ≈3,000 | 静态 |
| 2 | 坐姿放松 | 1 min | ≈3,000 | 静态 |
| 3 | 躺卧 | 1 min | ≈3,000 | 静态 |
| 4 | 步行 | 1 min | ≈3,000 | 动态 |
| 5 | 爬楼梯 | 1 min | ≈3,000 | 动态,与步行易混 |
| 6 | 体前屈 | 20 次 | 取决于执行速度 | 计数型 |
| 7 | 双臂前平举 | 20 次 | 取决于执行速度 | 计数型,上肢特征主导 |
| 8 | 屈膝下蹲 | 20 次 | 取决于执行速度 | 计数型 |
| 9 | 骑行 | 1 min | ≈3,000 | 动态 |
| 10 | 慢跑 | 1 min | ≈3,000 | 动态 |
| 11 | 跑步 | 1 min | ≈3,000 | 动态,强度最高 |
| 12 | 前后跳 | 20 次 | 取决于执行速度 | 计数型,样本最少的一类 |
结构性结论:
- 标签 0(null class):活动之间的全部休息时段。这是全量行数中占比最高的取值,但 UCI 活动表中未列出该类——它只出现在列描述的第 24 列说明里(“0 for the null class”),初学者极易遗漏。
- 结构性不平衡:8 个 1 分钟类活动合计约 24,000 行,4 个重复型活动行数显著更少(其中「前后跳」通常最少),静态类(1/2/3)与步行类(4/9/10/11)之间存在由执行时长带来的量级差异。建模前应统计并决策(类权重、重采样或窗口级平衡,见坑点 7)。
- IEEE Access 2020 将 null-class dominance 列为 HAR 建模的核心困难之一——在含 null 的口径下,大类 Accuracy 会被 null 段显著抬高,这正是该综述主张 LOSOCV + 明确类口径的原因。
§4.3 关键统计
| 统计项 | 数值 | 备注 |
|---|---|---|
| 受试者数 | 10 | 每人一个日志文件 |
| 传感器通道 | 23 | 21 惯性 + 2 ECG |
| 标签取值 | 13 个(0-12) | 0 为 null class |
| 采样率 | 50 Hz | 全模态统一 |
| 官方下载包 | 72.1 MB | 10 个 .log 文件 |
| 缺失值 | 官方未报告缺失值机制 | 空格分隔完整行 |
| 时间戳列 | 无 | 行序隐含 50 Hz 等间隔 |
| 会话结构 | 每受试者 1 次连续会话 | 无重复访问、无纵向数据 |
| 活动协议 | 8 类 × 1 min + 4 类 × 20 次 | 见 §4.2 逐值表 |
§4.4 数据层级
数据集
├── 受试者(subject 1-10)—— 文件级隔离,无跨文件行
│ └── 会话(session × 1)—— 单次连续记录
│ └── 采样行(sample)—— 50 Hz 逐行,24 列
│ └── 时间窗口(window)—— 由滑窗构造,非原生结构
与医学影像类数据集「患者→检查→序列→切片」的四层结构不同,MHEALTH 是三层结构 + 一个派生层:受试者 → 会话 → 采样行;模型训练中常见的「窗口」单位并不存在于原始数据,需自行滑窗构造,且窗口边界处理直接决定泄漏风险(见 §5.3)。
这一层级结构对工程实现的直接约束是:受试者是唯一可靠的自然分组键。文件名即受试者 ID,跨文件不存在任何行级关联;任何「把 subject 列丢弃后随机打乱」的操作都会不可逆地破坏分组信息,进而使 LOSO 评估失效。因此建议在数据入库阶段就把 subject 列物化为表字段(§6.4 的 build_loaders 即如此实现),而不是依赖文件名约定。
§4.5 缺失值与信息性缺失编码
- 缺失值:官方未报告缺失值机制,日志为等行宽文本,
pd.read_csv正常解析即无 NaN。 - 信息性缺失编码:唯一需要区分的是标签 0——它不是「缺失」而是显式的 null class(休息段),与「该时刻无活动标注」语义不同。处理策略须在实验设计阶段明确:丢弃(12 类任务)、保留为第 13 类(13 类任务)或作为拒识目标(开放集识别),三者报告的指标不可比较。
- 隐性质量问题(非缺失但需清洗):ECG 基线漂移与剧烈活动段运动伪影;磁力计未标定的环境磁场畸变;陀螺仪零漂。这些不影响行完整性,但影响通道可用性。
§4.6 常见载入错误诊断
| 症状 | 根因 | 修复 |
|---|---|---|
ValueError: 3 columns passed, passed data had 24 |
用了逗号分隔解析空格分隔文本 | sep=r"\s+"(官方为空格分隔无表头) |
| 某文件解析出 25 列或行宽不一 | 文件被截断或混合了 CRLF/多余空格 | 逐文件 wc -l/awk 检查行宽分布 |
| 标签分布里出现 0 而统计只有 12 类 | 忘记 null class | 按 §4.2 明确类口径(12 类过滤 or 13 类保留) |
| 「磁力计」特征方差异常大 | 按官方列号笔误起名导致通道错位 | 用整数列名 + 本地 schema(见坑点 3) |
| 行数与文件大小对不上 | 只读了一个受试者文件当作全量 | 循环读入 10 个文件并合并 subject 列 |
诊断顺序建议:先验证 df.shape[1] == 24,再验证标签取值集合 ⊆ {0-12},最后按 §3.2 的自查公式核对行数量级——三步即可拦截绝大多数载入事故。
§5 划分与使用建议
§5.1 官方划分
不存在。UCI 与原始论文均未提供训练/验证/测试划分,仅提供每受试者独立文件。任何论文报告的数字都隐含其自行选择的划分协议,跨论文比较前必须核对协议(见 §8.3)。
这一点的实际含义是:MHEALTH 上的「SOTA」不是数据集属性,而是「划分协议 + 类口径 + 窗口参数」三元组的属性。复现任何论文前,先从其实现代码或附录确认三元组,再谈数字;引用任何数字时,先声明协议再给数值。
§5.2 社区惯例划分
- 留一受试者交叉验证(LOSOCV / LOSO):10 折,每折留 1 名受试者做测试,其余 9 名训练。这是 2020 年后被广泛认可的主协议(Gholamiangonabadi et al., 2020 用其揭示随机划分的虚高)。
- 留出末尾受试者:如以 subject 8-10 做测试(社区复现常用),结果与 LOSO 接近但更省算力。
- 随机 10 折交叉验证:历史论文常见,但已被证明产生严重泄漏虚高(99.85% vs LOSO 85.1%),新研究不应再单独采用。
- 个体依赖(user-dependent)评估:每人单独建模或「训练含测试者自身数据」,报告的是上界而非泛化能力(Subasi 等报告的 99.89% 属此类)。
- 时间感知留出:以会话后段(如最后 1-2 个活动段)做测试,评估模型对时间漂移的稳健性;与 LOSO 结论互为补充,但不可替代后者。
§5.3 划分策略建议与泄漏风险 ⭐
MHEALTH 的泄漏风险有三层,逐层封堵:
- 窗口内泄漏:50% 重叠滑窗使相邻窗口共享 64 个样本;若同一受试者的重叠窗口分入训练与测试两侧,测试集形同背题。封堵:窗口生成在受试者内部完成,划分只发生在受试者层面。
- 受试者泄漏:随机划分把同一人的数据同时放进训练与测试。封堵:以受试者 ID 为分组键做 LOSO/分组划分(
GroupKFold、LeaveOneGroupOut)。 - 边界泄漏:活动段切换处(如步行→爬楼)的过渡窗口同时含两类信号,段边界又由脚本硬切,真实场景中该边界是未知的。封堵:测试侧丢弃跨段窗口,或按段内纯窗口评估(社区复现采用「仅保留单活动纯窗口」做法)。
- 标准化泄漏:在全量数据上计算标准化均值/方差,会让测试受试者的统计信息渗入训练。封堵:标准化统计量只在训练受试者上计算(§6.3 代码即按此实现)。
§5.4 交叉验证建议
- 主指标协议:10 折 LOSO,报告均值 ± 标准差与宏平均 F1(类不平衡下优于 accuracy)。
- 验证集:从 9 名训练受试者中再留 1-2 名做早停与调参,切勿用测试受试者调参——这是 LOSO 协议下最常见的二次泄漏。
- 窗口建议:128 样本(2.56 秒)起步,重叠 50%;消融 64/128/256 后固定报告。
- 折级完整性:每折记录「训练/测试受试者 ID、窗口数、类分布」三要素,任何一折类分布畸变(如某折测试者恰好缺失多个类别)都应单独报告而非混入均值。
§5.5 外部验证建议
单中心 10 人数据无法证明跨机构泛化。建议:在 MHEALTH 上完成算法验证后,接入 PAMAP2 或 RealDisp 做跨数据集迁移测试(注意采样率 50 Hz vs 100 Hz、通道布局差异需做对齐层);产品化场景应再采集自有目标人群数据做验证集,MHEALTH 仅承担预训练/基准回归角色。
若目标是发表方法学论文,可考虑「MHEALTH 训练 + PAMAP2 测试」与「PAMAP2 训练 + MHEALTH 测试」的双向迁移设计,并按 §3.11 的规格差异表逐项披露对齐决策——目前社区在双向迁移上的空白本身就是可发表的增量贡献。
§6 AI 就绪指南
§6.0 云端快速启动
UCI 官方提供 ucimlrepo Python 包,Colab/Kaggle 环境无需手动下载文件即可载入:
# pip install ucimlrepo
from ucimlrepo import fetch_ucirepo
# 官方一行获取(id=319 对应 MHEALTH)
mhealth = fetch_ucirepo(id=319)
X = mhealth.data.features # 23 通道 DataFrame
y = mhealth.data.targets # 标签 DataFrame
print(mhealth.metadata) # 元数据
print(mhealth.variables) # 变量说明
适合快速验证;正式实验建议下载官方 ZIP(下一节),以便固定数据版本与行序。
§6.1 快速上手
# 目录结构预期(UCI ZIP 解压后):
# data_root/
# └── MHEALTHDATASET/
# ├── mHealth_subject1.log
# ├── ...
# └── mHealth_subject10.log
# data_root 拼接关系:data_root + "MHEALTHDATASET/mHealth_subject{i}.log"
# 最小可用子集:单个 subject 文件即可跑通全部预处理与滑窗流程(约 20-30 MB 文本)
import pandas as pd
data_root = "/path/to/mhealth" # 指向 ZIP 解压目录
COLS = [
"chest_acc_x", "chest_acc_y", "chest_acc_z", # 1-3 胸部加速度
"ecg_lead1", "ecg_lead2", # 4-5 ECG
"ankle_acc_x", "ankle_acc_y", "ankle_acc_z", # 6-8 左踝加速度
"ankle_gyro_x", "ankle_gyro_y", "ankle_gyro_z", # 9-11 左踝陀螺
"ankle_mag_x", "ankle_mag_y", "ankle_mag_z", # 12-14 左踝磁力
"arm_acc_x", "arm_acc_y", "arm_acc_z", # 15-17 右前臂加速度
"arm_gyro_x", "arm_gyro_y", "arm_gyro_z", # 18-20 右前臂陀螺
"arm_mag_x", "arm_mag_y", "arm_mag_z", # 21-23 右前臂磁力
"label", # 24 活动标签(0=null)
]
df = pd.read_csv(
f"{data_root}/MHEALTHDATASET/mHealth_subject1.log",
sep=r"\s+", header=None, names=COLS,
)
print(df.shape) # (行数, 24)
print(df["label"].value_counts().sort_index()) # 0-12 各类行数
§6.2 数据获取
| 项 | 内容 |
|---|---|
| 官方下载页 | UCI MHEALTH |
| 直链 ZIP | https://archive.ics.uci.edu/static/public/319/mhealth+dataset.zip |
| 大小 | 72.1 MB |
| 许可 | CC BY 4.0(署名即可商用/修改) |
| 申请流程 | 无需注册、无需 DUA |
| 版本固定 | 2014 原始发布版,无修订版;建议记录下载日期 |
| 附加礼仪 | 原作者请求:发表论文使用该数据集时邮件告知 oresti.bl@gmail.com(DBDP 收录说明) |
# 命令行获取(约 72.1 MB)
wget -c https://archive.ics.uci.edu/static/public/319/mhealth+dataset.zip
unzip mhealth+dataset.zip -d data_root/
§6.3 预处理全流程
<details>
<summary>完整预处理脚本(读取 → 清洗 → 滑窗 → 标准化 → LOSO 划分,约 60 行)</summary>
import numpy as np
import pandas as pd
from pathlib import Path
SUBJECTS = range(1, 11)
WIN, STRIDE = 128, 64 # 2.56 s 窗口,50% 重叠
def load_subject(data_root: str, sid: int) -> pd.DataFrame:
"""读取单受试者日志并附加 subject 列。"""
cols = 23 * ["sensor"] + ["label"] # 具体列名见 §6.1
path = Path(data_root) / "MHEALTHDATASET" / f"mHealth_subject{sid}.log"
df = pd.read_csv(path, sep=r"\s+", header=None)
df.columns = range(df.shape[1]) # 先用整数列名,避免笔误干扰
df["subject"] = sid
return df
def make_windows(df: pd.DataFrame, win: int = WIN, stride: int = STRIDE):
"""滑窗:仅保留段内纯窗口(单标签),丢弃跨段与 null 段可按任务选择。"""
X, y, g = [], [], []
vals = df.iloc[:, :23].to_numpy(np.float32)
lab = df.iloc[:, 23].to_numpy(np.int64)
sub = df["subject"].to_numpy()
for start in range(0, len(df) - win + 1, stride):
seg = lab[start:start + win]
if seg.min() != seg.max():
continue # 跨活动段边界,丢弃
if seg[0] == 0:
continue # 12 类任务:丢弃 null 窗口
X.append(vals[start:start + win])
y.append(seg[0])
g.append(sub[start])
return np.stack(X), np.array(y), np.array(g)
def split_loso(X, y, g, test_subject: int):
"""留一受试者划分:标准化统计量只来自训练受试者。"""
tr, te = g != test_subject, g == test_subject
mu, sd = X[tr].mean(axis=(0, 1), keepdims=True), X[tr].std(axis=(0, 1), keepdims=True) + 1e-8
return (X[tr] - mu) / sd, y[tr], (X[te] - mu) / sd, y[te]
if __name__ == "__main__":
frames = [load_subject("data_root", s) for s in SUBJECTS]
X, y, g = map(np.concatenate, zip(*[make_windows(f) for f in frames]))
print("窗口总数:", X.shape, "类分布:", np.bincount(y)[1:])
Xtr, ytr, Xte, yte = split_loso(X, y, g, test_subject=10)
print("训练/测试:", Xtr.shape, Xte.shape)
</details>
流程要点:① 以整数列名读取,杜绝 UCI 文档笔误干扰;② 窗口纯度检查(段内单标签)在受试者内部完成;③ 标准化统计量只取自训练受试者;④ null 段的取舍必须与报告口径一致。
§6.4 PyTorch DataLoader
<details>
<summary>完整可运行 Dataset + DataLoader(约 55 行)</summary>
import numpy as np
import torch
from torch.utils.data import Dataset, DataLoader
class MHealthWindowDataset(Dataset):
"""输入为 §6.3 产出的窗口数组(N, 128, 23)+ 标签 + 受试者分组。"""
def __init__(self, X: np.ndarray, y: np.ndarray, jitter_sigma: float = 0.0):
self.X = torch.from_numpy(X.astype(np.float32)).permute(0, 2, 1) # (N, 23, T)
self.y = torch.from_numpy(y.astype(np.int64)) - 1 # 标签映射到 0-11
self.jitter_sigma = jitter_sigma # 训练侧轻微高斯抖动
def __len__(self):
return len(self.y)
def __getitem__(self, idx):
x = self.X[idx]
if self.jitter_sigma > 0:
x = x + torch.randn_like(x) * self.jitter_sigma
return x, self.y[idx]
def build_loaders(data_root: str, test_subject: int = 10, batch_size: int = 256):
from pathlib import Path
import pandas as pd
frames = []
for sid in range(1, 11):
p = Path(data_root) / "MHEALTHDATASET" / f"mHealth_subject{sid}.log"
df = pd.read_csv(p, sep=r"\s+", header=None)
df.columns = range(df.shape[1])
df["subject"] = sid
frames.append(df)
full = pd.concat(frames, ignore_index=True)
# 滑窗(同 §6.3,此处压缩展示)
win, stride = 128, 64
X, y, g = [], [], []
vals = full.iloc[:, :23].to_numpy(np.float32)
lab = full.iloc[:, 23].to_numpy(np.int64)
sub = full["subject"].to_numpy()
for start in range(0, len(full) - win + 1, stride):
seg = lab[start:start + win]
if seg.min() != seg.max() or seg[0] == 0:
continue
X.append(vals[start:start + win]); y.append(seg[0]); g.append(sub[start])
X, y, g = np.stack(X), np.array(y), np.array(g)
tr, te = g != test_subject, g == test_subject
mu, sd = X[tr].mean(axis=(0, 1), keepdims=True), X[tr].std(axis=(0, 1), keepdims=True) + 1e-8
Xtr, Xte = (X[tr] - mu) / sd, (X[te] - mu) / sd
train_ds = MHealthWindowDataset(Xtr, y[tr], jitter_sigma=0.01)
test_ds = MHealthWindowDataset(Xte, y[te])
return (
DataLoader(train_ds, batch_size=batch_size, shuffle=True, num_workers=2, pin_memory=True),
DataLoader(test_ds, batch_size=batch_size, shuffle=False, num_workers=2),
)
if __name__ == "__main__":
train_loader, test_loader = build_loaders("data_root", test_subject=10)
for xb, yb in train_loader:
print(xb.shape, yb.shape) # (256, 23, 128) (256,)
break
</details>
§6.5 坑点 8 个
⚠️ 坑点 1:随机滑窗划分制造 99% 假象(分类:评估误用)
问题:MHEALTH 是连续流日志,相邻样本高度自相关;随机划分 + 重叠滑窗会让几乎相同的窗口同时出现在训练与测试集,模型记住的是「人」而不是「活动」。
症状:测试准确率 99%+ 且混淆矩阵近乎完美;换成真实新用户后性能崩塌。
解决:
- 简单方法:按受试者分组划分(
GroupKFold(groups=subject)或 LOSO),同一受试者的所有窗口只出现在一侧。- 进阶方法:LOSOCV 10 折 + 训练侧再留受试者做早停;窗口纯度过滤(单标签窗口才保留)。
- SOTA 方法:LOSO 之上叠加个性化/域自适应(subject-invariant 表征学习),报告「泛化基线」与「个性化上界」两个口径。
参考:Gholamiangonabadi, Kiselov & Grolinger, 2020, IEEE Access, 8:133982-133994——同一 CNN 在 10 折 CV 下 99.85%,LOSOCV 下 85.1%,相差 14.7 个百分点。
⚠️ 坑点 2:标签 0(null class)被忽视(分类:标签理解)
问题:UCI 活动表只列 L1-L12,但数据第 24 列取值为 0-12;活动之间的休息段全部标注为 0,且在全量行数中占比很高。IEEE Access 2020 明确指出 null-class dominance 是 HAR 建模的核心困难之一。
症状:直接训练得到 13 类模型,准确率虚高(null 段信号平稳、极易区分);或不同论文一个含 null 一个不含,数字完全不可比。
解决:
- 简单方法:12 类任务先过滤
df = df[df["label"] != 0],并在论文中写明口径。- 进阶方法:把 null 作为第 13 类保留,评估「在线场景下模型能否拒识非活动段」。
- SOTA 方法:开放集识别——训练 12 类闭集,部署时以能量/阈值拒识 null 段,报告闭集与开集两套指标。
参考:UCI 官方列描述(“0 for the null class”);Gholamiangonabadi et al., 2020。
⚠️ 坑点 3:UCI 官方列描述的列号笔误(分类:工程陷阱)
问题:UCI 官方页面列描述中「Column 13」出现两次、缺列 12 的编号;按文档逐列起名会造成磁力计与陀螺通道错位,且该笔误已被多个第三方复刻文档继承。
症状:磁力计通道方差分布与其他论文统计不符;下游模型对「左踝磁力计」特征的重要性排序异常。
解决:
- 简单方法:以整数列名读取(
range(df.shape[1])),仅依赖列序(1-24)而非文档列号。- 进阶方法:通道语义自验——静止段三轴陀螺读数应近 0、加速度模长近重力分量;据此校验 9-11 与 12-14 的边界。
- SOTA 方法:建立本地 schema 文件(列名 + 单位 + 语义)并纳入版本控制,任何外部数据源入库前先过 schema 校验。
参考:UCI 官方页面列描述;本 Wiki §4.1 已给出修正后的 24 列语义。
⚠️ 坑点 4:单位与坐标系暗坑(分类:预处理陷阱)
问题:MHEALTH 加速度单位是 m/s²(非 g)、陀螺是 deg/s、磁力计是 local 原始读数(未标定、未对齐世界系);三台设备各自摆放,坐标轴之间没有全局对齐。跨数据集迁移(如与以 g 为单位的 WISDM 类数据混合)或跨设备迁移时,单位与坐标系语义直接错位。
症状:标准化后特征尺度仍异常;在 A 数据集训练的模型换到 B 数据集性能骤降;模长特征在不同数据集间不可比。
解决:
- 简单方法:建立单位换算层(m/s² ↔ g × 9.80665;deg/s ↔ rad/s × π/180),统一后再进模型。
- 进阶方法:以模长/垂直-水平分解等旋转不变特征替代原始三轴,规避坐标轴未对齐问题。
- SOTA 方法:用重力方向估计(低通滤波或四元数积分)把三轴加速度分解到机体坐标系与重力坐标系两套表示,输入双流网络。
参考:UCI 官方单位说明(Acceleration m/s²、gyroscope deg/s、magnetic field local、ecg mV)。
⚠️ 坑点 5:ECG 通道不是「现成的」生理信号(分类:预处理陷阱)
问题:官方明示 ECG「未用于识别模型开发,为 future work 目的收集」;剧烈活动(跑步、跳跃)下胸部电极运动伪影显著,且导联信号含直流基线漂移。直接把 ECG 列与惯性列拼接进分类器,或直接用它算心率,都会得到不可靠结果。
症状:ECG 特征在跑步/跳跃类上出现巨幅离群值;由 ECG 估计的心率在活动切换时跳变失真。
解决:
- 简单方法:对 ECG 单独走带通滤波链(去除基线漂移与高频噪声)后再提特征;剧烈活动段不使用 ECG 特征。
- 进阶方法:按活动强度分层使用——静息/慢速类(站、坐、躺、步行)才启用 ECG 分析,剧烈类仅用惯性通道。
- SOTA 方法:把 ECG 形态质量(信噪比、R 波检出置信度)作为门控输入,模型按质量动态加权 ECG 分支。
参考:UCI 官方描述;Banos et al., 2015, BioMedical Engineering OnLine。
⚠️ 坑点 6:个体依赖评估的 99.89% 迷惑(分类:偏倚陷阱)
问题:MHEALTH 只有 10 名受试者,个体间信号差异大。user-dependent 协议(每人单独建模)报告的高分(如 SVM/RF 99.89%)反映的是对已见用户的记忆,不是对新用户的泛化;直接引用会系统性高估产品在真实新用户上的表现。
症状:论文间数字差距悬殊(93.9% vs 99.89% vs 85.1%)却无法解释;按高分做的选型在新用户试点中失效。
解决:
- 简单方法:所有结论只引用 LOSO 口径数字,user-dependent 数字仅作上界参考并明确标注。
- 进阶方法:报告两种口径的差值作为「个性化空间」指标,用于评估值得投入多少个性化机制。
- SOTA 方法:subject-invariant 对抗学习或 federated 个性化,把个体差异从特征空间中剥离后再评估。
参考:Subasi 等用户依赖实验(转引自 Gholamiangonabadi et al., 2020, IEEE Access);Uddin & Hassan 的 user-dependent CNN 93.9%(同综述转引)。
⚠️ 坑点 7:活动时长协议带来的类不平衡(分类:标签理解)
问题:8 类活动各 1 分钟、4 类活动各 20 次,行数与窗口数天然不平衡;静态类(站/坐/躺)与跳跃类相差可达一个数量级。以样本行计数的宏平均会被大类主导。
症状:accuracy 很高但「跳跃」「前后跳」类 F1 接近 0;宏平均 F1 与 accuracy 差距巨大。
解决:
- 简单方法:以窗口为单位统计类分布,训练加 class weight(交叉熵权重 = 1/类频率)。
- 进阶方法:LOSOCV 折内做分层采样 + 对重复类活动做时间增强(多起点滑窗),避免折间口径漂移。
- SOTA 方法:focal loss + 类平衡采样器,并按类报告 per-class F1 与混淆矩阵,而非只报总体。
参考:UCI 活动协议(L1-L12 时长/次数定义);DGIST U-Net 研究中 Walking 仅约 50% 准确率且误判为 Cycling 的类级证据。
⚠️ 坑点 8:UCI「Instances: 120」与镜像源的误导(分类:工程陷阱)
问题:UCI 页面 Instances 栏写着 120——那是 10 名受试者 × 12 类活动的会话计数,不是样本总数(真实形态是百万行量级的连续流日志);同时 Kaggle 镜像只含加速度/陀螺子集且许可标注(CC0)与官方(CC BY 4.0)署名要求不同。按 120 设计实验或只依赖镜像,都会让研究不可复现、不可引用。
症状:数据载入后行数与预期「120」差几个数量级;审稿人指出缺少 ECG/磁力计通道或引用许可不符。
解决:
- 简单方法:一切规模口径以官方 .log 文件为准;Instances=120 仅作为会话数理解。
- 进阶方法:下载官方 ZIP 后校验 SHA、锁定 10 个文件清单与大小(21.7-28.6 MB),实验配置中写明数据版本(2014 原始发布版)。
- SOTA 方法:数据版本管理工具(DVC 等)把官方 ZIP 入库,实验记录关联数据哈希,保证跨团队复现。
参考:UCI 官方页面;Kaggle 镜像说明。
§6.6 数据增强
| 类别 | 操作 | 说明 |
|---|---|---|
| ✅ 安全 | 轻微高斯抖动(σ≈0.01) | 模拟传感器噪声,不改变活动语义 |
| ✅ 安全 | 随机起点滑窗(窗内等间隔平移) | 等效于时间平移,段内纯窗口前提下安全 |
| ✅ 安全 | 通道 dropout(随机屏蔽 1-2 个通道) | 模拟佩戴不稳/单设备失效,提升鲁棒性 |
| ✅ 安全 | 幅度缩放(0.9-1.1) | 模拟个体运动幅度差异,保持单位语义 |
| ❌ 危险 | 对 ECG 任意时移/翻转 | 破坏心电时序语义(R 波、ST 段),产生生理上不存在的波形 |
| ❌ 危险 | 跨受试者拼接窗口 | 制造训练中不存在的「混合个体」,破坏 LOSO 评估意义 |
| ❌ 危险 | 非线性时间扭曲过强(>20%) | 显著改变活动节奏,可能把步行扭成爬楼 |
| ❌ 危险 | 对 null 段做增强并混入训练后删标签 | 破坏类口径一致性,评估集污染 |
§6.7 模型推荐表
| 模型 | 类型 | 适配理由 | 参考成绩口径 |
|---|---|---|---|
| CNN-1D(2 层卷积) | 监督学习 | IEEE Access 2020 的 LOSO 冠军架构,简单可复现 | LOSO 85.1% |
| DeepConvLSTM 类 | 监督学习 | 卷积 + 循环捕获多通道时空依赖,多模态标准选择 | 需自行实现 LOSO |
| XGBoost(窗口统计特征) | 传统 ML | 特征工程基线强,Galway 对照实验中接近深度模型 | 89.97%(该论文协议) |
| MLP(窗口特征) | 传统 ML | 同上,Galway 对照实验最优 | 90.55%(该论文协议) |
| 密集预测 U-Net 类 | 序列建模 | 逐样本输出,直接利用连续流形态,DGIST 2025 在 MHEALTH 验证 | 92.59%(该论文协议) |
| Naive Bayes / KNN(窗口特征) | 传统 ML | 教学基线与快速 sanity check,社区复现已给出口径 | 非官方排行(GitHub 复现口径) |
§6.8 硬件需求表
| 配置 | 适用场景 | 说明 |
|---|---|---|
| CPU(8 核 + 16 GB 内存) | 特征工程 + XGBoost/MLP 全量 LOSO | 数据集约 72 MB 文本、百万行量级,pandas/NumPy 单机可行 |
| 单张 8 GB GPU(如 RTX 3060) | CNN-1D / 小型 LSTM LOSO 10 折 | 每折分钟级,全协议小时级 |
| 单张 24 GB GPU(如 RTX 4090) | DeepConvLSTM / U-Net 密集预测 + 调参 | 窗口张量 (N, 23, 128) 轻量,瓶颈在 LOSO 折数而非单折 |
§6.9 评估指标代码
import numpy as np
from sklearn.metrics import (f1_score, classification_report,
confusion_matrix)
def evaluate(y_true: np.ndarray, y_pred: np.ndarray) -> dict:
"""MHEALTH 标准评估口径:12 类(标签 1-12),宏平均为主指标。"""
labels = list(range(1, 13)) # 对齐 §6.4 的 0-11 映射则用 range(12)
return {
"accuracy": float((y_true == y_pred).mean()),
"macro_f1": f1_score(y_true, y_pred, labels=labels, average="macro", zero_division=0),
"weighted_f1": f1_score(y_true, y_pred, labels=labels, average="weighted", zero_division=0),
"per_class_report": classification_report(y_true, y_pred, labels=labels, zero_division=0),
"confusion_matrix": confusion_matrix(y_true, y_pred, labels=labels).tolist(),
}
def loso_summary(per_fold_scores: list[float]) -> str:
"""LOSO 10 折汇总:均值 ± 标准差(IEEE Access 2020 推荐协议)。"""
return f"LOSO accuracy = {np.mean(per_fold_scores):.4f} ± {np.std(per_fold_scores):.4f}"
两个口径纪律:labels 参数必须与本实验的类口径严格一致(12 类任务过滤标签 0 后传 range(1, 13),或统一减 1 后传 range(12));zero_division=0 用于防止某折缺失类别时报错,但折级报告里应同时输出该折的类别覆盖率,避免静默失真。
§6.10 MLOps 笔记
- 数据版本锁定:MHEALTH 无修订版本,入库时记录官方 ZIP 的下载日期与文件清单(10 个 .log、各 21.7-28.6 MB),实验卡关联该快照。
- 划分协议即代码:LOSO 折定义(测试受试者 ID 序列)写入配置文件并与指标一起存档,杜绝「隐式随机划分」混入生产。
- 窗口参数登记:窗口长度/步长/纯度过滤规则是超参数的一部分,任何变更需重跑全协议。
- 类口径显式化:服务暴露「12 类」或「13 类(含 null)」的模型口径字段,避免上线后与业务预期错位。
- 监控漂移:生产中监测加速度模长分布与类先验漂移;佩戴位置偏移是最常见的数据漂移源,可用通道间相关系数做早期告警。
- 实验即文档:MHEALTH 的方法学敏感度(划分协议决定结论)要求每次实验自动导出「协议三元组 + 指标」到实验跟踪系统(MLflow/W&B),评审或复查时按 trace 直接还原口径。
§7 质量评估与局限性
§7.1 已知偏倚表
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 小样本个体偏倚 | 仅 10 名受试者且来自单一机构,个体差异无法覆盖人群分布 | 高 | LOSO 报告方差;结论限定为方法学而非人群推断 |
| 人口学不透明 | 年龄/性别未披露,公平性分析无法开展 | 中 | 引用时明确声明;跨数据集验证补充多样性 |
| 协议强度偏倚 | 活动按脚本执行(虽无方式约束),与真实自由生活分布不同 | 中 | 补充自由生活数据微调;报告协议内/外两套口径 |
| null 段占比偏倚 | 休息段(标签 0)在行数中占比高,含 null 的指标与不含 null 的指标差异大 | 中 | 论文显式声明类口径(12 类 vs 13 类) |
| 设备放置偏倚 | 绑带松紧与摆放角度未标准化披露,通道间存在受试者级测量差异 | 中 | 旋转不变特征;佩戴校准流程 |
| 文档偏倚 | 官方列描述笔误与 Instances=120 标注可能误导使用 | 低 | 本 Wiki §4.1 修正字典 + 坑点 3、8 说明 |
§7.2 标注质量
协议内建标注保证了段级精度(边界由脚本硬切),摄像机记录提供旁证;但无独立第二标注者,无标注者间一致性度量可披露。段内逐样本标签在生理意义上并非恒定(如 1 分钟步行的步态相位变化),这是所有协议型 HAR 数据集的共同局限。标签质量的可信域是「段级正确、样本级继承」。
对使用者的三点推论:① 论文中描述该数据集标注时应写「protocol-defined labels」,避免暗示人工逐样本复核;② 段边界附近的 1-2 秒样本存在「执行切换」污染(受试者收尾动作),滑窗纯度过滤已部分规避,但对边界敏感的应用(如动作计数)需额外处理;③ 若需要更细粒度的标注(如步态相位、重复次数),社区尚无公认的二次标注版本,自行标注需保证标注规程可披露。
§7.3 泛化性表
| 目标场景 | 失效风险 | 证据 |
|---|---|---|
| 新用户(个体无关) | 高:LOSO 较随机划分跌 14.7 个百分点 | Gholamiangonabadi et al., 2020, IEEE Access(85.1% vs 99.85%) |
| 相似运动类区分 | 高:步行↔骑行、爬楼↔站立混淆集中 | DGIST 2025:Walking 类识别率仅约 50% |
| 佩戴位置变化 | 高:官方固定胸/踝/前臂,其他位置无验证 | 设备规格固定披露于 UCI,无变位置实验 |
| 自由生活(协议外活动) | 高:12 类封闭集,协议外行为无拒证 | 数据集为脚本协议采集(UCI 官方说明) |
| 跨设备/跨采样率 | 中:50 Hz 与常见消费级 25-100 Hz 不一致 | 采样率为 UCI 官方固定参数,迁移需重采样对齐 |
| null 段拒识 | 中:闭集模型对协议外行为无拒证能力 | 类口径为 12 类封闭集;开放集方案需自行验证 |
§7.4 伦理
数据由格拉纳达大学团队以健康志愿者为对象采集;UCI 以 CC BY 4.0 公开发布,不含姓名、ID 或人口学信息,无法回溯个体身份。官方文档未披露伦理审批(IRB)与知情同意的细节,使用者开展衍生研究时应自行评估合规责任并在论文中如实说明数据来源与许可。原作者另请求使用者在发表论文时邮件告知(见 §6.2)。
两点实务提醒:① 数据集不涉及患者、不含临床干预信息,因此通常不触发医疗数据特殊监管(如 HIPAA/GDPR 特殊类别处理的严格路径),但 ECG 属于生理信号,欧盟域内的衍生产品应按 GDPR 逐案评估;② CC BY 4.0 允许商业使用,但「署名」义务不可转嫁——二次分发的衍生数据包必须保留原始引用条目与许可声明。
§7.5 公平性
人口学信息(年龄、性别、种族、体质)官方完全未披露,因此无法进行亚组性能审计。对公平性敏感的应用(如面向老年用户的跌倒检测产品),MHEALTH 只能承担算法预研角色,产品上线前必须补采覆盖目标人群的数据并做亚组评估。这不是数据集缺陷,而是其设计定位(方法学基准)的边界。
从公平性审计方法论角度,MHEALTH 反而常被用作「负例教材」:它示范了当一个数据集不披露人口学信息时,后续所有使用者都无法回答「模型是否对不同人群公平」。这提示在新数据集的设计阶段就应把最小必要的人口学档案(匿名化的年龄段、性别)纳入采集计划——一个只有 10 人的数据集尚且如此,规模化采集更无借口。
§7.6 数据漂移
- 设备代际漂移:Shimmer2 为 2014 年平台,现役研究多已转向 Shimmer3 与消费级 IMU;噪声谱、量程、磁力计特性均有差异,直接迁移存在通道语义偏差。
- 采集流程漂移:mHealthDroid 框架后续演进,新采集管线的时间同步与标定行为可能与 2014 年版不同。
- 使用人群漂移:部署环境(老年、康复患者)与采集人群(健康志愿者)的活动节律、信号幅度分布不同,属于典型概念漂移源,建议以通道级分布监控 + 定期 LOSO 回归验证。
上线后漂移监控指标建议:
| 监控对象 | 指标 | 告警含义 |
|---|---|---|
| 加速度模长分布 | PSI(群体稳定性指数)或 KL 散度 | 佩戴方式改变 / 人群活动谱变化 |
| 通道间相关矩阵 | 与训练期相关矩阵的 Frobenius 距离 | 单设备故障或绑带松动 |
| 类先验(预测分布) | 各类预测频率的时间窗滑动对比 | 用户行为漂移或标签口径错位 |
| ECG 信号质量 | R 波检出率 / 信噪比滑动均值 | 电极接触劣化(若启用 ECG 分支) |
§7.7 DAIMS 数据集评估 24 项
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ✅ | 每行 24 列单表结构,无嵌套 |
| 2 | 唯一标识 | ✅ | 文件名(受试者)+ 行号可唯一索引每条样本 |
| 3 | 特殊字符 | ✅ | 纯数值空格分隔文本,无特殊字符风险 |
| 4 | 重复行 | ✅ | 50 Hz 连续采样,行级无冗余副本 |
| 5 | 缺失编码 | ✅ | 官方未报告缺失;等行宽解析即无 NaN |
| 6 | 标签标识 | ✅ | 列 24 显式标签列,0-12 语义明确 |
| 7 | 罕见类分组 | ⚠️ | 重复型活动样本少于 1 分钟类,无官方罕见类处理指引 |
| 8 | 偏倚评估 | ⚠️ | 官方未提供偏倚分析;本页面 §7.1 补充 |
| 9 | 数据字典 | ⚠️ | 官方有列描述但存在列号笔误(两个 Column 13) |
| 10 | 信息性缺失解释 | ✅ | 标签 0 = null class 的语义在列描述中说明 |
| 11 | 设备记录 | ✅ | 传感平台(Shimmer2)、位置、采样率均有披露 |
| 12 | 共线性 | ⚠️ | 三轴惯性通道高度相关,官方未提供相关性说明,建模需自行降维 |
| 13 | 编码映射 | ✅ | L1-L12 活动表官方明确(含时长/次数) |
| 14 | 时间戳处理 | ❌ | 无时间戳列,时间轴仅由行序隐含(50 Hz) |
| 15 | 划分建议 | ⚠️ | 无官方划分;社区 LOSO 惯例需自行实现 |
| 16 | 泄漏讨论 | ⚠️ | 官方无讨论;泄漏风险由社区研究揭示(IEEE Access 2020) |
| 17 | 标签分布 | ✅ | 可由数据直接统计;类不平衡结构性存在 |
| 18 | 测量偏倚 | ⚠️ | 绑带松紧/摆放角度未标准化披露 |
| 19 | 外部验证建议 | ⚠️ | 官方未提供;跨数据集验证需自行对齐单位与采样率 |
| 20 | 版本记录 | ❌ | 无版本号、无变更日志,UCI 未发布修订版 |
| 21 | 预处理脚本 | ⚠️ | 无官方脚本;社区复现脚本丰富但口径不一 |
| 22 | 合规要求 | ✅ | CC BY 4.0 清晰,署名即可,无注册/审批门槛 |
| 23 | 多模态对齐 | ✅ | 全模态 50 Hz 同步采样,行列天然对齐 |
| 24 | 去标识化 | ✅ | 不含任何个人标识信息,无法回溯个体 |
DAIMS 评分:17.5 / 24(✅ 计 1 分 × 13 项 + ⚠️ 计 0.5 分 × 9 项)
评分解读:MHEALTH 在「格式卫生」维度接近满分——单表宽格式、无缺失、无特殊字符、标签列明确、CC BY 4.0 清晰,属于拿来即读的数据。失分集中在「过程资产」维度:无时间戳、无版本管理、无官方划分与预处理脚本、数据字典有笔误。这些失分项都不是数据本身的错误,而是 2014 年学术数据集的普遍发布形态,意味着复现性责任完全转移到使用者一侧。
对你意味着什么:① 上手当天即可完成全部数据载入与清洗,不需要谈判任何访问流程;② 但第一周必须完成三件「官方没做」的事——按受试者建立 LOSO 划分、写自己的 schema(绕开列号笔误)、决定 null 类口径;③ 论文与生产配置中显式记录窗口参数与划分协议,否则结果不可复现;④ 若用于产品,先接受它「健康志愿者 + 2014 设备」的边界,再规划自有数据验证。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| mHealthDroid 在线验证(实时部署) | 格拉纳达大学 | 实时活动识别 | 定性验证(offline + online 均成功) | — | 框架在真机在线条件下复现离线识别效果(Banos et al., 2015) |
| 同数据集、协议级「外部」对照(10 折 CV vs LOSOCV) | Western University(Grolinger 课题组) | 12 类活动识别 | 99.85% vs 85.1% | -14.7 pp | 划分协议即泛化结论:随机划分严重高估(IEEE Access 2020) |
说明:MHEALTH 缺少严格意义的跨数据集外部验证研究(需同时解决 50 Hz/100 Hz、通道布局、单位语义对齐),这本身是该生态的已知空白;上表仅收录有同行评审支撑的结果。
§8 基准性能与生态
§8.1 排行榜
MHEALTH 没有官方排行榜;下表汇总代表性同行评审结果。⚠️ 数值不可直接比较:user-dependent vs subject-independent、10 折 CV vs LOSOCV、是否含 null 类、窗口长度与特征表示均不相同。
| 排名 | 模型 | 性能 | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 结果 1 | SVM / RF(每人单建模型) | 99.89%(user-dependent) | 2020 | 八种分类器逐一建模 | Subasi et al., 2020(转引自 Gholamiangonabadi et al., 2020, IEEE Access. DOI: 10.1109/ACCESS.2020.3010715) | 未公开 |
| 结果 2 | CNN-2C-1D + 滑窗 + 模长特征(10 折 CV 口径) | 99.85% | 2020 | 滑窗 + vector magnitude | Gholamiangonabadi, D., Kiselov, N., & Grolinger, K., 2020, IEEE Access, 8:133982-133994. DOI: 10.1109/ACCESS.2020.3010715 | 未公开 |
| 结果 3 | CNN(user-dependent 均值) | 93.9% | 2018 | 高斯核 PCA + Z-score 预处理 | Uddin, M., & Hassan, M. M.(转引自 Gholamiangonabadi et al., 2020, IEEE Access. DOI: 10.1109/ACCESS.2020.3010715) | 未公开 |
| 结果 4 | MLP(受试者划分对照实验) | 90.55% | 2021 | 六模型深度/传统对照 | A comparison of deep learning models in human activity recognition and behavioural prediction on the mHealth dataset, 2021(University of Galway 出版记录) | 未公开 |
| 结果 5 | CNN-2C-1D + 滑窗 + 模长特征(LOSOCV 口径) | 85.1% | 2020 | 留一受试者交叉验证 | Gholamiangonabadi, D., Kiselov, N., & Grolinger, K., 2020, IEEE Access, 8:133982-133994. DOI: 10.1109/ACCESS.2020.3010715 | 未公开 |
§8.2 SOTA 总结与选型建议
当前可信的「真实泛化水平」锚点是 LOSO 口径约 85-93%(视窗口与架构而定),而 99%+ 的数字全部来自个体依赖或随机划分口径,不应作为选型依据。选型建议:算法预研用 CNN-1D + LOSO 建立基线(一天可复现);追求逐样本输出与段边界精度用 U-Net 类密集预测;工程资源受限或需要可解释特征时用 XGBoost/MLP 窗口特征方案。任何宣称在 MHEALTH 上「接近 100%」的工作,先查其划分协议再谈性能。
「数值不可直接比较」的具体原因清单(引用任何表中数字前逐条核对):
- 划分协议不同:user-dependent(每人建模)与 LOSOCV(新用户泛化)回答的是两个不同问题,前者天然高出后者 10 个百分点以上。
- 类口径不同:含 null 的 13 类任务与过滤后的 12 类任务,Accuracy 分母完全不同。
- 输入表示不同:原始三轴、模长、每通道 8 统计量的窗口特征,信息量与难度均不一样(社区对照显示特征工程可带来两位数 F1 提升)。
- 窗口与重叠不同:128×50% 与 256×25% 产生的样本集与难度不同。
- 指标口径不同:Accuracy 在类不平衡下系统性高于 macro-F1;逐类平均与加权平均亦不可混用。
- 预处理可见性不同:部分工作未披露标准化统计量的计算范围(是否含测试集),存在隐性泄漏可能。
§8.3 评测协议
跨论文可比性检查清单:
| 检查项 | 必核对的口径 | 不一致时的后果 |
|---|---|---|
| 划分方式 | LOSO / 随机 CV / user-dependent | 最大变量,可差 15 pp 以上 |
| 类口径 | 12 类(滤 null)/ 13 类(含 null) | 分母不同,数字不可比 |
| 窗口参数 | 长度 × 重叠率(128×50% 为常见起点) | 样本集与难度不同 |
| 输入表示 | 原始三轴 / 模长 / 统计特征 | 信息量不同 |
| 指标 | Accuracy vs macro-F1 vs per-class | 类不平衡下排序可能颠倒 |
| 标准化范围 | 仅训练受试者 vs 全量(隐性泄漏) | 后者系统性虚高 |
建议新工作按 IEEE Access 2020 协议(LOSOCV + 滑窗 + 双口径报告)执行,便于与最大量的后续文献对齐。
§8.4 相关数据集表
| 数据集 | 规模 | 采样率 | 关系 | 适用 |
|---|---|---|---|---|
| PAMAP2 | 9 名受试者 / 18 类 | 100 Hz | 同代多模态 HAR 基准,含心率无 ECG | 跨数据集迁移首选 |
| RealDisp | 10 名受试者 / 33 类 | 100 Hz | 单胸部 IMU + ECG | 活动类别扩展验证 |
| Opportunity | 4 名受试者 | 30 Hz | 环境感知向 HAR | 情境感知研究 |
| WISDM v1.1 | 36 名受试者 / 6 类 | 20 Hz | 大样本单加速度计 | 个体差异研究 |
| HAPT(HAR with Smartphones) | 30 名受试者 / 12 类 | 50 Hz | 采样率相同、腰部单点 | 手机端部署对照 |
| USC-HAD | 14 名受试者 / 12 类 | 100 Hz | 同为 12 类活动协议 | 类别集合高度重叠的迁移对照 |
§8.5 关键论文 Top 6
以下六篇覆盖了「数据集诞生(1-3)→ 评估方法学修正(4)→ 最新模型对照(5-6)」的完整证据链,按主题而非时间阅读效率最高。
- Banos, O., Garcia, R., Holgado-Terriza, J. A., Damas, M., Pomares, H., Rojas, I., Saez, A., & Villalonga, C., 2014, International Workshop on Ambient Assisted Living (IWAAL), Springer, pp. 91-98. —— mHealthDroid 框架与 MHEALTH 数据集的首次提出,数据集官方引用文献。
- Banos, O., Villalonga, C., Garcia, R., Saez, A., Damas, M., Holgado-Terriza, J. A., Lee, S., Pomares, H., & Rojas, I., 2015, BioMedical Engineering OnLine, 14(Suppl 2):S6. DOI: 10.1186/1475-925X-14-S2-S6. —— 数据集与框架的完整方法学定稿,含离线/在线双验证。
- Banos, O., Garcia, R., & Saez, A., 2014, MHEALTH [Dataset], UCI Machine Learning Repository. DOI: 10.24432/C5TW22. —— 数据集的正式托管引用条目。
- Gholamiangonabadi, D., Kiselov, N., & Grolinger, K., 2020, IEEE Access, 8:133982-133994. DOI: 10.1109/ACCESS.2020.3010715. —— 用 MHEALTH 系统论证 LOSOCV 的必要性,85.1% vs 99.85% 的方法学对照成为领域经典证据。
- Depthwise-Separable U-Net for Wearable Sensor-Based Human Activity Recognition, 2025, Applied Sciences, vol. 15(DGIST 学术库全文). —— 密集预测范式在 MHEALTH 上的最新对照(92.59%),给出类级混淆的细粒度证据。
- A comparison of deep learning models in human activity recognition and behavioural prediction on the mHealth dataset, 2021(University of Galway). —— 六种深度/传统模型的同协议横向对照(MLP 90.55% / XGBoost 89.97%)。
§8.6 社区活跃度
- UCI 机器学习库:页面浏览 37,627 次(UCI 页面计数,截至 2026-09),为 UCI 内中高热度数据集。
- 学术引用:关联论文 mHealthDroid(2014)Google Scholar 引用 654+(截至 2026-09),年均引用在 2021 年后仍保持增长,属可穿戴 HAR 领域标准引用之一;方法学定稿论文(BMC 2015)在 Semantic Scholar 记录 259 次引用(截至 2026-09)。
- Kaggle:镜像数据集 usability 评分 10.00,有公开 Notebook 链路(Kaggle,截至 2026-09)。
- 社区复现:GitHub 存在多个从零实现(NumPy 手写分类器、特征工程对照)与教学项目,无统一维护的基准仓库。
- 评测方法学影响:IEEE Access 2020 论文被引 129 次(Semantic Scholar,截至 2026-09),其 LOSOCV 主张已成为后续 wearable HAR 论文的标准评估叙事之一,MHEALTH 正是其中的核心证据数据集。
§8.7 生态快照表
| 资源 | 类型 | 链接 | 热度(截至 2026-09) | 推荐理由 |
|---|---|---|---|---|
| UCI 数据集页 | 官方托管 | archive.ics.uci.edu | 37,627 次浏览 | 唯一权威源与官方文档 |
| ucimlrepo Python 包 | 官方 API | pip install ucimlrepo(id=319) |
UCI 官方维护 | 一行载入,教学首选 |
| Kaggle 镜像 | 社区转载 | kaggle.com/datasets/gaurav2022/mobile-health | usability 10.00 | 快速实验(注意子集限制) |
| DBDP 收录页 | 研究管线 | Digital Biomarker Discovery Pipeline | 数据库条目 | 数字生物标志物工作流参考 |
| Multi-Model Benchmarking | 社区复现 | GitHub | 教学级 | LOSO 协议与泄漏对照的代码示范 |
| Vijayalakshmi30 活动识别项目 | 社区教学 | GitHub | 教学级 | 含完整 24 列语义复刻(含官方笔误,可作对照) |
| mHealthDroid 论文全文 | 方法文献 | PMC4547155 | 开放获取 | 数据集采集细节的一手来源 |
§9 相关资源与引用
§9.1 官方文档与资源列表
- UCI 数据集主页(含完整列描述与活动表):https://archive.ics.uci.edu/dataset/319/mhealth+dataset
- UCI 旧版归档页(实验设置全文备用入口):https://archive-beta.ics.uci.edu/dataset/319/mhealth%2Bdataset
- 官方 ZIP 直链(72.1 MB):https://archive.ics.uci.edu/static/public/319/mhealth+dataset.zip
- UCI 官方 Python 获取方式:
pip install ucimlrepo→fetch_ucirepo(id=319) - 方法学论文(开放获取全文):BioMedical Engineering OnLine 2015(PMCID: PMC4547155)
- mHealthDroid 会议论文(Springer):IWAAL 2014,pp. 91-98
- IEEE Access 2020 评测协议论文:DOI 10.1109/ACCESS.2020.3010715
资源使用优先级建议:第一次接触该数据集,按「UCI 页面(理解协议)→ 官方 ZIP(拿到数据)→ 本 Wiki §6.1(跑通载入)→ IEEE Access 2020(确定评估协议)」的顺序使用效率最高;Kaggle 镜像仅建议在需要快速 Notebook 演示时使用,正式研究一律回到官方源。若需要深挖方法学(坑点 1、6 的完整论证),BMC 2015 与 IEEE Access 2020 两篇开放获取论文是必读的一手来源。
§9.2 BibTeX 引用块
@inproceedings{banos2014mhealthdroid,
title = {mHealthDroid: a novel framework for agile development of mobile health applications},
author = {Banos, Oresti and Garcia, Rafael and Holgado-Terriza, Juan Antonio and
Damas, Miguel and Pomares, Hector and Rojas, Ignacio and
Saez, Alejandro and Villalonga, Claudia},
booktitle = {Ambient Assisted Living and Daily Activities (IWAAL 2014)},
series = {Lecture Notes in Computer Science},
pages = {91--98},
year = {2014},
publisher = {Springer International Publishing}
}
@article{banos2015design,
title = {Design, implementation and validation of a novel open framework for agile
development of mobile health applications},
author = {Banos, Oresti and Villalonga, Claudia and Garcia, Rafael and Saez, Alejandro and
Damas, Miguel and Holgado-Terriza, Juan A and Lee, Sungyong and
Pomares, Hector and Rojas, Ignacio},
journal = {BioMedical Engineering OnLine},
volume = {14},
number = {Suppl 2},
pages = {S6},
year = {2015},
doi = {10.1186/1475-925X-14-S2-S6}
}
@misc{banos2014mhealth,
title = {MHEALTH Dataset},
author = {Banos, Oresti and Garcia, Rafael and Saez, Alejandro},
year = {2014},
howpublished = {UCI Machine Learning Repository},
doi = {10.24432/C5TW22}
}
@article{gholamiangonabadi2020deep,
title = {Deep Neural Networks for Human Activity Recognition With Wearable Sensors:
Leave-One-Subject-Out Cross-Validation for Model Selection},
author = {Gholamiangonabadi, Davoud and Kiselov, Nikita and Grolinger, Katarina},
journal = {IEEE Access},
volume = {8},
pages = {133982--133994},
year = {2020},
doi = {10.1109/ACCESS.2020.3010715}
}
§9.3 引用指南
- 使用数据集本身:引用
banos2014mhealth(UCI 数据集条目),并同时引用banos2014mhealthdroid或banos2015design(官方 Citation Requests 要求的两篇论文);发表论文时按原作者请求邮件告知 oresti.bl@gmail.com。 - 讨论评估协议:引用
gholamiangonabadi2020deep,避免仅引用随机划分口径的历史数字。 - 许可:CC BY 4.0 要求在任何分发物中保留署名与许可声明。
- 再分发:如需二次分发(含预处理版本),保留
banos2014mhealth引用条目、注明修改内容,并避免使用与官方许可冲突的再授权标签。
§10 AI 使用声明卡
§10.1 AI 模型列表
| 用途 | 模型 | 版本 | 说明 |
|---|---|---|---|
| 初稿生成 | 千方内部大语言模型(fast-model) | 2026-09 | 全文结构化初稿 |
| 事实检索 | WebSearch 联网检索 | 2026-09 | 6 轮检索 + 官方页面核验 |
| 数据核验 | curl 直接拉取 UCI 官方 ZIP | 2026-09-08 | 验证官方下载链路可达性与压缩包结构 |
§10.2 AI 参与范围
AI 负责初稿撰写、结构组织与代码示例起草;全部事实性内容(规模数字、许可、引用数、基准成绩)均来自 §10.3 列出的公开来源,由人工交叉核对;代码示例经逻辑审查与结构校验,未在原始数据上完整跑通训练,使用者应自行验证。
具体分工边界如下:AI 生成——章节框架、叙述性文字、代码示例骨架、表格排版、JSON-LD 序列化;人工核实——每处数字与官方来源逐项比对(通道数、文件大小、许可、引用数、基准成绩)、ICD-11/SNOMED 映射的把握度把关(不确定的概念一律标注「官方未提供」而非生成编码)、坑点与证据链的对应关系;人工撰写/定稿——审核声明、利益冲突声明与页面状态。该分工在 §10.4 的人工校验表中逐模块留痕。
§10.3 输入来源列表
- Banos, O., Garcia, R., & Saez, A., 2014, MHEALTH [Dataset], UCI Machine Learning Repository. DOI: 10.24432/C5TW22 — https://archive.ics.uci.edu/dataset/319/mhealth+dataset
- UCI MHEALTH 官方页面(旧版归档,含实验设置全文) — https://archive-beta.ics.uci.edu/dataset/319/mhealth%2Bdataset
- UCI MHEALTH 下载与文件列表 — https://archive.ics.uci.edu/ml/datasets/mhealth+dataset
- Banos, O., et al., 2014, mHealthDroid, IWAAL 2014, Springer, pp. 91-98 — https://www.semanticscholar.org/paper/569518638ad7ec69003a990dfc929efa91006e11
- Banos, O., et al., 2015, BioMedical Engineering OnLine, 14(Suppl 2):S6 — https://europepmc.org/article/pmc/4547155
- 同上(PubMed 记录,PMID 26329639) — https://pubmed.ncbi.nlm.nih.gov/26329639/
- 同上(ScienceOpen 记录,IWBBIO 2014 会议信息) — https://www.scienceopen.com/document/vid/6112995f-342d-43a6-999a-9fd197199f4b
- mHealthDroid 2014 引用计数(Google Scholar 快照,截至 2026-09) — https://scholar.google.ae/citations?citation_for_view=iwtfxPwAAAAJ%3AEj9njvOgR2oC
- Gholamiangonabadi, D., Kiselov, N., & Grolinger, K., 2020, IEEE Access, 8:133982-133994 — https://ieeexplore.ieee.org/document/9144538
- 同上(MTMT 书目记录,卷期页码核验) — https://m2.mtmt.hu/api/publication/31504430
- IEEE Access 2020 综述段落(Subasi、Uddin & Hassan 等转引数据) — https://ui.adsabs.harvard.edu/link_gateway/2020IEEEA...8m3982G/doi:10.1109/ACCESS.2020.3010715
- Depthwise-Separable U-Net, 2025, Applied Sciences(DGIST 学术库全文) — https://scholar.dgist.ac.kr/bitstream/20.500.11750/59271/2/applsci_15_09134_v2_1.pdf
- A comparison of deep learning models in HAR on the mHealth dataset(University of Galway) — https://research.universityofgalway.ie/en/publications/a-comparison-of-deep-learning-models-in-human-activity-recognitio-2
- Kaggle 镜像 gaurav2022/mobile-health(子集与许可说明) — https://www.kaggle.com/datasets/gaurav2022/mobile-health
- Digital Biomarker Discovery Pipeline 收录页(原作者联系请求与双论文引用要求) — https://github.com/DigitalBiomarkerDiscoveryPipeline/Digital_Health_Data_Repository
- Multi-Model Benchmarking-MHEALTH 社区复现(LOSO 对照证据) — https://github.com/Ameen-GAMAL/Multi-Model-Benchmarking-MHEALTH
- Application Of Machine Learning In Healthcare: Analysis On MHEALTH Dataset(第三方分析,规模参考) — https://core.ac.uk/download/590898156.pdf
§10.4 人工校验表
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §2 医学背景(场景映射、人群表、金标准) | 千方病案医学编辑部 | 与 UCI 官方描述及 WHO 指南表述交叉比对 | ✅ 已通过 |
| §3 数据集规格(通道数、文件大小、版本矩阵) | 千方病案医学编辑部 | 与 UCI 官方页面逐项比对 | ✅ 已验证 |
| §4 数据结构(24 列语义、列号笔误修正) | 千方病案医学编辑部 | 与官方列描述及整数列名解析逻辑交叉比对 | ✅ 已验证 |
| §5 数据划分策略 | 千方病案医学编辑部 | 与 IEEE Access 2020 协议交叉审核 | ✅ 已通过 |
| §6 代码示例与坑点 | 千方病案医学编辑部 | 逻辑审查 + 官方文档/社区复现比对 | ✅ 已通过 |
| §7 质量评估与 DAIMS 评分 | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §8 排行榜与引用数表述 | 千方病案医学编辑部 | 与原文及 Scholar 快照交叉比对 | ✅ 已验证 |
| §C JSON-LD @graph | 千方病案医学编辑部 | Schema v3.9 字段逐项校验 | ✅ 已通过 |
§10.5 AI 生成章节标注
以下章节由 AI 生成初稿并经人工审核:§1.0 30 秒速览、§3.0 版本抉择矩阵、§6.0-§6.4 代码示例、§6.5 八个坑点、§6.9 评估指标代码、§7.7 DAIMS 评估表与评分、§8.7 生态快照、§C JSON-LD。
§10.6 最后人工审核日期
2026-09-05(与 §0.3 审核日期一致)
页面状态:published(全部内容已完成审核并发布)
