当前位置: 首页 > article >正文

【已更新完毕】2025泰迪杯数据挖掘竞赛B题数学建模思路代码文章教学:基于穿戴装备的身体活动监测

基于穿戴装备的身体活动监测

摘要

本研究基于加速度计采集的活动数据,旨在分析和统计100名志愿者在不同身体活动类别下的时长分布。通过对加速度数据的处理,活动被划分为睡眠、静态活动、低强度、中等强度和高强度五类,进而计算每个志愿者在各类活动中的总时长。研究结果揭示了不同个体在活动强度上的差异,为后续的个性化健康管理和运动干预提供了重要数据支持。此外,结合可视化分析,进一步揭示了志愿者的活动模式,帮助更好地理解个体行为差异及群体健康趋势。

本研究通过无监督学习方法,对志愿者的身体活动数据进行了聚类分析,旨在识别不同的活动模式。基于志愿者的加速度数据和MET 值,本文采用 KMeans 和高斯混合模型(GMM)两种聚类算法进行活动模式识别。通过聚类分析,成功将志愿者的活动模式划分为三类:睡眠模式三(深睡)、睡眠模式一(浅睡)和睡眠模式二(中度/REM)。这些活动模式的划分为进一步理解志愿者的行为模式和睡眠结构提供了依据。通过计算每个模式下的时长,本研究揭示了不同个体在活动强度和睡眠阶段上的差异,为后续的健康干预和个性化健康管理提供了数据支持。

本研究进一步对志愿者的久坐行为进行了识别和分析。通过滑动窗口方法,结合加速度数据和MET 值,我们成功识别出志愿者持续超过30分钟的静态行为,并计算了每位志愿者的总久坐时长。每个持续静态状态的行为段被标记为久坐行为,累计计算每位志愿者的久坐时长。通过随机森林算法、CNN+LSTM组合算法进行预测。研究结果表明,不同志愿者的久坐行为存在显著差异,某些个体表现出较高的久坐时长,提示可能需要更强的健康干预措施。通过这一分析,我们为个性化健康干预、久坐行为管理以及健康风险评估提供了有效的数据支持。

关键词:身体活动监测、随机森林、K-means聚类、GMM、滑动窗口

目录
基于穿戴装备的身体活动监测 1
摘要 1
一、 问题重述 3
1.1 问题背景 3
1.2 要解决的问题 3
二、 问题分析 5
2.1 任务一的分析 5
2.2 任务二的分析 5
2.3 任务三的分析 5
2.4 任务四的分析 5
三、 问题假设 7
四、 模型原理 8
4.1 随机森林模型 8
4.2 K-means聚类算法 9
4.3 GMM模型 11
五、 模型建立与求解 14
5.1 问题一建模与求解 14
5.2 问题二建模与求解 19
5.3 问题三建模与求解 24
5.4 问题四建模与求解 28
六、 模型评价与推广 31
6.1 模型的评价 31
6.1.1模型优点 31
6.1.2模型缺点 32
6.2 模型推广 33
附录【自行删减】 35

任务 主要技术 关键步骤

  1. 统计分析 数据处理、MET 分类 时间计算、分类统计

  2. MET 值预测 机器学习(XGBoost/LSTM) 特征提取、回归建模

  3. 睡眠分析 深度学习(CNN/LSTM) 睡眠阶段分类

  4. 久坐预警 滑动窗口分析 连续静态行为检测

  5. 统计分析志愿者的活动情况
    在这里插入图片描述
    在这里插入图片描述

目标:
根据 100 位志愿者的加速度数据,计算各项活动时长,并进行统计汇总。

数据说明:
数据存储在 P[ID].csv 文件,每行包含:
时间戳(毫秒)
X/Y/Z 方向加速度(g)
活动标签(MET 值)

Metadata1.csv 提供志愿者的性别和年龄信息。

解题思路:

数据读取:
读取 P[ID].csv 文件,解析时间戳转换为小时级别。
读取 Metadata1.csv,合并志愿者元数据。

