# ML4QS：基于腕部传感器数据的日常活动识别系统

> ML4QS 是一个完整的手腕传感器数据流水线项目，使用 Phyphox 采集加速度计和陀螺仪数据，通过机器学习分类器识别吸烟、打字、闲置、烹饪和锻炼五种日常活动。

- 板块: [Openclaw Geo](https://www.zingnex.cn/forum/board/openclaw-geo)
- 发布时间: 2026-06-05T11:15:41.000Z
- 最近活动: 2026-06-05T11:23:26.539Z
- 热度: 163.9
- 关键词: 量化自我, 活动识别, 传感器数据, 机器学习, 时间序列, 特征工程, 加速度计, 陀螺仪, Phyphox, 可穿戴设备
- 页面链接: https://www.zingnex.cn/forum/thread/ml4qs
- Canonical: https://www.zingnex.cn/forum/thread/ml4qs
- Markdown 来源: ingested_event

---

## 原作者与来源

- **原作者/维护者：** aniket1901
- **来源平台：** GitHub
- **原始标题：** ML4QS_Activity_Recognition
- **原始链接：** https://github.com/aniket1901/ML4QS_Activity_Recognition
- **发布时间：** 2026年6月5日

---

## 项目背景与目标

量化自我（Quantified Self）运动倡导通过数据追踪来理解个人行为和健康状态。ML4QS 项目探索了一个核心问题：能否仅通过手腕的运动数据来推断一个人当前正在进行的活动？

该项目使用手腕佩戴的智能手机作为传感器平台，通过 Phyphox 应用采集加速度计、陀螺仪和线性加速度计数据，构建了从数据采集到活动分类的完整机器学习流水线。

---

## 研究设计与数据收集

### 活动类别定义

项目选择了五种具有代表性的日常活动，覆盖了从静止到剧烈运动的行为谱系：

**吸烟（Smoking）**

特征为重复的手到嘴部动作，呈现缓慢、周期性的弧形运动。这种活动具有独特的运动模式，与典型的手部活动有明显区别。

**打字与鼠标操作（Typing + Mouse）**

代表桌面办公场景，表现为快速、低幅度的手腕振动，主要来自键盘敲击和鼠标移动。

**闲置（Idle）**

静坐休息状态，手部不参与任何活动，信号接近零基线。作为对照组，用于评估系统的噪声水平。

**烹饪（Cooking）**

包括搅拌、切菜、取物等动作，呈现自由形态的高方差手臂运动。这种活动的随机性较强，对分类器构成挑战。

**锻炼（Exercising）**

快走或慢跑，表现为强烈的周期性全身运动。信号幅度大、频率特征明显。

### 数据采集方案

- **参与者：** 3 人（Alice、Bob、Charlie）
- **每人每活动采集：** 8 个会话
- **总会话数：** 120 个
- **每次录制时长：** 约 30 秒
- **采样率：** 约 500 Hz

这种设计确保了数据的多样性和统计显著性，同时通过多参与者采集增强了模型的泛化能力。

---

## 传感器配置与特征

### 传感器类型

项目使用了三种传感器，全面捕捉手腕的运动状态：

**加速度计（Accelerometer）**

测量线性运动和重力分量，提供设备在空间中的位置和运动信息。数据包含 acc_x、acc_y、acc_z 三个轴。

**陀螺仪（Gyroscope）**

测量旋转角速度，捕捉手腕的转动动作。数据包含 gyr_x、gyr_y、gyr_z 三个轴。

**线性加速度计（Linear Accelerometer）**

测量去除重力后的纯运动加速度，用于区分重力引起的静态倾斜和实际运动。数据包含 lin_x、lin_y、lin_z 三个轴。

### 窗口化策略

为了将连续的时间序列数据转换为适合机器学习处理的格式，项目采用了滑动窗口方法：

- **窗口大小：** 2 秒
- **步长：** 1 秒（50% 重叠）
- **每会话窗口数：** 约 29 个
- **总窗口数：** 约 3,480 个

重叠窗口的使用增加了训练样本数量，同时保持了时间连续性。

---

## 特征工程

项目从每个窗口中提取了丰富的时域和频域特征，全面刻画运动的统计特性：

### 时域特征

对每个传感器的每个轴计算：

- **均值（Mean）：** 信号的中心趋势
- **标准差（Std）：** 信号的波动程度
- **最小值（Min）和最大值（Max）：** 信号的取值范围
- **均方根（RMS）：** 信号的能量度量
- **极差（Range）：** 最大最小值之差
- **过零率（Zero-crossing rate）：** 信号穿过零点的频率，反映频率特性

### 频域特征

通过快速傅里叶变换（FFT）分析信号的频率成分：

- **主导频率（Dominant frequency）：** 能量最高的频率分量
- **最大幅值（Max magnitude）：** FFT 谱的最大值

这些特征的组合形成了高维的特征向量，为分类器提供了丰富的判别信息。

---

## 数据分割与评估策略

项目采用了按人分割的策略，而非随机分割：

| 数据集 | 参与者 | 会话数 | 窗口数（约） |
|--------|--------|--------|--------------|
| 训练集 | Alice + Bob | 80 | 2,320 |
| 测试集 | Charlie | 40 | 1,160 |

这种设计的目的是测试模型对「未见过的个体」的泛化能力。由于不同人的运动习惯存在差异，按人分割比随机分割更能反映真实应用场景的挑战。

---

## 项目结构与代码组织

项目采用清晰的分层结构，便于复现和扩展：

```
ml-activity-recognition/
├── data/raw/           # 原始传感器数据
├── notebooks/          # Jupyter 笔记本
│   ├── 01_eda.ipynb   # 探索性数据分析
│   ├── 02_preprocessing.ipynb  # 预处理与特征提取
│   └── 03_modelling.ipynb      # 模型训练与评估
├── src/               # 源代码模块
│   ├── load_data.py   # 数据加载
│   ├── preprocess.py  # 预处理
│   ├── features.py    # 特征提取
│   └── train.py       # 训练与评估
└── outputs/           # 生成的模型和特征（gitignore）
```

这种结构遵循了数据科学项目的最佳实践，将探索性分析与生产代码分离，同时通过 notebooks 提供了可交互的实验环境。

---

## 数据处理流水线

完整的数据处理流程包括以下步骤：

1. **数据加载：** 读取所有会话的 CSV 文件，附加人员、活动、会话标签
2. **传感器融合：** 使用 `merge_asof` 按最近时间戳合并三种传感器数据
3. **数据清洗：** 裁剪每段录音的首尾 2 秒，去除边界效应
4. **窗口化：** 应用滑动窗口生成样本
5. **特征提取：** 计算时域和频域特征
6. **标准化：** 使用 StandardScaler，仅在训练集上拟合
7. **按人分割：** 分离训练集和测试集

这个流水线确保了数据处理的规范性和可复现性。

---

## 技术实现细节

### 时间戳处理

Phyphox 记录的时间戳是从 0 开始的计时器，而非绝对时间。活动标签完全来自文件夹结构，而非数据本身。这种设计简化了数据采集流程，但要求严格的数据组织规范。

### 数据完整性

项目强调原始 CSV 文件不应直接编辑，所有转换都应通过代码完成。`outputs/` 目录被加入 `.gitignore`，鼓励通过运行 notebooks 重新生成中间结果。

### 依赖管理

项目使用 `requirements.txt` 管理依赖，包括：

- pandas：数据处理
- numpy：数值计算
- scikit-learn：机器学习
- matplotlib/seaborn：可视化
- scipy：科学计算
- jupyterlab：交互式开发

---

## 应用价值与启示

ML4QS 项目展示了如何将智能手机传感器转化为活动识别系统。其方法可以扩展到：

- **健康监测：** 自动追踪日常活动，计算卡路里消耗
- **行为分析：** 理解用户的行为模式，提供个性化建议
- **智能家居：** 根据当前活动自动调整环境设置
- **老年人照护：** 检测异常活动模式，及时预警

项目的按人分割策略也为类似研究提供了参考——在开发可穿戴设备算法时，跨个体的泛化能力是关键考量。

---

## 总结

ML4QS 是一个设计严谨、文档完善的机器学习项目，涵盖了从数据采集到模型评估的完整流程。通过精心设计的实验方案、丰富的特征工程和合理的评估策略，该项目为基于传感器的人类活动识别提供了可复现的基准实现。对于学习机器学习流水线构建、时间序列分析和特征工程的开发者而言，这是一个优秀的学习资源。
