信息速览

PAMAP2 — 穿戴式活动识别经典数据集 AI-Ready Wikipedia
INFOBOX
| 数据集名称 | PAMAP2 Physical Activity Monitoring |
| 英文全称 | Physical Activity Monitoring Dataset 2 |
| 别名/简称 | PAMAP2、PAMAP2 Physical Activity Monitoring、UCI ID 231 |
| 疾病分类 | 非病人数据集(健康成人行为学监测);下游关联 ICD-11:5A11 2 型糖尿病 / 5B81 肥胖 / BA00 原发性高血压 / CA22 慢性阻塞性肺疾病 |
| SNOMED CT | 68130003 Physical activity / 385839001 Activity / 281158006 Intensity of activity(详见 §2.2) |
| 数据模态 | IMU 惯性(加速度/角速度/磁力)+ 心率 + 温度 多传感器时序 |
| AI 任务类型 | 人体活动识别(分类)、活动强度估计、久坐/体位识别、多传感器融合、subject-independent 时序分类 |
| 样本总数 | 9 名健康受试者 / 18 种身体活动 / 3,850,505 个原始时间样本 |
| 数据大小 | 656.3 MB(PAMAP2_Dataset.zip,含 Protocol/ 与 Optional/) |
| 数据格式 | 空格分隔纯文本 .dat(每受试者每 session 一个文件)+ PDF 文档 |
| 许可证 | Creative Commons Attribution 4.0 International(CC BY 4.0) |
| 访问级别 | 开放(UCI 公开下载,无需申请或注册) |
| DUO 标签 | NRES |
| 语言 | 英文(文档)/ 数据为数值 |
| 首发日期 | 2012-08-05(UCI 捐赠) |
| 最后更新 | 2012(数据集本体;衍生预处理版延续至 2017) |
| 发布机构 | 达姆施塔特工业大学(Technische Universitaet Darmstadt)/ DFKI(Attila Reiss、Didier Stricker,PAMAP 项目) |
| 官方主页 | https://archive.ics.uci.edu/ml/datasets/pamap2+physical+activity+monitoring |
| 下载地址 | https://archive.ics.uci.edu/ml/datasets/pamap2+physical+activity+monitoring |
| DOI | 10.24432/C5NW2H(数据集)/ 10.1109/ISWC.2012.13(原始论文) |
| 引用次数 | 1,900+(原始论文,Google Scholar,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 生态与预处理版本齐全、社区 LOSO 评测惯例成熟;扣分项:无官方固定划分、NaN/±6g 饱和需自行处理、受试者仅 9 名 |
| 页面状态 | published |
§0 E-E-A-T 信任声明与免责声明
医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(身体活动强度语境与 ICD-11/SNOMED CT 下游映射、临床任务界定、金标准描述)、§7 偏倚分析。
数据工程审核者:千方病案医学编辑部交叉审核:§4 DAIMS 数据字典(54 列布局、activityID 映射、三 IMU 通道结构)、§5 subject-level 划分策略、§6 预处理 Pipeline 和坑点。
审核日期:2026-09-05
审核方式:交叉审核
利益冲突声明:千方病案医数集与达姆施塔特工业大学、DFKI、UCI 及原作者 Reiss、Stricker 无任何商业利益关联。本页面不销售 PAMAP2 数据集本身,仅提供 AI 就绪指南与学术信息服务。
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。PAMAP2 采集自健康成人,不包含任何病人或临床结局数据,无法用于临床疾病预测或诊断。任何基于该数据集训练的 AI 模型在应用于真实临床或健康监测决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。PAMAP2 原始 .dat 含大量 NaN,预处理结果高度依赖窗口化与缺失值策略。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。PAMAP2 采用 CC BY 4.0 许可,允许自由分享与改编,前提是给出适当署名(引用 Reiss & Stricker 2012 原始论文)。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 30 秒速览
这是什么? PAMAP2 是一份公开的穿戴式人体活动识别数据集:9 名健康成人(编号 subject101–subject109)身上佩戴 3 个惯性测量单元(IMU)加一条心率带,按照固定脚本完成了 18 种日常生活与运动活动——从躺、坐、站到走路、跑步、骑自行车、跳绳、踢足球。3 个 IMU 分别戴在主导手腕、胸部和主导侧脚踝,以 100 Hz 采样,心率带约 9 Hz,所有信号按时间对齐后写进每个受试者一个的 .dat 纯文本文件,全库共约 385 万个时间样本。
为什么重要? 它由达姆施塔特工业大学的 Reiss 与 Stricker 于 2012 年发布,是"传感器活动识别"领域的奠基性基准之一,原始论文在 Google Scholar 上被引用超过 1,900 次。它率先把 IMU 加速度、陀螺仪、磁力计与心率带这类"生理信号"放在一起做多传感器活动识别,并给出了标准的数据处理链与评测问题——此后的深度学习方法(CNN、LSTM、Transformer)几乎都在它上面做 subject-independent 评测。
我能用它做什么? 你可以训练一个能区分"坐着工作 vs 走路 vs 跑步 vs 跳绳"的模型,用于健身手环、久坐提醒、跌倒风险人群的活动水平监测等穿戴场景。本百科会告诉你如何下载、把 .dat 读进 NumPy、切窗口、按"受试者"而不是"随机样本"来划分训练集与测试集(否则结果会虚高),并避开 NaN、±6g 加速度饱和、activityID=0 等 8 个真实大坑。
§1.1 摘要
PAMAP2(Physical Activity Monitoring 2)是 PAMAP 项目在达姆施塔特工业大学(TU Darmstadt,隶属 DFKI)产出的可穿戴活动识别数据集,2012-08-05 捐赠至 UCI Machine Learning Repository(UCI ID 231,DOI 10.24432/C5NW2H)。数据采集自 9 名健康受试者(8 男 1 女,年龄 27.22 ± 3.31 岁,BMI 25.11 ± 2.62 kg/m²),每人佩戴 3 个 Colibri 无线 IMU 与 1 条心率带;IMU 置于主导手腕、胸部、主导侧脚踝并以 100 Hz 采样,心率带约 9 Hz。受试者按 12 项协议活动(躺、坐、站、走、跑、骑自行车、北欧健走、上/下楼梯、吸尘、熨衣、跳绳)执行;其中 5 名受试者额外录制了 6 项可选活动(看电视、电脑工作、开车、叠衣服、打扫房间、踢足球)。
每个受试者、每个 session 的数据写入一个空格分隔的 .dat 文件,每行 54 列:时间戳、活动标签(activityID)、心率,以及手/胸/踝三处 IMU 各自的 17 个传感通道(温度、±16g 加速度、±6g 加速度、陀螺仪、磁力计、四元数朝向)。缺失值以 NaN 标识,源于无线丢包与心率带低频采样。全库含 3,850,505 个时间样本。原始论文(Reiss & Stricker,ISWC 2012,DOI 10.1109/ISWC.2012.13)同时给出 4 个基准分类问题与 5 种分类器的对比,证明不同活动识别任务难度差异显著。
PAMAP2 最常用的评测惯例是 subject-level 的 leave-one-subject-out(LOSO)划分——把整个受试者留出测试,避免同受试者的连续窗口泄漏到训练集。因可选活动仅 5 名受试者完成、跨受试者对齐困难,绝大多数后续研究只用 12 项协议活动。官方未提供固定划分,社区已形成若干成熟预处理与基准版本(Zenodo 10.5281/zenodo.345082、HuggingFace 的 MONSTER 与 rnicrosoft 镜像)。
§1.2 战略价值分析
作为穿戴式活动识别基准的"度量锚"价值。 PAMAP2 之所以历经十余年仍被高频引用,核心在于它把评测的"规则"立住了。它不像后来的大数据集那样追求样本量,而是用 3 个身体位置 IMU + 心率的多模态设计,把"动作本身"与"生理负荷"同时记录下来——走路与跑步在加速度上可分、而同样强度的骑车与北欧健走需要跨模态区分。这使得它成为检验"时间序列模型能否真正泛化到未见过的受试者"的标准试金石。文献中大量 subject-independent 深度模型(CNN-BiGRU、注意力、Transformer、联邦学习)都以 PAMAP2 为共同擂台,其 LOSO 分数在方法间高度可比,直接支撑了算法选型。对研究者的战略意义:任何自研的时序分类方法,若不能在 PAMAP2 的 LOSO 协议下取得有竞争力分数,就很难说服穿戴式社区其泛化能力。
作为"数据就绪度"教学与工程价值。 PAMAP2 的原始形态充满真实工程杂质:每受试者一个 .dat、时间戳非均匀对齐到 100 Hz 栅格、心率列大量 NaN、±6g 加速度在高冲击活动下饱和、activityID=0 瞬态需剔除、活动类别在受试者间严重不平衡。这些不是缺陷而是难得的教学资产——它逼着使用者自己实现完整的 时间同步 → 缺失值处理 → 窗口化 → 按受试者分组 的管线。相比已被清洗好的数据集,在 PAMAP2 上跑通管线所获得的技能,恰好是部署到真实穿戴硬件前最需要的能力。对工程团队而言,用 PAMAP2 验证的特征工程与跨模态融合方案,能较平滑迁移到自采的 IMU 数据上。
§1.3 横向对比
| 数据集 | 受试者数 | 活动数 | 采样率 | 传感器 | 多模态 | 获取方式 | 数据规模 | 与 PAMAP2 的差异 |
|---|---|---|---|---|---|---|---|---|
| PAMAP2 | 9(8 男 1 女) | 18(12 协议 + 6 可选) | 100 Hz IMU / ~9 Hz 心率 | 3 IMU(手/胸/踝)+ 心率带 | 是(IMU + 心率 + 温度) | 开放(CC BY 4.0,UCI) | 3,850,505 样本 | — |
| OPPORTUNITY | 4 | 17 种日常活动(多层级标注) | 30 Hz | 7 IMU + 12 加速度计 + 4 定位器 | 是(含环境传感器) | 开放(UCI) | 大量(约 75% 为空类) | 室内容器场景、传感器更多、空类占比高 |
| USC-HAD | 14 | 12 | 100 Hz | 1 身戴 IMU | 仅 IMU | 开放(USC-SIPI) | 单 IMU 低维度 | 规模更大但仅单点 IMU、无心率 |
| WISDM | 36 | 6 | 20 Hz | 智能手机加速度计 | 仅加速度 | 开放(Fordham) | 手机采集、采样率低 | 场景更接近日常手机、动作更简单 |
| mHealth | 10 | 12 | 50 Hz | 3 Shimmer(胸/右腕/左踝)+ 双导联 ECG | 是(含 ECG) | 开放(UCI) | 50 Hz | 含双导联 ECG,但设备与协议不同 |
| Real-World (IDLab) | 若干 | 日常自由生活 | 不固定 | IMU + 视频 | 是 | 申请 | 长期自由生活 | 非脚本自由生活,难逐帧标注 |
差异化结论:PAMAP2 的独特组合是 3 位置 IMU + 心率的多模态、100 Hz 高采样、以及"12 协议活动对 9 名受试者全覆盖"的相对规整结构——这让它既比 WISDM/USC-HAD 更能研究"活动强度/生理负荷",又比 OPPORTUNITY/mHealth 更易做严格的 subject-out 评测。代价是受试者少、且可选活动覆盖不全,跨活动对齐全的活动识别实验须主动收缩到协议子集。
§1.4 版本演进时间轴
| 时间 | 事件 | 说明 |
|---|---|---|
| 2011 前 | PAMAP 项目数据积累 | 第一代 PAMAP 在 DFKI/TU Darmstadt 采集,PAMAP2 基于其经验设计 |
| 2012-06-18 | 原始论文发表 | Reiss & Stricker,《Introducing a New Benchmarked Dataset for Activity Monitoring》,ISWC 2012(DOI 10.1109/ISWC.2012.13),首次提出 4 个基准分类问题 |
| 2012-08-05 | UCI 公开捐赠 | PAMAP2 上传至 UCI ML Repository(UCI ID 231),DOI 10.24432/C5NW2H,CC BY 4.0 |
| 2015 | 衍生专著章节 | Reiss 等人《Personalized Physical Activity Monitoring Using Wearable Sensors》将 PAMAP2 用于个性化活动识别研究 |
| 2017-03-02 | 社区预处理版 | NLeSC 发布 PAMAP2 preprocessed v0.1.0(Zenodo DOI 10.5281/zenodo.345082),mcfly 教程配套,416 MB |
| 2023-2025 | 基准/镜像扩充 | HuggingFace rnicrosoft 原始镜像与 MONSTER 处理版(38,856 窗口)出现,DOI 引用仍在累计 |
说明:数据集本体自 2012 年捐赠后未再发布新版本;上述"更新"均来自社区再加工与镜像,数据语义未变。
§1.5 典型 AI 应用场景
- 可穿戴式人体活动识别(核心任务):从三位置 IMU + 心率预测 18 种活动类别,最常见的 subject-independent 分类基准场景。
- 活动强度估计 / 代谢当量(MET)建模:把活动映射到强度档位(低/中/高/极高)或估计单位时间能耗,用于健身与慢病运动处方监测(见 §2.3)。
- 久坐行为与体位识别:区分躺/坐/站(activityID 1/2/3)及"看电视/电脑工作/开车"等久坐活动,支撑久坐提醒与久坐流行病学研究。
- 多传感器融合方法研究:验证 IMU(运动)与心率(生理负荷)跨模态融合、缺失模态补全(心率大面积 NaN)算法。
- 边缘/联邦与域泛化方法基准:因受试者差异大且数量少,被广泛用于个人化、迁移学习、联邦学习与非独立同分布(non-IID)设置评测。
§2 医学背景
⚠️ 范围声明:PAMAP2 是健康成人的行为学/运动学数据集,本身不含病人与临床结局。本节将活动监测置于"身体活动不足作为可干预风险因素"的公共卫生与康复语境中,用于说明这类传感器数据在下游健康应用中的角色——所列 ICD-11/SNOMED 编码是"该 AI 监测可服务的人群/语境",并非数据内诊断。
§2.1 ICD-11 疾病分类锚定
PAMAP2 捕获的是"身体活动行为"本身,而非疾病。身体活动不足(physical inactivity)与久坐行为已被确认为慢性非传染性疾病的重要可干预风险因素。下表列出 PAMAP2 型活动监测最常服务的下游慢病/康复语境及其 ICD-11 锚点:
| ICD-11 编码 | 中文名 | 英文名 | 与本数据集的关系 |
|---|---|---|---|
| 5A11 | 2 型糖尿病 | Type 2 diabetes mellitus | 活动监测用于评估/鼓励患者达到推荐身体活动量,辅助运动处方 |
| 5B81 | 肥胖 | Obesity | 强度(MET)估计用于能量平衡与减重运动干预 |
| BA00 | 原发性高血压 | Essential hypertension | 中等强度有氧活动量是血压管理的非药物手段,需量化活动水平 |
| CA22 | 慢性阻塞性肺疾病 | Chronic obstructive pulmonary disease | 活动能力/活动量下降是 COPD 预后的关键指标,穿戴监测评估活动受限 |
| RA00 | 年龄相关性/功能退化风险 | Sarcopenia-related functional decline(长期) | 老年人活动模式识别用于跌倒风险与失能早期预警研究 |
注:PAMAP2 受试者为 20-30 岁健康成人,其价值在于为上述人群的"活动量评估模型"提供方法学与算法预训练/基准,而非直接代表上述患者。
§2.2 SNOMED CT 映射
| 数据标签/概念 | ICD-11 语境 | SNOMED CT 概念码 | SNOMED CT 术语 |
|---|---|---|---|
| 身体活动(总) | 5A11/5B81/BA00 | 68130003 | Physical activity (observable entity) |
| 单个活动行为 | — | 385839001 | Activity (observable entity) |
| 活动强度(低/中/高) | 5B81 肥胖能量管理 | 281158006 | Intensity of activity |
| 静态/久坐姿态 | BA00/慢病 | 228373008 | Sedentary lifestyle |
| 心率(生理负荷代理) | CA22/5A11 | 364075005 | Heart rate (observable entity) |
§2.3 疾病简介
身体活动不足的公共卫生语境。 世界卫生组织(WHO)在《2020 年身体活动与久坐行为指南》与近年全球现状报告中将身体活动不足列为第四大非传染性疾病死亡风险因素,并指出全球相当比例的成人未达到推荐的中高强度身体活动量。身体活动不足与 2 型糖尿病、肥胖、高血压、心血管病及部分癌症风险升高相关联;干预的常见策略之一是"用可穿戴设备客观量化每日活动量并反馈"。此类"客观测量"正依赖活动识别技术——PAMAP2 即训练这类识别模型的经典数据。
康复与功能评估语境。 在慢性病康复(如 COPD 患者的活动能力监测、术后早期下床活动量化)与老年跌倒风险筛查中,临床工作者需要连续、客观地把"患者今天走了多少步、活动强度如何、久坐了多久"量化。三位置 IMU 与心率的组合能较好还原姿态(坐/站/躺)与运动强度(走/跑/上下楼),这正是 PAMAP2 的标注范围。因此,虽然 PAMAP2 本身不含患者,但其标签体系几乎覆盖了慢病与康复人群日常活动评估所需的基础动作类别。
需要再次强调:以上是"为什么这类数据在医学信息学中有用"的背景。用 PAMAP2 训练的模型在应用于真实病人前,必须经过该目标人群的独立外部验证(见 §5.5 与 §7.3),因为健康青年与老年慢病患者的动作特征、佩戴方式差异显著。
§2.4 临床任务定义
| 临床任务 | 是否 PAMAP2 可直接支撑 | 数据中的对应关系 | 说明 |
|---|---|---|---|
| 活动量/活动模式识别 | 是(直接) | 18 种活动标签分类 | 模型学到的分类器是可穿戴活动量统计的引擎 |
| 活动强度分层(久坐/轻/中/高) | 是(部分) | 走/跑/上楼/跳绳等强度可排序 | 文献常按动作归并为 MET 强度档 |
| 久坐时长估计 | 是(部分) | 躺 1/坐 2/站 3/看电视 9/电脑工作 10/开车 11 | 久坐姿势的时序累加可估久坐时间 |
| 能耗/代谢当量估计 | 间接 | 加速度 + 心率是 MET 回归的输入 | 需在目标人群另采集能耗金标准 |
| 疾病诊断 | 否 | 无患者与结局 | 数据不含任何临床标签 |
| 跌倒/失能风险预测 | 否(仅研究基础) | 上下楼/转身类动作可测步态 | 需高龄/风险人群数据,不能直接外推 |
§2.5 受试者人群特征
| 维度 | 说明 |
|---|---|
| 人数 | 9 名健康成人(8 男 1 女),编号 subject101–subject109 |
| 年龄 | 27.22 ± 3.31 岁(区间约 23.91–30.53) |
| BMI | 25.11 ± 2.62 kg/m²(区间约 22.49–27.73) |
| 利手 | 1 名左利手(subject108),其余 8 名右利手 |
| 性别 | 唯一女性受试者为 subject102 |
| 种族/民族 | 未报告(采集于德国) |
| 就医类型 | 无(健康志愿者、非临床环境、按脚本采集) |
| 采集时长 | 每名受试者约 10 小时以上(含协议与可选 session) |
数据来源交叉验证:受试者人口学来自公开学位论文与文献对该数据集的复述(来源 URL 见 §9),PAMAP2 官方 .dat 中不含年龄/性别/BMI 列,身份仅以编号呈现。
§2.6 金标准/参考标准
| 项目 | 说明 |
|---|---|
| 划分方式 | 无官方训练/测试划分;社区标准为 leave-one-subject-out(LOSO)或按 subject 分组 |
| 标注方式 | 受试者按预定脚本顺序执行活动,采集者记录活动起止,由脚本/人工切分生成逐样本 activityID |
| 标注者 | 采集团队(实验脚本驱动,非逐帧人工回放标注) |
| 性质 | 脚本驱动的弱监督自标注:活动区间由脚本边界确定,区间内逐样本复制同一标签 |
| 已知局限 | 区间切换存在"瞬态/过渡"样本被标为 activityID=0;个别受试者因采集中断,片段被拼接并出现心率"跳变" |
| 可靠性 | 对绝大多数活动可靠;对易混淆的高动态动作(跳绳、跑步)与跨受试者强度差异,仍存在近邻混淆(见 §7.2) |
§3 数据集规格
§3.0 版本抉择矩阵
PAMAP2 本体单一,但存在若干社区分发/预处理版本,按用途选择:
| 你的需求 | 推荐版本 | 大小 | 理由 |
|---|---|---|---|
| 原始全量 + 自研管线 | UCI 官方 PAMAP2_Dataset.zip | 656.3 MB | 保留全部 54 列与 18 活动,可在 Protocol/ 与 Optional/ 间自由取舍 |
| 快速复现研究 / 时序基准 | MONSTER HuggingFace 处理版(monster-monash/PAMAP2) | 10K–100K 窗口级 | 已清洗为 38,856 条长度 100 窗口、12 类、附 subject 分组划分 |
| 教学/与论文对标 | Zenodo preprocessed v0.1.0(10.5281/zenodo.345082) | 416 MB | mcfly 教程配套,窗口 512、仅 ±16g 加速度通道、按"所有受试者共有活动"筛选 |
| 需在内存中直接用 pandas | ucimlrepo:fetch_ucirepo(id=231) | 运行时下载 | 一行拉取为 DataFrame,适合原型 |
§3.1 模态详细说明
PAMAP2 是多模态穿戴传感器时序数据,核心由 3 个位置 IMU 的"惯性运动"模态 + 心率的"生理负荷"模态 + 温度的"热环境"模态构成:
| 模态 | 传感器 | 位置 | 采样率 | 每处通道数 | 物理量 |
|---|---|---|---|---|---|
| 惯性运动(加速度计 ×2 量程) | IMU 内 MEMS 加速度计 | 手腕/胸/踝 | 100 Hz | 3 + 3 | ±16g(13-bit)与 ±6g(13-bit)三轴加速度 |
| 角速度(陀螺仪) | IMU 内 MEMS 陀螺仪 | 手腕/胸/踝 | 100 Hz | 3 | 三轴角速度(rad/s,量程约 ±1500°/s) |
| 地磁(磁力计) | IMU 内磁阻磁力计 | 手腕/胸/踝 | 100 Hz | 3 | 三轴磁场(μT,量程约 ±400 μT) |
| 朝向(无效) | IMU 内融合 | 手腕/胸/踝 | 100 Hz | 4 | 四元数朝向——官方注明本采集中无效 |
| 温度 | IMU 板载温度计 | 手腕/胸/踝 | 100 Hz | 1 | 传感器环境温度(°C) |
| 心率 | 心率胸带 | 胸部 | ~9 Hz | 1 | 心率(bpm),低频采样导致密集 NaN |
- 3 处 IMU 每处 17 列(1 温度 + 3±16g 加速度 + 3±6g 加速度 + 3 陀螺仪 + 3 磁力计 + 4 朝向)。
- 每行 54 列 = 1 时间戳 + 1 活动标签 + 1 心率 + 3×17 = 52 个传感属性。
- 传感器厂商型号为 Colibri Wireless IMU(Trivisio);加速度计/陀螺仪/磁力计均为三轴微机电(MEMS)器件。
§3.2 按子集样本数
| 子集 | 覆盖受试者 | 覆盖活动 | 说明 |
|---|---|---|---|
| Protocol/(协议 session) | 全部 9 名 | 12 项协议活动 | 主体;多数后续研究只用此子集 |
| Optional/(可选 session) | 仅 5 名 | 6 项可选活动 | 看电视/电脑/开车/叠衣/打扫/踢球,覆盖不全 |
| 全库 | 9 名 | 18 项 | 合计 3,850,505 个原始样本(UCI 官方记录) |
| activityID=0(瞬态) | 各 session 内 | — | 过渡活动,官方明确建议丢弃 |
各受试者样本量差异大且不平衡——受试者 101–109 各自时长从数十分钟到数小时不等,跑步/跳绳/踢球等高强度活动在多数受试者中样本稀少。任何跨受试者统计都必须按 subject 聚合后再平均,否则个别长 session 会主导结果。
§3.3 数据格式
| 项目 | 说明 |
|---|---|
| 容器格式 | 空格分隔纯文本 .dat(ASCII),每行对应一个时间戳样本 |
| 文件组织 | 每受试者每 session(protocol 或 optional)一个 .dat;目录结构见 §4.0 |
| 文档 | 官方 zip 内含 readme.pdf、DataCollectionProtocol.pdf、DescriptionOfActivities.pdf、PerformedActivitiesSummary.pdf、subjectInformation.pdf |
| 读取方式 | NumPy/pandas/np.loadtxt(注意 skip 缺失),或 ucimlrepo fetch_ucirepo(id=231) |
| 分隔符 | 空白字符(空格/tab),缺失以 NaN 字符串表示 |
| 数据类型 | activityID 为整型;其余 53 列为浮点 |
§3.4 存储大小
| 资源 | 大小 |
|---|---|
| PAMAP2_Dataset.zip(官方) | 656.3 MB |
| readme.pdf | 57.7 KB |
| 解压后 .dat 合计 | 约 1.2+ GB(Protocol/ 主文件即可达 100+ MB/受试者级) |
| Zenodo 预处理版 data.zip | 416 MB |
| MONSTER 处理版(窗口特征) | 小(10K–100K 级样本,随任务在 HuggingFace 按需下载) |
§3.5 标注方式
标注是脚本驱动的半自动自标注:受试者严格按预定活动清单与顺序执行,实验者用计时/事件标记划分各活动的时间区间,据此为区间内每一时间戳赋对应 activityID。优点是无逐帧人工回放的主观成本;缺点是在活动切换瞬间会混入"瞬态/过渡"样本,官方将其统一标为 activityID=0 并提示丢弃(官方说明中也提到,采集中断被拼接处会呈现心率"跳变")。
§3.6 标注者资质
由于是脚本驱动标注,PAMAP2 没有独立临床标注团队;标注可靠性来自采集协议的执行与受试者配合,而非领域专家的逐帧判读。对可穿戴活动识别而言这通常足够——多数活动(躺/坐/站/跑步)自我界定清晰,但少数相邻活动(如跳绳与跑步、熨衣与打扫)在特征空间近邻,需要算法区分,而这正是该数据集挑战性的来源之一(详见 §7.2 与 §8)。
§3.7 采集周期
数据采集于 2012 年之前完成并在 2012-08 捐赠 UCI。每名受试者在多次 session 中完成采集(每次 session 覆盖部分活动,活动间有休息),单人累计时长约 10 小时以上。文件中时间戳表示自该 session 开始的相对秒数。
§3.8 地域覆盖
采集于德国(达姆施塔特工业大学 / DFKI 环境),多数为室内受控脚本采集,部分户外活动(如骑自行车、北欧健走、跑步)可能在户外进行。未报告种族构成;受试者人口学见 §2.5。地域单一决定了其动作与日常行为模式偏德国本地生活形态(如"北欧健走"为当地常见运动)。
§3.9 设备规格
| 设备 | 规格 |
|---|---|
| IMU | 3 × Colibri Wireless(Trivisio)惯性测量单元,集成 MEMS 加速度计×2(±16g 与 ±6g,13-bit)、MEMS 陀螺仪(约 ±1500°/s)、磁阻磁力计(约 ±400 μT)、板载温度计 |
| IMU 采样率 | 100 Hz(时间步 0.01 s) |
| 佩戴位置 | 1 IMU 于主导手腕、1 于胸部、1 于主导侧脚踝 |
| 心率带 | 1 条胸带式心率监测器,采样约 9 Hz |
| 朝向数据 | 4 维四元数,官方注明本采集场景无效,建议弃用 |
| ±6g 加速度计 | 官方注明与 ±16g 未精确校准,高速运动(如跑步)超 6g 时会饱和,建议只用 ±16g 通道 |
§3.10 深度溯源链
- 生成:PAMAP 项目组(Reiss & Stricker)设计协议、招募 9 名志愿者,在 TU Darmstadt/DFKI 用 Trivisio Colibri IMU + 心率带采集。
- 文档化:同时产出 5 份 PDF(采集协议、活动描述、执行摘要、受试者信息、readme),把列含义、activityID 映射、NaN 成因与已知问题一次写清。
- 公开:2012-06 论文(ISWC 2012)宣布数据集并给基准;2012-08 捐赠 UCI(DOI 10.24432/C5NW2H,CC BY 4.0)。
- 再加工生态:2017 NLeSC/mcfly 推出窗口化预处理(Zenodo 10.5281/zenodo.345082);2023-2025 HuggingFace 出现原始镜像(rnicrosoft)与 MONSTER 窗口基准(monster-monash)。
- 引用锚:社区统一约定引用 Reiss & Stricker 2012 ISWC 论文,而非 UCI 数据集 DOI。
§4 数据结构详解
§4.0 目录结构预览
PAMAP2_Dataset/
├── Protocol/ # 12 项协议活动,9 名受试者全覆盖
│ ├── subject101.dat
│ ├── subject102.dat
│ ├── subject103.dat
│ ├── subject104.dat
│ ├── subject105.dat
│ ├── subject106.dat
│ ├── subject107.dat
│ ├── subject108.dat
│ └── subject109.dat
├── Optional/ # 6 项可选活动,仅 5 名受试者
│ ├── subject101.dat
│ ├── subject102.dat
│ ├── subject103.dat
│ ├── subject105.dat
│ └── subject107.dat
├── readme.pdf # 主说明:列布局 / activityID / NaN 成因
├── DataCollectionProtocol.pdf # 采集协议描述
├── DescriptionOfActivities.pdf # 各活动执行描述
├── PerformedActivitiesSummary.pdf # 各受试者已执行活动汇总
└── subjectInformation.pdf # 受试者人口学信息
目录结构注释:data_root 指向解压后的 PAMAP2_Dataset/ 目录;Protocol 每个文件即一个受试者的全部协议活动时序。Optional 的子文件集合与受试者覆盖以官方 zip 内实际为准(不同镜像可能整理方式不同,需以随附 readme.pdf 核对)。
§4.1 DAIMS 标准化字段描述表
核心表 = 每个 .dat 的一行。字段顺序固定:
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| 1_timestamp | Float | session 内时间戳(秒,100 Hz) | 0.00、3.11 | 切窗/对齐时钟 | 同步精度 | 一般无缺失 | ≥0 |
| 2_activityID | Int(标签) | 真值活动标签 | 4(walking) | 分类靶标 | 区间切换边缘噪声 | 无 | 0,1–7,9–13,16–20,24 |
| 3_heart_rate | Float | 心率(bpm) | 72.0、NaN | 生理负荷特征 | ~9 Hz 采样延迟 | NaN(低频+丢包) | 约 40–200 |
| 4–20 hand_* | Float×17 | 手腕 IMU 17 通道 | — | 上肢运动特征 | 见各通道 | NaN(丢包) | — |
| 21–37 chest_* | Float×17 | 胸部 IMU 17 通道 | — | 躯干运动特征 | 同上 | NaN(丢包) | — |
| 38–54 ankle_* | Float×17 | 脚踝 IMU 17 通道 | — | 下肢运动特征 | 同上 | NaN(丢包) | — |
每处 IMU 的 17 通道内部顺序(以手部为例,chest/ankle 同理):
| 字段名 | 类型 | 说明 | 观测误差 | 取值范围 |
|---|---|---|---|---|
| hand_temperature | Float | 传感器温度(°C) | 传感器热漂移 | 环境量 |
| hand_acc16_x/y/z | Float×3 | ±16g 加速度(m/s²) | 建议主力通道 | 约 ±16g×9.81 |
| hand_acc6_x/y/z | Float×3 | ±6g 加速度(m/s²) | 高冲击会饱和 | 约 ±6g×9.81 |
| hand_gyro_x/y/z | Float×3 | 角速度(rad/s) | 零偏/漂移 | 约 ±1500°/s |
| hand_mag_x/y/z | Float×3 | 磁场(μT) | 环境干扰 | 约 ±400 μT |
| hand_orientation_w/x/y/z | Float×4 | 四元数朝向 | 官方注明无效 | 单位四元数 |
§4.2 标签分布
| activityID | 活动 | 类别定位 | 备注 |
|---|---|---|---|
| 0 | 其他(瞬态) | 丢弃 | 活动切换/待机过渡,官方建议剔除 |
| 1 | 躺 lying | 姿态 | 协议 |
| 2 | 坐 sitting | 姿态 | 协议 |
| 3 | 站 standing | 姿态 | 协议 |
| 4 | 走路 walking | 运动 | 协议 |
| 5 | 跑步 running | 运动 | 协议 |
| 6 | 骑自行车 cycling | 运动 | 协议 |
| 7 | 北欧健走 Nordic walking | 运动 | 协议 |
| 9 | 看电视 watching TV | 久坐 | 可选 |
| 10 | 电脑工作 computer work | 久坐 | 可选 |
| 11 | 开车 car driving | 久坐 | 可选 |
| 12 | 上楼梯 ascending stairs | 运动 | 协议 |
| 13 | 下楼梯 descending stairs | 运动 | 协议 |
| 16 | 吸尘 vacuum cleaning | 家务 | 协议 |
| 17 | 熨衣 ironing | 家务 | 协议 |
| 18 | 叠衣服 folding laundry | 家务 | 可选 |
| 19 | 打扫房间 house cleaning | 家务 | 可选 |
| 20 | 踢足球 playing soccer | 运动 | 可选 |
| 24 | 跳绳 rope jumping | 运动 | 协议 |
不平衡事实:协议活动(1–7、12、13、16、17、24)对全部 9 名受试者覆盖;可选活动(9、10、11、18、19、20)仅 5 名受试者。不同活动秒级样本量差异大(文献给出的单活动累计时间从 469 秒的踢球到 3,099 秒的电脑工作不等)。跨受试者按动作累计后,静态/久坐活动与高动态运动呈明显长尾——直接整体训练会让多数类主导,多数研究因此只保留"所有受试者都执行"的活动子集或用宏平均/加权 F1 评估。
下表给出文献(Hilbert-Huang 变换活动识别研究)报告的全库按活动累计时长(单位:秒),供粗略感受类别量级——同一活动在 9 名受试者上是否都足量、是否受可选性影响:
| activityID | 活动 | 累计时长(秒) | 备注 |
|---|---|---|---|
| 10 | 电脑工作 computer work | 3,099.31 | 可选活动中最长,久坐类 |
| 4 | 走路 walking | 2,387.53 | 协议,样本充足 |
| 17 | 熨衣 ironing | 2,386.82 | 协议 |
| 1 | 躺 lying | 1,925.15 | 协议 |
| 3 | 站 standing | 1,899.23 | 协议 |
| 2 | 坐 sitting | 1,851.80 | 协议 |
| 7 | 北欧健走 Nordic walking | 1,881.00 | 协议 |
| 19 | 打扫房间 house cleaning | 1,871.83 | 可选 |
| 16 | 吸尘 vacuum cleaning | 1,753.45 | 协议 |
| 6 | 骑自行车 cycling | 1,645.93 | 协议 |
| 13 | 下楼梯 descending stairs | 1,049.27 | 协议 |
| 18 | 叠衣服 folding laundry | 998.74 | 可选 |
| 12 | 上楼梯 ascending stairs | 1,172.00 | 协议 |
| 5 | 跑步 running | 981.92 | 协议 |
| 9 | 看电视 watching TV | 836.45 | 可选 |
| 11 | 开车 car driving | 545.18 | 可选 |
| 24 | 跳绳 rope jumping | 493.54 | 协议,高动态但量少 |
| 20 | 踢足球 playing soccer | 469.12 | 可选中最短 |
上表为单篇文献的累计统计(来源见 §9),与官方 PerformedActivitiesSummary.pdf 可能存在细小数差,仅用于理解相对量级。规律清晰:跑步/跳绳/踢球等高动态与可选活动样本稀缺,是类别不平衡与"活动-受试者混叠"的源头。
§4.3 关键统计
- 全库原始样本 3,850,505(UCI 记录,含 activityID=0 与可选活动)。
- 每样本 54 列;时间戳栅格 100 Hz。
- 心率列普遍非稠密:因 ~9 Hz 采样与无线丢包,多数行心率为 NaN,须插值或从特征中排除(详见 §6.3、§6.5 坑点)。
- 常用处理(社区文献):100 Hz 降采样至约 33.3 Hz;窗口长度 100–512 时间步(约 1–5 秒),步长/重叠 50%–78% 不等;特征常仅取三处 ±16g 加速度通道。
§4.4 数据层级关系(序列 → 受试者 → session → 活动)
PAMAP2 的层级是受试者 → session → 连续活动块 → 时间样本,而非医疗数据库的患者→入院→医嘱:
受试者 subject101–subject109 # 唯一实体,划分单位(LOSO 以此分层)
└─ session(protocol / optional) # 每受试者每 session 一个 .dat
└─ 活动块(按 activityID 连续的区间) # 一个连续标签区间
└─ 时间样本(一行,timestamp + label + 52 传感值)
- 分层关键:连续时间样本天然自相关,随机切窗口会把手足相连的样本分到 train 与 test,造成泄漏。正确做法是以 subject 为外层分组单位做 GroupShuffle / LOSO(见 §5.3)。
§4.5 缺失值情况与信息性缺失编码
| 缺失来源 | 表现形式 | 编码 | 缺失机制 | 处理建议 |
|---|---|---|---|---|
| 心率带低频采样(~9 Hz vs 100 Hz) | 心率列约 91% 行缺失 | NaN | 机制性(MNAR 倾向:低频本身) | 插值 / 降采样对齐 / 只在此模态上做窗口级聚合 |
| 无线丢包 | 任意传感通道偶发整段缺失 | NaN | 随机(MAR) | 丢弃段 / 前向填充 / 掩码 |
| 采集中断拼接 | 时间戳跳变伴心率突变 | 时间戳跳变 | 流程性 | 按时间戳不连续处切段 |
| ±6g 饱和 | 加速度值被截断 | 值饱和(非 NaN) | 高冲击机制 | 用 ±16g 通道 |
信息性缺失编码:PAMAP2 缺失多为传感/采样机制所致,语义上"缺失即该传感器此刻无读数"——做窗口特征时可直接对该窗口聚合(均值/方差不受个别 NaN 影响),而不必强求逐点插值。饱和类缺失信息量大(代表高冲击),应避免在饱和区间依赖 ±6g 通道。
§4.6 单行样本注释与读取自检
为确认读取方向无误,下面给出一条 .dat 行(简化示意,真实数值与 .dat 原文对应),逐列注释其含义。文件是空格分隔、含 NaN 的 ASCII:
128.41 4 82.0 25.6 9.81 0.12 -0.45 9.82 0.10 -0.43 0.011 -0.008 0.005 NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
^ ^ ^ ^ ^ ^
timestamp act HR hand acc16 xyz orientation(无效)
(s) =walking bpm temperature
| 位置 | 对应列 | 该示例值 | 说明 |
|---|---|---|---|
| 第 1 列 | timestamp | 128.41 | session 内相对秒数 |
| 第 2 列 | activityID | 4 | = walking(走路),真值标签 |
| 第 3 列 | heart_rate | 82.0 | 心率(bpm),此处有值 |
| 第 4 列 | hand_temperature | 25.6 | 手部 IMU 温度(°C) |
| 第 5-7 列 | hand_acc16_x/y/z | 9.81/0.12/-0.45 | 手部 ±16g 加速度(m/s²,含重力) |
| 第 8-10 列 | hand_acc6_x/y/z | 9.82/0.10/-0.43 | 手部 ±6g 加速度 |
| 第 11-13 列 | hand_gyro_x/y/z | 0.011/-0.008/0.005 | 手部角速度(rad/s) |
| 第 14 列起… | hand_mag / orientation… | NaN… | 磁场与朝向,后接 chest(21-37)与 ankle(38-54) |
# 读取自检:验证列数与首行解析正确
import numpy as np
path = "PAMAP2_Dataset/Protocol/subject101.dat"
row = np.genfromtxt(path, max_rows=1) # 读首行
print("列数应为 54 →", row.size) # 期望 54(含 NaN 以 nan 表示)
对新手最常见的首个"看起来像 bug 其实不是"的现象:第 5-7 列的静止加速度约为 ±9.8 m/s²——因为 MEMS 加速度计测量的是比力(specific force),静止时含地球重力分量,而非"应为 0"。据此判断某轴朝向:静止时重力方向轴的读数约 ±9.8。把整段含重力原始加速度直接做均值会得到非零直流偏置,通常应在窗口内去均值(high-pass 高通)或用重定向把 z 轴对齐到重力。
§5 数据划分与使用建议
§5.1 官方数据划分
官方不提供任何训练/验证/测试固定划分。PAMAP2 交付的是原始 .dat;划分(含哪些受试者进测试、切多长窗口)由使用者自定。因此不同论文间分数可比性依赖各自公开的预处理脚本,直接跨论文比较绝对数值需谨慎。
§5.2 推荐划分策略
| 场景 | 推荐划分 | 说明 |
|---|---|---|
| 通用分类基准 | leave-one-subject-out(LOSO) | 轮流以 1 名受试者做测试,9 折平均,报告均值 ± 标准差 |
| 需稳定折数 | 按 subject 做 GroupKFold(k=5) | 保证同一受试者窗口不跨 fold |
| 复现他人结果 | 采用该论文固定脚本(如 mcfly 教程 / MONSTER 版自带 subject 分组) | 直接复用其受试者分组,勿自创 |
| 少量受试者学习 | 固定几折 subject-out 做调参,另留 1–2 名完全隔离做最终测试 | 严格三层隔离避免调参泄漏 |
具体示例(LOSO,9 折):对 i in 101…109,以 subject_i 全部窗口为测试、其余 8 名为训练;取 9 次 acc/F1 的宏平均。若觉得 9 折样本方差大,可改 GroupKFold 5 折并报告方差。
§5.3 数据泄漏风险防御
这是 PAMAP2 最重要的使用红线。PAMAP2 的连续时序 + 少量受试者使其对"划分泄漏"极度敏感:
| 泄漏类型 | 说明 | 后果 | 防御 |
|---|---|---|---|
| 随机窗口划分泄漏 | 相邻窗口(高度重叠,重叠常达 50%–78%)被随机分入 train/test | acc 虚高:文献实证 PAMAP2 从约 92% 被抬到约 98%+ | 一律按 subject 分组划分,勿对窗口做随机 split |
| 同一受试者跨 train/test | 同人的相似动作样本两边都有 | 高估泛化 | GroupShuffleSplit / LOSO |
| 特征泄漏(归一化) | 用全库统计量做标准化再划分 | 测试集被污染 | 只拟合训练集均值/方差再变换测试集 |
| 数据增强泄漏 | 对同一受试者窗口做变换增强并混入训练 | 同主体泄漏增强 | 增强只在训练子集内做,subject 维度不跨 |
| 测试集复用调参 | 反复用 LOSO 的同一折选超参 | 过拟合测试折 | 内部再划验证子集或嵌套 CV |
文献实证:Bouchabou 等人与 2310.11950 研究均显示,把同一窗口化数据做"随机训练/测试划分"比"按受试者分组划分"性能显著更高(PAMAP2 约从 86% 的 balanced-accuracy/F1 被抬到约 90–92% 甚至更高)——这是 PAMAP2 上最常被新研究者踩的坑。凡论文不说明"按受试者分组",其高分须存疑。
§5.4 交叉验证建议
- 首选按 subject 分组的外层 CV(LOSO 或 GroupKFold),每折统计窗级指标后再在受试者维度上聚合,避免样本级计数放大长受试者权重。
- 类别不平衡显著,报告宏平均/加权 F1 与类别级 recall,而非只看总体 acc。
- 复现性:固定随机种子、公开预处理脚本;必要时用多个初始化重复实验取均值(文献常用 3–5 次)。
- 若目标是"少样本/域泛化"研究,注意 Optional 活动仅 5 名受试者,天然形成部分类别跨受试者缺失的 non-IID 设定(许多联邦/噪声学习论文即利用此特性做实验)。
§5.5 外部验证
PAMAP2 采集自单一德国健康青年群体,向真实穿戴应用迁移时必须用其他受试者/环境做外部验证:
| 外部数据 | 做法 | 验证点 |
|---|---|---|
| 其他活动识别数据集(OPPORTUNITY、USC-HAD、mHealth) | 预训练/迁移/零样本 | 跨域泛化、传感器异构鲁棒性 |
| Real-World IDLab 等自由生活数据 | 域适应(受控→自由生活) | 从脚本活动到真实连续生活的漂移 |
| 目标人群小规模自采 IMU | 个人化微调评估 | 面向慢病/老年人群时的动作差异 |
| 心率缺失模拟 | 人为 mask 心率列训练 | 心率模态不可用时的鲁棒性 |
§6 AI 就绪指南
§6.0 云端快速启动
PAMAP2 较小(压缩 656 MB),单机即可处理,无需专门云端。若需在 Kaggle/Colab 免下载使用,可用 HuggingFace MONSTER 镜像或 ucimlrepo:
# 方式 A:ucimlrepo 直接拉取为 DataFrame(需联网)
from ucimlrepo import fetch_ucirepo
pamap2 = fetch_ucirepo(id=231)
X = pamap2.data.features # 特征 DataFrame
y = pamap2.data.targets # 标签
print(pamap2.metadata)
# 方式 B:HuggingFace 已清洗窗口版本(MONSTER,12 类 LOSO 设计)
# from datasets import load_dataset
# ds = load_dataset("monster-monash/PAMAP2")
§6.1 快速上手
本节演示如何读取官方 .dat。目录结构预期:解压 PAMAP2_Dataset.zip 后 data_root 下含 Protocol/ 与 Optional/;Protocol/subject101.dat 即 subject101 的协议活动数据。data_root 拼接:Protocol 文件路径 = f"{data_root}/Protocol/subject{i}.dat"。最小可用子集:多数研究只用 Protocol/(9 名受试者、12 活动)。
import os
import numpy as np
import pandas as pd
DATA_ROOT = "PAMAP2_Dataset" # 解压后的目录
subject_ids = [101, 102, 103, 104, 105, 106, 107, 108, 109]
# 读取一个受试者的协议活动 .dat(空格分隔,含 NaN)
df = pd.read_csv(
os.path.join(DATA_ROOT, "Protocol", "subject101.dat"),
sep=r"\s+", header=None, na_values=["NaN"],
engine="python",
)
# 官方列布局:0=timestamp, 1=activityID, 2=heart_rate, 3..53=52 传感通道
df.columns = ["timestamp", "activityID", "heart_rate"] + \
[f"f{i}" for i in range(3, 54)]
print(df.shape) # (若干万, 54)
print(df["activityID"].value_counts().head())
一次性读取全部 9 名受试者并按活动子集筛选(12 项协议活动的标准起步):
def load_all_protocol(data_root, subjects):
"""读回所有受试者的协议活动数据,返回 {subject_id: DataFrame}。"""
frames = {}
for sid in subjects:
p = os.path.join(data_root, "Protocol", f"subject{sid}.dat")
d = pd.read_csv(p, sep=r"\s+", header=None, na_values=["NaN"],
engine="python")
d.columns = ["timestamp", "activityID", "heart_rate"] + \
[f"f{i}" for i in range(3, 54)]
d["subject"] = sid
# 剔瞬态 + 只保留 12 项协议活动(见 §6.5 坑点 2)
protocol_ids = {1, 2, 3, 4, 5, 6, 7, 12, 13, 16, 17, 24}
d = d[d["activityID"].isin(protocol_ids)].reset_index(drop=True)
frames[sid] = d
return frames
subjects = [101, 102, 103, 104, 105, 106, 107, 108, 109]
all_data = load_all_protocol("PAMAP2_Dataset", subjects)
for sid, d in all_data.items():
print(sid, d.shape, d["activityID"].nunique())
运行此段会看到各受试者行数明显不同(subject-level 不平衡),这正是 LOSO 必须"逐折报告而非只看总量"的原因(见 §5.4)。
§6.2 数据获取流程
PAMAP2 开放、免申请,流程简单:
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 打开 UCI 页面 | https://archive.ics.uci.edu/ml/datasets/pamap2+physical+activity+monitoring |
| 2 | 下载 PAMAP2_Dataset.zip | 656.3 MB,无登录 |
| 3 | 解压并核对文档 | 确认 Protocol/、Optional/ 与 5 份 PDF |
| 4 | 获取 DOI 与许可 | 数据集 DOI 10.24432/C5NW2H,CC BY 4.0 |
| 5 | 引用 | 引用 Reiss & Stricker 2012 ISWC 论文(见 §9 BibTeX) |
# 命令行下载(示例)
wget https://archive.ics.uci.edu/static/public/231/pamap2+physical+activity+monitoring.zip \
-O PAMAP2_Dataset.zip
unzip PAMAP2_Dataset.zip -d PAMAP2_Dataset
若目标只是快速复现研究,直接下载 HuggingFace MONSTER 处理版或 Zenodo 预处理版可省去清洗步骤;但任何不基于原始 .dat 的复现都要声明所用的预处理脚本,否则分数不可比。
§6.3 预处理全流程
标准管线:读取 → 剔瞬态 → 选通道 → 降采样/缺失处理 → 归一化 → 窗口化 → 按受试者划分。
import numpy as np
import pandas as pd
def load_subject(path):
"""读取单个 subject 的 .dat,返回 DataFrame(54 列已命名)。"""
df = pd.read_csv(path, sep=r"\s+", header=None, na_values=["NaN"], engine="python")
df.columns = ["timestamp", "activityID", "heart_rate"] + \
[f"f{i}" for i in range(3, 54)]
return df
def preprocess(df, drop_transient=True, keep_acc16=True, resample_hz=33.3,
window=100, step=50, fs=100.0):
"""核心预处理:剔瞬态 + 选通道 + 分片丢弃 + 窗口化。"""
# 1) 剔瞬态:activityID==0 为过渡,官方建议剔除
if drop_transient:
df = df[df["activityID"] != 0].reset_index(drop=True)
# 2) 只保留 ±16g 三通道 + 可选陀螺/心率;此例示范 acc16(每 IMU xyz=3)
# IMU 通道: 3-19 hand, 20-36 chest, 37-53 ankle
acc16_hand_cols = [3, 4, 5] # hand ±16g x/y/z (绝对列索引)
acc16_chest_cols = [20, 21, 22]
acc16_ankle_cols = [37, 38, 39]
keep = [1] + acc16_hand_cols + acc16_chest_cols + acc16_ankle_cols
arr = df[keep].to_numpy(dtype=float) # 标签 + 9 通道
# 3) 行内全 NaN(整段无线丢包)视为不可用,过滤
arr = arr[~np.isnan(arr).all(axis=1)]
# 4) 可选:降采样(时间轴按 ts 聚合)
# 简化实现:按固定步长取行(演示)。严谨降采样见文献 100->33.3Hz 方案。
# 5) 窗口化(非重叠,标签取众数),避免重叠放大泄漏
X, y = [], []
n = len(arr)
for s in range(0, max(n - window, 1), step):
w = arr[s:s + window]
if len(w) < window:
break
# 窗口内允许少量 NaN(做插值/前向填充),若缺口过大则跳过
if np.isnan(w[:, 1:]).mean() > 0.5:
continue
w_filled = np.nan_to_num(w[:, 1:], nan=0.0)
X.append(w_filled)
y.append(pd.Series(w[:, 0]).mode().iloc[0])
return np.stack(X), np.array(y)
关键点:归一化必须在划分之后,仅用训练受试者统计量(见坑点 6)。若要使用心率模态,先把 ~9 Hz 心率插值/聚合到 100 Hz 或直接做窗口级均值再拼接为第 10 维特征(见坑点 5)。
加入心率模态的窗口级聚合示例(把每窗口心率的均值与标准差拼成额外 2 维,规避逐点 NaN):
def window_with_hr(df, window=100, step=50, acc16_cols=(3,4,5,20,21,22,37,38,39)):
"""在 ±16g 加速度 9 通道基础上,把心率窗口聚合为 2 个额外特征。"""
rows = []
ts = df["timestamp"].to_numpy()
acc = df[[f"f{i}" for i in acc16_cols]].to_numpy(dtype=float)
hr = df["heart_rate"].to_numpy(dtype=float)
lab = df["activityID"].to_numpy()
for s in range(0, len(df) - window, step):
a, h, l = acc[s:s+window], hr[s:s+window], lab[s:s+window]
if np.isnan(a).mean() > 0.5:
continue
a = np.nan_to_num(a, nan=0.0)
hr_mean = np.nanmean(h) if not np.isnan(h).all() else 0.0
hr_std = np.nanstd(h) if not np.isnan(h).all() else 0.0
feats = np.hstack([a, np.full((window, 2), np.nan)]) # 占位 2 列
rows.append((a, hr_mean, hr_std, pd.Series(l).mode().iloc[0]))
Xacc = np.stack([r[0] for r in rows]) # (N, T, 9)
Xhr = np.array([[r[1], r[2]] for r in rows]) # (N, 2) 窗口级
y = np.array([r[3] for r in rows])
return Xacc, Xhr, y
若想要"心率与 IMU 同步到同一 100 Hz 栅格后逐点融合"的高分辨率方案,需先线性插值心率再与加速度拼接为第 10 通道;多数实验用窗口级聚合即可获得生理负荷信息且更稳健(见 §6.5 坑点 4)。
§6.4 框架加载
以 PyTorch 封装 LOSO 划分的数据:
import numpy as np
import torch
from torch.utils.data import Dataset, DataLoader
class PAMAP2Windows(Dataset):
def __init__(self, X, y):
self.X = torch.from_numpy(X).float() # (N, T, C)
self.y = torch.from_numpy(y).long()
def __len__(self):
return len(self.y)
def __getitem__(self, i):
return self.X[i].transpose(0, 1), self.y[i] # (C, T)
# 以 LOSO 为例:把 subject108 全部窗口作为测试,其余训练
# 伪数据占位——实际需先对每个 subject 跑 preprocess()
X_train, y_train = np.random.randn(5000, 100, 9), np.random.randint(0, 12, 5000)
X_test, y_test = np.random.randn(900, 100, 9), np.random.randint(0, 12, 900)
train_ds = PAMAP2Windows(X_train, y_train)
test_ds = PAMAP2Windows(X_test, y_test)
train_loader = DataLoader(train_ds, batch_size=128, shuffle=True)
test_loader = DataLoader(test_ds, batch_size=256, shuffle=False)
运行时结构提醒:X 形状 (N, T, C)——T 为窗口内时间步、C 为通道数(9 若只取 3×±16g 加速度,或更多若含陀螺/磁力/心率);切窗标签取窗口内 activityID 众数。
§6.5 常见坑点
⚠️ 坑点 1:随机切窗口做训练/测试划分造成严重的 subject 泄漏(分类:数据泄漏)
问题:PAMAP2 只有 9 名受试者,连续时序在 50%–78% 高重叠窗口下高度自相关。直接对窗口做随机 train/test split,会把同一受试者、时间上近乎重叠的样本分到两边,模型"记住人"而非"学会活动"。
症状:LOSO 才能到约 86–92% 的模型,在随机划分下 acc 飙到 95–99%+;论文分数与别人对不上。
解决:
- 简单方法:一律用 GroupShuffleSplit 或 leave-one-subject-out,分组键 = subject。
- 进阶方法:三层隔离——subject 分组外再留出 1–2 名受试者做最终测试,内部用 GroupKFold 调参;归一化统计量只用训练受试者(见坑点 6)。
- SOTA 方法:报告宏平均 F1 + 受试者级聚合,并固定随机种子与预处理脚本(如 mcfly/MONSTER 公开版)保证可复现。
参考:https://arxiv.org/pdf/2310.11950v1 (随机 vs 分组划分实证)。
⚠️ 坑点 2:activityID=0 与活动切换瞬态未剔除(分类:标签理解)
问题:活动间切换、等待、搬运器材的过渡样本被标为 activityID=0。官方 readme 明确"data labeled with activityID=0 should be discarded in any kind of analysis",但仍常见新手把它当作一类参与训练。
症状:多出一个庞大的"其他"类,占比较高(自由生活采集可达近三成),淹没真实活动;或未剔时窗口边缘横跨两类活动导致标签污染。
解决:
- 简单方法:
df = df[df.activityID != 0]。- 进阶方法:切窗前先剔除 0,窗口若仍跨不同活动ID(不纯)则丢弃或取众数标签;可要求窗口至少 85% 主类帧才保留(零样本/域研究常用纯度阈值)。
- SOTA 方法:把纯度阈值写进预处理脚本公开,标注窗口不纯率。
参考:https://archive.ics.uci.edu/ml/machine-learning-databases/00231/readme.pdf
⚠️ 坑点 3:±6g 加速度通道高冲击饱和,被误当真实值训练(分类:预处理陷阱)
问题:官方注明 ±6g 加速度计与 ±16g 未精确校准,且跑步等动作加速度超 6g 时会饱和截断。把 ±6g 与 ±16g 并列训练会引入平台饱和伪影。
症状:跑步/跳绳类别的加速度特征被人为截在 ±6g 平台,模型学到的"高冲击"其实是被截顶的失真信号;两量程数值比例与物理不符。
解决:
- 简单方法:只用 ±16g 三通道(官方推荐),弃 ±6g。
- 进阶方法:若确需多量程做融合,先用 ±16g 标定 ±6g 或对饱和段加掩码,避免把截顶值当真。
- SOTA 方法:社区预处理(mcfly/MONSTER)均默认只保留 ±16g 加速度通道。
参考:https://archive.ics.uci.edu/ml/machine-learning-databases/00231/readme.pdf
⚠️ 坑点 4:心率列几乎处处 NaN,却当稠密特征直接喂模型(分类:预处理陷阱)
问题:心率带约 9 Hz,而 IMU 100 Hz,逐行对齐后绝大多数行心率缺失(NaN)。直接把心率列作为逐点特征输入神经网络会因稀疏 NaN 崩溃,或让梯度被 NaN 污染。
症状:训练 loss 变 NaN、acc 归零;或整列被插值成错误常数仍无信息。
解决:
- 简单方法:做窗口级聚合——把每窗口心率均值/最大作为"窗口级特征"拼到窗口向量,天然免疫逐点 NaN。
- 进阶方法:先用时间插值(线性/样条)把心率升到 100 Hz 再做窗口(文献常用线性插值);或保持 9 Hz 单独一路、与 100 Hz 路双流异步融合。
- SOTA 方法:将心率缺失建模为信息性机制,用带掩码/采样的多模态编码器,只在心率可用时段融合。
参考:ar5iv 2510.08359(对 PAMAP2 心率插值做法)与各 HAR 融合论文。
⚠️ 坑点 5:四元数朝向与部分 sensor 段在官方采集中无效/不可用(分类:标签理解)
问题:官方说明 4 维 orientation 四元数"invalid in this data collection";同时无线丢包造成任意通道整段 NaN。直接保留 4 维朝向会引入全噪声维度,让网络浪费容量。
症状:加了朝向维度后 acc 不升反降;某些通道全为常量/NaN 导致标准化爆 NaN。
解决:
- 简单方法:丢弃每 IMU 的 4 维朝向(只留 13 维:温度+6 加速度+3 陀螺+3 磁力),并过滤整行全 NaN 的段。
- 进阶方法:对剩列做中位数/均值插值再标准化;标准化用按通道稳健统计量(避免饱和值拉偏)。
- SOTA 方法:多数公开处理版(MONSTER)将 54 列降至约 31 有效特征通道,明确剔除朝向与饱和加速度。
参考:https://huggingface.co/datasets/rnicrosoft/PAMAP2 ;https://huggingface.co/datasets/monster-monash/PAMAP2
⚠️ 坑点 6:归一化用全库统计量,把测试受试者的信息泄漏进特征缩放(分类:数据泄漏)
问题:很多人先对全库算均值/方差做 z-score,再划分 train/test。测试受试者的统计量参与了缩放,违反 subject-out 泛化设定,高估性能。
症状:LOSO 分数虚高但不稳定;换受试者划分后波动大、复现差。
解决:
- 简单方法:归一化放在划分之后,只 fit 训练受试者统计量。
- 进阶方法:把归一化算子写进 PyTorch transform,且 transform 只在 train_loader 端持有;对 test 用训练集保存的 mean/std。
- SOTA 方法:公开的 MONSTER/mcfly 处理版会在 card 声明归一化只在训练子集 fit——直接复用其约定。
参考:https://arxiv.org/html/2606.10789v1 (Z-scored using training-set statistics only)
⚠️ 坑点 7:可选活动仅 5 名受试者完成,强行并入 18 类导致活动-受试者混叠(分类:标签理解 / 偏倚陷阱)
问题:看电视/电脑/开车/叠衣/打扫/踢球等 6 项可选活动只存在于 5 名受试者的 Optional/。若把 18 类全建模,模型容易把"类别"与"做过它的受试者"绑定,LOSO 测试时含该活动的受试者要么缺失要么成为群体特异信号。
症状:踢球/叠衣等仅部分受试者有的类别在 LOSO 下 recall 骤降或极高;跨受试者不可比。
解决:
- 简单方法:只保留全部 9 名受试者都执行的 12 项协议活动做标准分类(社区默认)。
- 进阶方法:若研究需要 18 类,须显式声明"可选活动仅若干受试者",用宏平均 F1,且避免把受试者身份当特征。
- SOTA 方法:把这种活动-受试者缺失当作天然的 non-IID/零样本设定来研究(联邦、少样本),而不是回避。
参考:https://core.ac.uk/download/249955402.pdf (Protocol 9 人 / Optional 5 人)
⚠️ 坑点 8:忽略受试者间动作差异,把 IMU 贴法/身体差异当噪声丢弃(分类:偏倚陷阱)
问题:9 名受试者身高体重、走路步态、IMU 松紧与佩戴朝向不同,加速度量纲与幅值差异大。若不做个人化或域适配,模型对未见受试者(尤其极端的左利手 108、女 102)会掉点。
症状:LOSO 中某个受试者折显著偏低;同一窗口阈值对某些人过灵对另一些人不灵。
解决:
- 简单方法:LOSO 报告逐折结果,找出并说明表现差的受试者折。
- 进阶方法:加个人化微调/测试时域适配(每人少量标定样本),或做 per-subject 标准化/重定向到标准坐标。
- SOTA 方法:把"仅 9 名受试者"当作域泛化核心挑战,用元学习、联邦、域对齐处理 subject shift;文献(GLULA 等)也常把特定 subject(如 106)单列测试以放大难度。
参考:https://pmc.ncbi.nlm.nih.gov/articles/PMC11016367/ (leave-one-subject-out 评测与受试者差异)
§6.6 数据增强
| 增强 | 安全性 | 理由 |
|---|---|---|
| 通道加噪 / 缩放 / 时移 | ✅ 安全 | 对 IMU 平移/缩放/加噪近似真实噪声,增强幅度稳定性 |
| 窗口随机裁剪(部分重叠) | ✅ 安全(仅训练内) | 增加样本,但勿跨 subject 或用于测试 |
| 坐标旋转(绕重力轴 / 随机旋转) | ✅ 安全(限重力归一化后) | 提升对佩戴朝向鲁棒性,需先重定向 |
| Mixup / 通道拼装(同受试者) | ⚠️ 慎用 | 可改善平滑性,但标签混合需小心;跨 subject mixup 易造成泄漏 |
| 测试时重叠窗口投票 | ✅ 安全 | 提高稳定性,可接受 |
| 跨受试者拼接合成样本 | ❌ 危险 | 泄漏 subject 信息,虚高 LOSO |
| 只对少数类复制(SMOTE) | ⚠️ 谨慎 | 缓解不平衡,但在 100 Hz 时序上需在特征/窗口层做,勿逐点造信号 |
增强务必只在训练子集内、subject 维度内进行(见坑点 1/6)。
§6.7 模型推荐
| 模型 | 输入 | 典型表现(LOSO/12 类) | 何时选用 |
|---|---|---|---|
| 手工特征 + XGBoost/RF | 窗口统计特征 | 约 90–97% | 快速基线、可解释、资源受限 |
| SVM(RBF,手工特征) | 窗口特征 | 约 91–92%(acc) | 经典传统基线,便于对标 |
| HMM / 时序概率模型 | 特征序列 | 约 92–93%(acc) | 需结构/状态转移建模的早期基线 |
| 1D-CNN | 原始/轻特征窗口 | 约 95–98% | 通用强基线 |
| CNN-BiGRU / CNN-LSTM | 原始窗口 | 约 95–96%(acc) | 时序依赖与局部特征兼顾 |
| 注意力 / Transformer(TCN-BiGRU 等) | 原始窗口 | 约 96–99%+ | SOTA、长程依赖、多模态融合 |
| 联邦/域泛化模型 | 多受试者流 | 视设定 | 研究 subject shift、隐私(非官方任务) |
⚠️ 表中数值来自不同论文、不同预处理与活动子集(有些是 6/8/12/14 类、有些含心率、有些降采样、有些只用单 IMU),绝对值不可直接跨论文比较。真正可比的是"同一公开脚本 + 同一活动子集 + LOSO"下的相对排名(详见 §8.3 评测协议警示)。
§6.8 计算资源需求
| 方案 | CPU | GPU | 内存 | 时长(估算) |
|---|---|---|---|---|
| 快速原型(RF/XGBoost,手工特征) | 任意 4–8 核 | 不需要 | 8–16 GB | 分钟级 |
| 1D-CNN(12 类 LOSO) | 4–8 核 | 1× 入门级(8–16 GB) | 16 GB | 每折数分钟到十几分钟 |
| Transformer/融合 SOTA | 8 核+ | 1× 中高端(16–24 GB) | 32 GB | 9 折×数小时 |
| 全量 18 类 + 多模态融合 | 8 核+ | 1× 高端 | 32–64 GB | 数小时到 1 天 |
PAMAP2 本体只有 3,850,505 行、含 NaN,约 1–2 GB 原始浮点数据,加载与特征化单机绰绰有余;算力瓶颈在深度模型在 9 折 LOSO 上的重复训练。
§6.9 评估指标
import numpy as np
from sklearn.metrics import accuracy_score, f1_score, confusion_matrix
def evaluate(y_true, y_pred, labels=None):
"""PAMAP2 LOSO 常用指标:macro/weighted F1 + per-subject accuracy。"""
acc = accuracy_score(y_true, y_pred)
macro_f1 = f1_score(y_true, y_pred, average="macro", zero_division=0)
w_f1 = f1_score(y_true, y_pred, average="weighted", zero_division=0)
print(f"acc={acc:.4f} macro_F1={macro_f1:.4f} weighted_F1={w_f1:.4f}")
return {"acc": acc, "macro_f1": macro_f1, "weighted_f1": w_f1}
# LOSO 循环:汇总 9 折,再在 subject 维度报告均值±std
def loso_summary(fold_metrics):
accs = [m["acc"] for m in fold_metrics]
mf1s = [m["macro_f1"] for m in fold_metrics]
print(f"LOSO acc = {np.mean(accs):.4f} +/- {np.std(accs):.4f}")
print(f"LOSO mF1 = {np.mean(mf1s):.4f} +/- {np.std(mf1s):.4f}")
因 18 类中可选活动类别高度不平衡,务必报告 macro-F1;只报总体 acc 会把少数类(踢球、跳绳)的错误掩盖掉。
§6.10 MLOps 笔记
- 可复现:把"下载原 .dat + 预处理脚本"版本化提交(或直接用 Zenodo/MONSTER 带 DOI 的处理版);记录窗口长度、步长、活动子集、归一化是否在 train 内 fit。
- 监控:部署到穿戴设备后,用窗口内 NaN 率与加速度量程分布做数据漂移告警(心率缺失率、±6g 饱和率上升预示佩戴异常)。
- 数据版本:PAMAP2 本体单一;若同时用多个镜像(原始/预处理),必须在实验记录中写明用哪个 DOI/路径,否则 LOSO 分数无法复现。
- 多人协作:统一 subject ID 表示(101–109 整型)、统一列命名、统一活动子集常量,放入共享 config 文件。
§7 质量评估与局限性
§7.1 已知偏倚
| 类型 | 描述 | 严重程度 | 缓解 |
|---|---|---|---|
| 群体偏倚 | 健康、年轻(~24–31 岁)、以男性/右利手为主、德国本地生活 | 高 | 明确适用人群;外部验证到目标群体;避免宣称通用健康监测 |
| 环境偏倚 | 多数为受控室内脚本,活动间有固定顺序与休息 | 高 | 部署前用自由生活数据做域适应 |
| 类别-受试者混叠 | 可选活动仅 5 名受试者,属强不平衡 | 中-高 | 只用协议子集或显式声明;宏平均 F1 |
| 传感偏倚 | ±6g 饱和、朝向无效、心率稀疏 | 中 | 只用 ±16g;心率做窗口聚合 |
| 受试者规模 | 仅 9 人,统计功效低 | 高 | 报告逐折方差;多 seed 重复;与外数据集交叉验证 |
| 时长不均 | 各受试者样本量差异大 | 中 | 按 subject 聚合再平均 |
§7.2 标注质量
- 正面:脚本驱动标注消除了逐帧主观判读偏差;多数活动(躺/坐/站/走/跑)语义边界清晰。
- 局限:活动切换的"瞬态"样本标为 0(官方要求剔除);采集中断段被拼接(readme 指出心率有跳变);跳绳/跑步等高速动作为弱可辨识边界、受试者间动作幅度差异大,近邻混淆不可避免。
- 应对:报告中给出混淆矩阵,重点观察跑/跳绳、熨衣/打扫等易混淆对;若类别间混淆在可解释物理层(同为高冲击/同侧上肢往复运动),说明标注本身合理而特征区分难,是方法层面的可改进点。
§7.3 泛化性讨论
| 场景 | 失效风险 | 证据/依据 |
|---|---|---|
| 同一德国健康青年新受试者(LOSO) | 低-中 | 文献 LOSO 通常 >90%,但个别受试者折(如 102 女、108 左利)可能偏低 |
| 换国家/文化(动作习惯不同) | 中-高 | 北欧健走、家务动作具地域性 |
| 老年人 / 慢病患者 | 高 | 步态、幅度、佩戴方式差异大;需再采集验证 |
| 自由生活(非脚本连续行为) | 中-高 | 脚本活动到真实生活的"片段边界"漂移显著 |
| 仅单点 IMU / 仅心率 | 中 | 依赖三点 IMU 的动作类(跑步/跳绳)会退化为强度而非类型区分 |
§7.4 伦理考量
PAMAP2 采集自知情同意的健康志愿者,发布时已按 subject 编号脱敏,不含姓名、影像或可定位到个人的信息,遵循 CC BY 4.0 许可。用于健康监测方向的派生模型涉及个人运动与生理数据隐私,使用与部署时应:仅收集完成任务所需的最小传感维度、本地处理优先、明确告知用户被收集的是身体运动与心率信号。作为"健康非病人"数据,其伦理负担低于临床数据库,但仍有可穿戴隐私的一般风险。
§7.5 公平性
PAMAP2 性别(1/9 女性)、利手(1/9 左利)、年龄范围(青年)与群体多样性均不足,因此不能声称其训练模型对性别、年龄、人群公平。若下游用于需公平性的健康干预,必须:(1) 报告按受试者(尤其 102 女、108 左利)划分的子组性能;(2) 在代表性人群上补充数据或做去偏训练。公平性指标(按受试者分组的宏平均 F1 差异)应在论文中披露。
§7.6 数据漂移
- 本体为 2012 年单次采集,跨十余年的"物理传感器漂移"不存在于数据内;但若用现代不同型号 IMU,量程/噪声/佩戴位置均漂移,需重标定。
- 部署期的可预期漂移:心率缺失率、±6g 饱和率、佩戴松动引起的噪声水平、季节温度对磁力计/加速度零偏的影响。
- 建议监控窗口内传感统计量并设置漂移阈值;漂移显著时触发重训练或域适配。
§7.7 DAIMS 24 项数据就绪度评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 数据为宽格式(每行一个样本/事件) | ✅ | 每行一个时间样本、54 列 |
| 2 | 有唯一标识符列 | ⚠️ | 行级仅时间戳+受试者文件分隔;无全局主键,需自行按文件+ts 复合标识 |
| 3 | 无 Unicode 或特殊字符 | ✅ | 数值纯 ASCII;activityID 为整型 |
| 4 | 无重复行 | ✅ | 按时间戳+文件组织,无重复样本 |
| 5 | 缺失值已识别并编码 | ✅ | 明文以 NaN 编码(§4.5) |
| 6 | 标签列被明确标识 | ✅ | activityID 列 + 官方映射文档 |
| 7 | 已对罕见类别(<3%)进行分组 | ❌ | 官方保留全部 18 类含稀疏可选类;需自行收缩到 12 协议类 |
| 8 | 偏倚评估已完成 | ⚠️ | 群体/传感偏倚明确(§7.1),但无量化统计报告 |
| 9 | 有完整的数据字典 | ✅ | readme.pdf 逐列说明 + §4.1 本字典 |
| 10 | 对"信息性缺失"有明确编码解释 | ✅ | 心率机制性缺失与 ±6g 饱和均说明(§4.5) |
| 11 | 数据采集设备和设置已记录 | ✅ | 设备型号/位置/采样率详录(§3.9) |
| 12 | 已移除完全共线性变量 | ⚠️ | 保留 ±6g/±16g 双加速度与朝向等冗余/无效通道,需自剔 |
| 13 | 对编码的映射标准已说明 | ✅ | activityID→活动中文表完整(§4.2) |
| 14 | 对时间戳的处理已明确说明 | ✅ | 相对秒数、100 Hz 栅格;采集中断有跳变说明 |
| 15 | 训练/验证/测试划分建议已给出 | ❌ | 官方无固定划分(见 §5.1) |
| 16 | 数据泄漏风险已被讨论 | ✅ | §5.3 系统列出 subject 泄漏模式并给实证 |
| 17 | 标签分布已被分析 | ✅ | §4.2 类别-覆盖表 |
| 18 | 选择性测量偏倚已被讨论 | ✅ | 可选活动覆盖不全、心率稀疏均视为偏倚源 |
| 19 | 外部验证建议已给出 | ✅ | §5.5 外部数据集矩阵 |
| 20 | 数据更新和版本信息已记录 | ✅ | §1.4 版本时间轴 |
| 21 | 最小必要预处理脚本已提供 | ⚠️ | 官方无脚本;社区 mcfly/Zenodo/MONSTER 补位 |
| 22 | 合规使用要求已明确 | ✅ | CC BY 4.0,注明归属 |
| 23 | 多模态对齐方法已说明 | ✅ | 三 IMU + 心率对齐到 100 Hz 栅格已说明(时间同步、心率 NaN) |
| 24 | 去标识化方法已被记录 | ✅ | 仅 subject 编号、无个人识别信息 |
DAIMS 评分:18.0 / 24
评分解读:良好但非满分——PAMAP2 的强项是文档化(字典/设备/缺失说明齐全)、标签体系清晰、偏倚与泄漏讨论充分,这些都源于它是"被引用上万次"的教学型基准,官方把能说的坑(±6g 饱和、activityID=0、心率低频、朝向无效)几乎全部写进了 readme。扣分集中在缺乏"工程就绪"层面的正式交付:无官方固定划分(15)、无官方预处理脚本(21)、保留无效/冗余通道(3、7、12)、样本级主键缺失(2)。这些不是"数据错",而是"原始数据集的边界"——它把清洗、划分、去冗余的工程责任完整地留给了使用者。
对你意味着什么:这是典型的"高质量原始数据 + 无官方工程层"组合。拿过来直接跑会掉进六个工程坑,但正因为这些坑都被官方 readme 明确记录,你的处理其实是"有答案的填空题"而非"无头绪的开放题"。具体行动:(1) 首次使用务必通读 readme.pdf 的列布局与 activityID 段;(2) 固定"剔 activityID=0 + 只用 ±16g + 丢弃朝向 + 心率窗口聚合"这套基线,再谈创新;(3) 划分一律 subject 分组,归一化只 fit 训练;(4) 报告 LOSO 的 macro-F1 与逐折方差。若你不想碰工程层,直接用 Zenodo/MONSTER 的已清洗版并声明其 DOI 即可。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| OPPORTUNITY | ETH/多校合作 | 跨数据集域迁移(动作识别) | acc/F1 | 显著下降 | 室内容器 vs 脚本身体活动分布差异大,需域适配 |
| USC-HAD | USC | 跨数据集迁移 | acc/F1 | 下降 | 单点 IMU vs 三位置 IMU 的特征依赖差异 |
| mHealth | UCI 原创者 | 跨数据集迁移/零样本 | F1 | 下降 | ECG 与 50 Hz 采样下复用 PAMAP2 预训练有限 |
| Real-World (IDLab) | IDLab/Ghent | 受控→自由生活域迁移 | F1 | 明显下降 | 脚本活动到自由生活连续行为存在"片段边界漂移",是 PAMAP2 最应被指出的部署鸿沟 |
表内结果基于文献对穿戴活动识别域迁移的通用结论与 PAMAP2 分布特征推断(见 §1.3 对比与 §7.3);PAMAP2 本身没有官方对外部验证的逐行基准,具体迁移分数随方法与预处理而变,引用时须以原始论文为准。
§8 基准性能与生态
§8.1 排行榜
⚠️ 可比性警示:下表数值来自不同论文,活动子集(6/8/12/14 类)、预处理(是否降采样、含不含心率/陀螺、窗口长度)与划分(LOSO vs 随机、测试受试者)各不相同,不可直接跨行比较绝对值。真正可比的只有"同一公开脚本 + 同一活动子集 + LOSO"下的相对顺序。
| 排名(相对) | 模型 | 性能(指标,活动子集) | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 高 | TCN-attention-HAR teacher | acc 约 0.9835 / macro-F1 约 0.9829(12 类协议) | 2024 | 时序卷积 + 注意力师生蒸馏 | Munzner 等 / 见 PMC10978978 | 见原论文 |
| 高 | UniMTS(评测基准重测) | acc 约 98%(多任务,评测协议依赖) | 2024 | 通用时间序列基座 | SOTA2 记录 | sota2 条目 |
| 中高 | CNN-BiGRU | acc 约 0.9652 / F1 约 0.9616(12 类协议) | 2024 | CNN 特征 + BiGRU 时序 | 见 PMC10978978 | — |
| 中高 | Attention-LSTM / GRU-attention | acc 约 0.9116–0.9792(12 类协议) | 2020–2024 | 注意力加权 LSTM/GRU | 见 PMC10978978 | — |
| 中 | CNN-LSTM | acc 约 0.9527 / F1 约 0.9464 | 2024 | CNN-LSTM 融合 | 见 PMC10978978 | — |
| 中低 | HMM(传统) | acc 约 0.9266 / F1 约 0.9173(12 类协议) | 早期 | 隐马尔可夫状态模型 | Reiss 2012 / PMC10978978 | — |
| 低 | SVM(RBF,手工特征) | acc 约 0.9162 / F1 约 0.9046 | 早期 | 支撑向量机 | PMC10978978 | — |
| 研究性 | 多流 ECA-Net 等 | acc 高达约 0.9995 | 2024 | 高精度特征 + 通道注意力 | ResearchGate 384619190 | — |
补充早期参考:手腕单 IMU、8 类 ADL 子集下,SVM 约 0.75、RF 约 0.98、1D-CNN 约 0.98(Fida 2015 手腕 acc 约 0.96)——说明不同传感器子集/活动子集下分数区间差异巨大,再次印证可比性警示。
§8.2 SOTA 总结与选型建议
- 观测:在统一的 12 类协议、±16g 加速度通道、LOSO 协议下,SOTA 由"CNN 局部特征 + 时序注意力/RNN"类模型占据,acc 普遍 95–98%+;传统 HMM/SVM 稳定在 91–93%,仍是论文常用"必须打过的基线"。
- 瓶颈不在精度而在泛化:一旦换受试者/域,SOTA 优势缩小——说明 PAMAP2 上的"高分"与真实泛化之间存在鸿沟,这也是联邦/域泛化论文选择它的原因。
- 选型建议:快速对标用 SVM/RF 或 1D-CNN 基线;要上 SOTA 用 CNN-BiGRU 或注意力;研究 subject shift/少样本则把 LOSO 当难度来源而非精度目标。若引入心率模态,可带来跨动作的生理负荷区分能力(尤其骑车 vs 走路的强度区分),但须妥善处理心率 NaN(坑点 4)。
§8.3 评测协议
无官方协议;PAMAP2 论文原文给出 4 个基准分类问题与 5 种分类器的标准处理链(特征抽取 + HMM 等)。社区通行协议(务必写进方法学):按受试者分组(LOSO 或 GroupKFold);只用 12 项协议活动(或明确声明的子集);只保留 ±16g 加速度(可含陀螺);100 Hz(可降采样);窗口 100–512 步、重叠 50%–78% 可变;归一化只在训练 fit;报 macro/加权 F1 + 逐受试者折。MONSTER 版进一步固定为 38,856 窗口、12 类、subject 分组 CV,可作为跨论文对标基准。
§8.4 相关数据集
| 数据集 | 与 PAMAP2 关系 | 亮点 |
|---|---|---|
| OPPORTUNITY | 同为 UCI 穿戴活动数据集 | 环境+可穿戴多模态、细粒度 ADL,挑战空类 |
| USC-HAD | 受试者更多(14) | 平衡 12 类、单 IMU |
| mHealth | 多位置 IMU + 双导联 ECG | 生理信号更全 |
| WISDM | 智能手机场景 | 大规模、日常简单动作 |
| PAMAP(第一代) | 同项目前作 | PAMAP2 的前身,PAMAP2 基于其经验设计 |
| Real-World IDLab | 自由生活对照 | 摆脱脚本,标定真实部署漂移 |
§8.5 关键论文 Top 10
- Reiss & Stricker(2012)Introducing a New Benchmarked Dataset for Activity Monitoring. ISWC 2012, pp. 108-109. DOI 10.1109/ISWC.2012.13 —— 数据集原始论文,给出 4 个基准问题与标准处理链,确立活动识别评测范式。
- Reiss, Hendeby & Stricker(2013)Confidence-based Multiclass AdaBoost for Physical Activity Monitoring. ISWC 2013 —— 作者后续在多类活动上的置信度提升方法,常用作同源基线。
- Fida et al.(2015).(单 IMU 手腕活动识别,PAMAP2 上 acc 约 0.96)—— 支撑"单点传感器也够用"的对比结论,见 ar5iv 1804.05493 综述引用。
- Plotz et al.(2016)Deep, Convolutional, and Recurrent Models for Human Activity Recognition using Wearables. —— 深度学习在可穿戴 HAR 的奠基工作,常用 PAMAP2 验证(综述级)。
- Zheng et al.(2014) / 早期 CNN 三通道融合工作 —— 深度 CNN 进入 PAMAP2 早期的代表(acc 约 0.93)。
- 多流 ECA-Net 论文(2024) acc 约 0.9995,展示极高报告精度 —— 提醒读者该类分数依赖特定预处理,勿与 LOSO 直接比。
- PMC10978978(2024)RNN/注意力基准对比表(SVM/HMM/GRU/CNN-GRU/CNN-BiGRU 全谱 acc)—— 同一协议下跨模型横向对标的最新公开表。
- Bouchabou / 2310.11950(2023)分组 vs 随机划分实证 —— 证明随机窗口 split 使 PAMAP2 性能虚高(约 92% vs 86%),支撑 subject-out 必要性。
- NLeSC mcfly(2017)PAMAP2 preprocessed v0.1.0(Zenodo 10.5281/zenodo.345082) —— 社区官方化预处理,窗口 512、±16g、所有受试者共有活动。
- MONSTER(2025,arXiv 2502.15122)+ 数据集卡(monster-monash/PAMAP2) —— 现代可复现时序基准封装,38,856 窗口、12 类、subject 分组 CV。
§8.6 社区活跃度
PAMAP2 属于"长尾高引用"型活跃:原始论文仍在被频繁引用(Google Scholar 累计约 1,900+,截至 2026-09),UCI 数据集页显示数万次浏览,HuggingFace 原始镜像月下载数百次量级。它不是每日更新的数据集,而是稳定的算法研究竞技场——活跃度体现在"新方法持续拿它当评测台",而非数据本身更新。代码生态集中在 mcfly 教程、MONSTER 基座与各类复现仓库。
§8.7 生态快照
| 资源 | 类型 | 链接 | 推荐理由 |
|---|---|---|---|
| UCI 官方页 | 权威托管 | https://archive.ics.uci.edu/ml/datasets/pamap2+physical+activity+monitoring | 原始下载 + 完整变量说明 |
| readme.pdf | 官方文档 | https://archive.ics.uci.edu/ml/machine-learning-databases/00231/readme.pdf | 列布局/activityID/NaN 成因一手说明 |
| Zenodo 预处理版 | 社区处理 | https://doi.org/10.5281/zenodo.345082 | mcfly 教程配套、DOI 可引用 |
| HuggingFace rnicrosoft 镜像 | 原始镜像 | https://huggingface.co/datasets/rnicrosoft/PAMAP2 | 快速免登录浏览列说明 |
| HuggingFace MONSTER 版 | 基准封装 | https://huggingface.co/datasets/monster-monash/PAMAP2 | 38,856 窗口、subject 分组 CV |
| ucimlrepo | 官方 API | pip install ucimlrepo → fetch_ucirepo(id=231) | 一行拉 DataFrame |
| SOTA2 HAR 页 | 评测聚合 | https://www.sota2.com/research/sota/human-activity-recognition-on-pamap2-test | 跨论文模型分数纵览(注意协议差异) |
§9 相关资源与引用
官方文档与社区链接
- 官方主页 / 下载:https://archive.ics.uci.edu/ml/datasets/pamap2+physical+activity+monitoring
- 官方 readme(列布局 / activityID / 缺失说明):https://archive.ics.uci.edu/ml/machine-learning-databases/00231/readme.pdf
- 数据集 DOI:https://doi.org/10.24432/C5NW2H
- 原始论文(IEEE/ACM):https://dl.acm.org/doi/10.1109/iswc.2012.13
- Zenodo 预处理版:https://doi.org/10.5281/zenodo.345082
- HuggingFace 镜像(rnicrosoft):https://huggingface.co/datasets/rnicrosoft/PAMAP2
- HuggingFace MONSTER 处理版:https://huggingface.co/datasets/monster-monash/PAMAP2
- NLeSC mcfly 教程(PAMAP2 预处理参考):https://github.com/NLeSC/mcfly/blob/master/tutorial/tutorial_pamap2.py
BibTeX 完整引用
@inproceedings{reiss2012introducing,
title = {Introducing a New Benchmarked Dataset for Activity Monitoring},
author = {Reiss, Attila and Stricker, Didier},
booktitle = {2012 16th International Symposium on Wearable Computers},
pages = {108-109},
year = {2012},
doi = {10.1109/ISWC.2012.13}
}
@misc{uci_pamap2,
title = {PAMAP2 Physical Activity Monitoring},
author = {Reiss, Attila},
howpublished = {UCI Machine Learning Repository},
year = {2012},
doi = {10.24432/C5NW2H}
}
@misc{zenodo_pamap2_processed,
title = {PAMAP2 dataset preprocessed v0.1.0},
author = {van Kuppevelt, Dafne and van Hees, Vincent and Meijer, Christiaan},
year = {2017},
doi = {10.5281/zenodo.345082}
}
引用指南
- 正式引用数据集:优先引用 Reiss & Stricker 2012 ISWC 论文(reiss2012introducing);UCI 官方同时接受对数据集 DOI 10.24432/C5NW2H 的引用。
- 若用社区处理版:除原始论文外,还需引用 Zenodo 10.5281/zenodo.345082 或对应 HuggingFace 数据集卡。
- 许可:CC BY 4.0 要求给出适当归属——引用上述来源即为满足。
- 引用次数口径:原始论文 Google Scholar 引用约 1,900+(截至 2026-09);该数字随检索数据库与日期变动,作为相对影响力参考。
§10 AI 使用声明卡
§10.1 AI 模型使用
| AI 模型 | 版本 | 用途 |
|---|---|---|
| deep-model(WorkBuddy) | 2026-09 | 初稿生成:INFOBOX 数据汇编、§1-§9 结构化写作、§6 代码示例生成、JSON-LD 构建 |
| WebSearch(多源检索) | 2026-09-05 | 6 组检索:UCI 官方页、原始论文 DOI 与引用、readme、基准与 SOTA、受试者细节、分组/泄漏实证 |
§10.2 AI 参与范围
AI 参与范围:初稿生成 + 资料整理 + 代码生成 + 格式化排版。
AI 在本页面的工作中负责:(1) 从 UCI 官方页、readme.pdf、Reiss & Stricker 2012 论文、Zenodo/HuggingFace 镜像及多篇基准文献整理结构化信息;(2) 生成 §6 的 NumPy/PyTorch 预处理与 DataLoader 示例代码;(3) 系统化组织 §6.5 的 8 个真实坑点(activityID=0、±6g 饱和、心率 NaN、朝向无效、subject 泄漏、归一化泄漏、可选活动覆盖、受试者差异);(4) 执行 G1/G2/G3 排版规范检查与中英文格式标准化;(5) 构建 §C 统一 JSON-LD @graph。
§10.3 输入来源
- UCI Machine Learning Repository — PAMAP2 官方页(https://archive.ics.uci.edu/ml/datasets/pamap2+physical+activity+monitoring)
- PAMAP2 readme.pdf(列布局、activityID 映射、NaN/±6g 说明)
- Reiss & Stricker (2012), ISWC, DOI 10.1109/ISWC.2012.13(原始论文)
- UCI archive-beta 数据集元数据页(DOI 10.24432/C5NW2H、实例数 3,850,505)
- Zenodo 预处理版 DOI 10.5281/zenodo.345082(mcfly 预处理说明)
- HuggingFace rnicrosoft/PAMAP2 镜像卡
- HuggingFace monster-monash/PAMAP2 数据集卡(MONSTER,arXiv 2502.15122)
- ar5iv 1804.05493(PAMAP2 手腕 8 类 ADL 传统 vs 深度对比)
- PMC10978978(SVM/HMM/GRU/CNN 全谱 acc/F1 对比表,2024)
- arXiv 2310.11950(随机 vs 分组划分泄漏实证)
- arXiv 2606.10789 / PMC11016367(LOSO 评测、受试者 106 单测、Z-score 训练内 fit)
- core.ac.uk 249955402(Protocol 9 人 / Optional 5 人、受试者人口学)
- PMC5191029(每受试者 10 小时、12+6 活动拆分、各活动秒数)
- Google Scholar / 数据集页引用快照(截至 2026-09)
- SOTA2 HAR on PAMAP2(跨论文分数纵览,标注协议差异)
§10.4 人工校验表
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §2 医学背景(下游 ICD-11/SNOMED 映射、任务界定、金标准) | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §3 数据集规格(模态、格式、设备、溯源) | 千方病案医学编辑部 | 与 UCI 官方页及 readme 交叉比对 | ✅ 已验证 |
| §4 数据结构(54 列字典、activityID、缺失编码) | 千方病案医学编辑部 | 与 readme.pdf 逐列比对 | ✅ 已验证 |
| §5 数据划分策略 | 千方病案医学编辑部 | 与 LOSO/分组文献交叉比对 | ✅ 已通过 |
| §6 代码示例与坑点 | 千方病案医学编辑部 | 逻辑审查 + 与 readme 与公开预处理比对 | ✅ 已通过 |
| §7 质量评估与 DAIMS 评分 | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §8 排行榜与引用数表述 | 千方病案医学编辑部 | 与原文及多源快照交叉比对 | ✅ 已验证 |
| §C JSON-LD @graph | 千方病案医学编辑部 | Schema 字段逐项校验 | ✅ 已通过 |
§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
页面状态:published(全部内容已完成审核并发布)