计算各项时长:
计算 总记录时长:时间戳转换为小时后求总时长。
根据 MET 值分类:
MET ≥ 6.0 → 高强度运动
3.0 ≤ MET < 6.0 → 中等强度运动
1.6 ≤ MET < 3.0 → 低强度运动
1.0 ≤ MET < 1.6 → 静态行为
MET < 1.0 → 睡眠

统计每种 MET 分类下的时间总量。

生成表格 result_1.xlsx,列格式: | 志愿者ID | 总时长 | 睡眠时长 | 高强度运动 | 中等强度 | 低强度 | 静态活动 |
导出 Excel 文件。

在这里插入图片描述

遍历每个志愿者文件

for pid in pids:

file_path = f'{pid}.csv'  # 假设文件名为P001.csv格式# 读取数据文件df = pd.read_csv(file_path, parse_dates=['time'])# 计算时间间隔(转换为小时)df['duration'] = df['time'].diff().dt.total_seconds().fillna(0) / 3600# 提取MET值df['MET'] = df['annotation'].str.extract(r'MET (\d+\.?\d*)').astype(float)# 分类活动类型df['activity'] = df['MET'].apply(classify_activity)# 按活动类型汇总时长activity_duration = df.groupby('activity')['duration'].sum()# 构建结果行result = {'志愿者 ID': pid,'记录总时长(小时)': df['duration'].sum().round(4),'睡眠总时长(小时)': activity_duration.get('sleep', 0).round(4),'高等强度运动总时长(小时)': activity_duration.get('high', 0),'中等强度运动总时长(小时)': activity_duration.get('medium', 0),'低等强度运动总时长(小时)': activity_duration.get('low', 0),'静态活动总时长(小时)': activity_duration.get('static', 0)}results.append(result)

2.构建 MET 值估计模型
目标:
利用 100 名志愿者的数据,构建 机器学习模型,预测新的 20 名志愿者的 MET 值。

数据说明:
P[ID].csv:包含加速度计数据及 MET 值(用于训练)。
Metadata1.csv:包含志愿者的性别、年龄信息。
T[ID].csv:20 位新志愿者的加速度计数据(用于预测)。
Metadata2.csv:包含 20 位新志愿者的性别、年龄信息。

解题思路:

数据预处理
解析加速度数据(X/Y/Z)。

计算时序特征:
时域特征(均值、标准差、最大值、最小值等)
频域特征(FFT 分析)

结合年龄、性别数据,标准化特征。

特征工程
采用 滑动窗口(如 1 秒、5 秒窗口)进行特征提取:
平均加速度、方差、均方根(RMS)
瞬时速度估计
频谱能量

目标变量为 MET 值。

模型选择
回归模型(目标变量为连续值):
XGBoost / LightGBM
随机森林
LSTM / GRU(处理时序数据)
CNN+LSTM 组合模型
选择 均方误差(MSE)以及 平均绝对误差(MAE) 作为损失函数。

模型训练
划分训练集与验证集(80% 训练 / 20% 验证)。
调参优化(交叉验证)。
评估模型泛化能力。
预测新志愿者 MET 值
使用训练好的模型预测 T[ID].csv 20 位志愿者的数据。
保存预测结果 result_2.xlsx。

5.2.2 特征工程与数据处理

1.时间窗口构造
将原始加速度数据按 5 秒为单位划分为多个不重叠的时间窗口。设某志愿者的加速度数据为三维时间序列 ,时间窗口长度为 秒,则第 个窗口内包含的数据为:

在每个时间窗口中提取统计特征和频域特征,构成特征向量 。
2.特征提取基本原理
在每个窗口 内,提取以下特征:
时域特征:对每个轴向的加速度数据 ,计算其均值(mean)、标准差(std)、最大值(max)、最小值(min):

加速度幅值(Magnitude)特征:定义三轴加速度的合成加速度为:

并提取其均值与标准差:

频域特征:对加速度幅值序列 进行离散傅里叶变换(DFT):

在这里插入图片描述

在这里插入图片描述

======================

数据准备

======================

def extract_features(accel_data):

"""从三轴加速度数据中提取特征"""features = {}# 时域特征for axis in ['x', 'y', 'z']:# 基本统计量features[f'{axis}_mean'] = accel_data[axis].mean()features[f'{axis}_std'] = accel_data[axis].std()features[f'{axis}_max'] = accel_data[axis].max()features[f'{axis}_min'] = accel_data[axis].min()#features[f'{axis}_mad'] = accel_data[axis].mad()  # 平均绝对偏差# 幅值特征magnitude = np.sqrt(accel_data[['x', 'y', 'z']].pow(2).sum(axis=1))features['magnitude_mean'] = magnitude.mean()features['magnitude_std'] = magnitude.std()# 频域特征fft = np.fft.fft(magnitude)features['dominant_freq'] = np.argmax(np.abs(fft))  # 主频率return pd.Series(features)

遍历每个志愿者文件

for _, row in tqdm(metadata.iterrows(), total=len(metadata)):

pid = row['pid']file_path = f'{pid}.csv'# 读取加速度数据df = pd.read_csv(file_path)df['MET'] = df['annotation'].str.extract(r'MET (\d+\.?\d*)').astype(float)# 按时间窗口处理(5秒窗口)window_size = '5S'df['time'] = pd.to_datetime(df['time'])grouped = df.set_index('time').groupby(pd.Grouper(freq=window_size))# 窗口特征提取for _, window in grouped:if len(window) > 0:features = extract_features(window[['x', 'y', 'z']])features['age'] = row['age']features['sex'] = row['sex']all_features.append(features)all_targets.append(window['MET'].mean())
  1. 睡眠阶段智能识别
    目标:
    设计睡眠阶段分类算法,基于加速度数据识别不同的睡眠状态。
    数据说明:
    P[ID].csv(训练数据,包含 MET 值)。
    T[ID].csv(测试数据,无 MET 值,需要进行预测)。

解题思路:

数据预处理
选取 睡眠数据(MET < 1.0) 作为分析对象。
计算 睡眠时段的加速度特征:
运动量(X/Y/Z 方向变化率)
姿态变化(角度计算)
低频信号分析(检测深度睡眠)

特征提取
使用 滑动窗口法(如 30s、60s 窗口)提取特征:
加速度均值、标准差
突发运动频率
睡眠稳定性指标(基于 FFT 低频功率)

模型选择 分类模型:
传统机器学习(Random Forest, SVM)
深度学习(LSTM、CNN)

目标:划分 不同睡眠阶段(如浅睡、深睡、REM)。
模型训练与预测
训练模型,调整超参数。
预测 20 名志愿者的睡眠阶段,输出 result_3.xlsx。

聚类结果的解释与活动模式识别

为了评估不同聚类算法在本问题中的适用性与有效性,本文计算了

KMeans

与高斯混合模型(

GMM

)两种聚类方法在标准化特征空间上的轮廓系数(

Silhouette Coefficient

)。轮廓系数是一种常用的无监督聚类性能评估指标,综合衡量了簇内紧密度和簇间分离度。其取值范围为

[

1,1][-1, 1][

1,1]

,值越接近

1

表示聚类结果越合理,聚类边界越清晰;值接近

0

表示簇之间重叠较多,聚类效果模糊;若为负值,则可能存在簇划分错误的情况。

本实验结果如下:
KMeans 聚类轮廓系数:0.2296
GMM 聚类轮廓系数:0.0277

大多数志愿者的睡眠时长主要集中在

“睡眠模式三(深睡)”和“睡眠模式一(浅睡)”之间,表明深度睡眠和浅睡是大多数志愿者的主要睡眠阶段。而“睡眠模式二(中度

/REM

)”的时间占比相对较低,但在一些志愿者中,可能由于特定生理特征或生活习惯,表现出较为明显的中度睡眠模式。

在这里插入图片描述

  1. 久坐行为健康预警
    目标:
    检测志愿者 久坐行为(单次静态时间超过 30 分钟,MET < 1.6)。

解题思路:

数据解析
解析时间戳,转换为分钟级别时间轴。
计算连续静态行为(MET < 1.6)。

久坐检测
采用 滑动窗口分析:
若 连续 30 分钟以上 处于 MET < 1.6,则标记为久坐行为。
计算 久坐持续时间 及 久坐次数。

预警策略
若 单次久坐超过 1 小时 → 预警等级 1
若 每日久坐总时长 > 6 小时 → 预警等级 2
若 久坐超过 10 小时 → 预警等级 3(高风险)

生成结果
输出每位志愿者的久坐时间及预警信息。

相关文章:

【已更新完毕】2025泰迪杯数据挖掘竞赛B题数学建模思路代码文章教学:基于穿戴装备的身体活动监测

基于穿戴装备的身体活动监测 摘要 本研究基于加速度计采集的活动数据&#xff0c;旨在分析和统计100名志愿者在不同身体活动类别下的时长分布。通过对加速度数据的处理&#xff0c;活动被划分为睡眠、静态活动、低强度、中等强度和高强度五类&#xff0c;进而计算每个志愿者在…...

212、【图论】字符串接龙(Python)

题目描述 题目链接&#xff1a;110. 字符串接龙 代码实现 import collectionsn int(input()) beginStr, endStr input().split() strList [input() for _ in range(n)]deque collections.deque() # 使用队列遍历结点 deque.append([beginStr, 1]) # 存储当前字符串和遍…...

车载以太网-TLS

文章目录 车载以太网与TLS的技术背景核心定位车载以太网TLS的技术架构车载TLS的核心安全机制TLS报文结构详解TLS工作机制密钥交换与计算流程标题完整握手流程(1-RTT)数据传输加密流程车载TLS的独特优化策略车载TLS的安全威胁相关标准车载以太网TLS(Transport Layer Security…...

大模型面经 | 手撕多头注意力机制(Multi-Head Attention)

大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…...

02_位掩码逻辑及Java示例

文章目录 一、位掩码核心逻辑二、Java示例&#xff1a;权限管理‌三、关键点解析‌四、优缺点分析‌五、适用场景 位掩码&#xff08;Bitmask&#xff09;是一种利用二进制位进行状态管理的技术&#xff0c;通过位运算高效处理多个布尔标志。 一、位掩码核心逻辑 ‌基本概念‌…...

【UE5】RTS游戏的框选功能+行军线效果实现

目录 效果 步骤 一、项目准备 二、框选NPC并移动到指定地点 三、框选效果 四、行军线效果 效果 步骤 一、项目准备 1. 新建一个俯视角游戏工程 2. 新建一个pawn、玩家控制器和游戏模式,这里分别命名为“MyPawn”、“MyController”和“MyGameMode” 3. 打开“MyGam…...

GO语言-数据类型

文章目录 变量定义1. 整数类型2. 浮点类型3. 字符类型4. 布尔类型5. 字符串类型5.1 字符串的本质5.2 常用字符串处理函数(strings包)5.3 修改字符串的方式 6. 数据默认值7. 类型转换 变量定义 代码如下&#xff1a; package mainimport "fmt"var i1 1000 var i2 i…...

低资源需求的大模型训练项目---3、综合对比与选型建议

综合对比与选型建议 1. Qwen2.5-0.5B 适用性分析&#xff1a; • 优势&#xff1a; • 工业级全流程支持&#xff1a;阿里云提供了完整的预训练、微调、强化学习&#xff08;RLHF&#xff09;代码和文档&#xff0c;支持从数据处理到模型部署的全链路实践。 • 性能与场景适配…...

设计模式 四、行为设计模式(2)

五、状态模式 1、概述 状态设计模式是一种行为型设计模式&#xff0c;它允许对象在其内部状态发生时改变其行为&#xff0c;这种模式可以消除大量的条件语句&#xff0c;并将每个状态的行为封装到单独的类中。 状态模式的主要组成部分如下&#xff1a; 1&#xff09;上…...

FEA 仿真助力高速连接器设计中的信号完整性

各行各业高速信号软件和硬件的快速发展&#xff0c;带来了更高的频率和带宽。因此&#xff0c;对连接器组件的整体性能要求也更加严格。同时&#xff0c;器件和封装形式、互连以及系统内其他设备的小型化也带来了额外的设计挑战。所有这些都对信号传输完整性产生重大影响。 高速…...

yum的基本操作和vim指令

在我们的手机端或者Windows上下载软件&#xff0c;可以在相应的应用商店或者官网进行下载&#xff0c;这样对于用户来说十分的方便和便捷。而在Linux上&#xff0c;也有类似的安装方式&#xff0c;我们来一一了解一下。 Linux安装软件的3种方法 源代码安装 在Linux下安装软件…...

synchronize 或者lock 锁常见的使用场景

在 Java 多线程编程中&#xff0c;synchronized 和 Lock&#xff08;如 ReentrantLock&#xff09;是两种常见的线程同步机制。以下是它们的核心区别和典型使用场景&#xff0c;结合代码示例说明&#xff1a; 一、synchronized 的常见场景 1. 简单的临界区保护 public class …...

Qt触摸屏隐藏鼠标指针

Qt触摸屏隐藏鼠标指针 Chapter1 Qt触摸屏隐藏鼠标指针 Chapter1 Qt触摸屏隐藏鼠标指针 使用Qt开发的屏幕软件HMI不需要显示鼠标&#xff0c;qt设置&#xff0c;可以在只启动HMI的时候隐藏光标&#xff0c;退出时再显示。 1.如果只希望在某个 widget 中不显示鼠标指针&#xf…...

LangGraph——Agent AI的持久化状态

LangGraph 内置了一个持久化层&#xff0c;通过检查点(checkpointer)机制实现。当你使用检查点器编译图时&#xff0c;它会在每个超级步骤(super-step)自动保存图状态的检查点。这些检查点被存储在一个线程(thread)中&#xff0c;可在图执行后随时访问。由于线程允许在执行后访…...

【双指针】专题:LeetCode 1089题解——复写零

复写零 一、题目链接二、题目三、算法原理1、先找到最后一个要复写的数——双指针算法1.5、处理一下边界情况2、“从后向前”完成复写操作 四、编写代码五、时间复杂度和空间复杂度 一、题目链接 复写零 二、题目 三、算法原理 解法&#xff1a;双指针算法 先根据“异地”操…...

HTTP 1.1 比 HTTP1.0 多了什么?(详尽版)

相较于HTTP 1.0&#xff0c;1.1 版本增加了以上特性&#xff1a; 1. 新增了连接管理即 keepalive&#xff0c;允许持久连接。 定义&#xff1a; Keepalive允许客户端和服务器在完成一次请求-响应后&#xff0c;保持连接处于打开状态&#xff0c;以便后续请求复用同一连接&am…...

【C++初学】C++核心编程(一):内存管理和引用

前言 在C的世界里&#xff0c;面向对象编程&#xff08;OOP&#xff09;是核心中的核心。它不仅是一种编程范式&#xff0c;更是一种思考问题的方式。本文将带你从C的内存分区模型出发&#xff0c;深入探讨引用、函数、类和对象、继承、多态以及文件操作等核心概念。通过丰富的…...

深度学习(对抗)

数据预处理&#xff1a;像素标记与归一化 在 GAN 里&#xff0c;图像的确会被分解成一个个像素点来处理。在你的代码里&#xff0c;transform transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))]) 这部分对图像进行了预处理&#xff1a; tra…...

(PC+WAP)大气滚屏网站模板 电气电力设备网站源码下载

源码介绍 (PCWAP)大气滚屏网站模板 电气电力设备网站源码下载。PbootCMS内核开发的网站模板&#xff0c;该模板适用于滚屏网站模板、电气电力设备网站源码等企业&#xff0c;当然其他行业也可以做&#xff0c;只需要把文字图片换成其他行业的即可&#xff1b;PCWAP&#xff0c…...

笔试专题(九)

文章目录 十字爆破&#xff08;暴力&#xff09;题解代码 比那名居的桃子&#xff08;滑动窗口/前缀和&#xff09;题解代码 分组&#xff08;暴力枚举 优化二分&#xff09;题解代码 十字爆破&#xff08;暴力&#xff09; 题目链接 题解 1. 暴力 预处理 2. 如果单纯的暴…...

3 VS Code 配置优化与实用插件推荐:settings.json 详解、CodeGeeX 智能编程助手及插件离线安装方法

1 优化 settings.json 文件 1.1 settings.json 简介 settings.json 是 VS Code 的核心配置文件&#xff0c;用于存储用户的个性化设置和偏好。通过该文件&#xff0c;用户可以自定义和覆盖 VS Code 的默认行为&#xff0c;包括但不限于以下方面&#xff1a; 编辑器外观&#…...

TA学习之路——1.6 PC手机图形API介绍

1前言 电脑的工作原理&#xff1a;电脑是由各种不同的硬件组成&#xff0c;由驱动软件驱使硬件进行工作。所有的软件工程师都会直接或者间接的使用到驱动。 定义&#xff1a;是一个图形库&#xff0c;用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序接口&#xff08;API)。…...

【android bluetooth 框架分析 02】【Module详解 2】【gd_shim_module 模块介绍】

1. 背景 上一章节 我们介绍了 module_t 的 大体框架 &#xff0c;本节内容我们就选择 我们的 gd_shim_module 模块为例子&#xff0c;具体剖析一下&#xff0c;它里面的逻辑。 static const char GD_SHIM_MODULE[] "gd_shim_module";// system/main/shim/shim.cc …...

从一堆新闻正文中,提取出“事实型句子(fact)”,并保存到新文件中

示例代码&#xff1a; import os import re import json import nltk from tqdm import tqdm from transformers import pipeline nltk.download(punkt) from nltk.tokenize import sent_tokenize ## Check If Fact or Opinion #lighteternal/fact-or-opinion-xlmr-elfact_opi…...

Matlab 调制信号和fft变换

1、内容简介 Matlab 194-调制信号和fft变换 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...

Git 常用命令集与实际使用 Demo

Git 常用命令集与实际使用 Demo 一、初始化 & 配置 命令说明Demogit init在当前目录初始化本地 Git 仓库&#xff0c;生成 .git/ 文件夹mkdir newProject && cd newProject git initgit config --global user.name “xxx”设置全局用户名git config --global use…...

KaiwuDB:面向AIoT场景的多模融合数据库,赋能企业数字化转型

引言 在万物互联的AIoT时代&#xff0c;企业面临着海量时序数据处理、多模数据融合和实时分析等挑战。KaiwuDB应运而生&#xff0c;作为一款面向AIoT场景的分布式、多模融合、支持原生AI的数据库产品&#xff0c;为企业提供了一站式数据管理解决方案。 产品概述 KaiwuDB是一…...

STM32 vs ESP32:如何选择最适合你的单片机?

引言 在嵌入式开发中&#xff0c;STM32 和 ESP32 是两种最热门的微控制器方案。但许多开发者面对项目选型时仍会感到困惑&#xff1a;到底是选择功能强大的 STM32&#xff0c;还是集成无线的 ESP32&#xff1f; 本文将通过 硬件资源、开发场景、成本分析 等多维度对比&#xf…...

100M/1000M 以太网静电浪涌防护方案

方案简介 以太网是一种生产较早且广泛应用的局域网通讯方式&#xff0c;同时也是一种协议&#xff0c;其核 心在于实现区域内&#xff08;如办公室、学校等&#xff09;的网络互联。根据数据传输速度的不同&#xff0c;以 太网大致可以划分为几个等级&#xff1a;标准以太网…...

使用ADB工具分析Android应用崩溃原因:以闪动校园为例

使用adb工具分析模拟器或手机里app出错原因以闪动校园为例 使用ADB工具分析Android应用崩溃原因&#xff1a;以闪动校园为例 前言 应用崩溃是移动开发中常见的问题&#xff0c;尤其在复杂的Android生态系统中&#xff0c;找出崩溃原因可能十分棘手。本文将以流行的校园应用&q…...