【已更新完畢】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(高風險)

生成結果
輸出每位志愿者的久坐時間及預警信息。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76736.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76736.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76736.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ubuntu24.04裝機安裝指南

文章目錄 Ubuntu24.04裝機安裝指南一、分區說明二、基礎軟件三、使用fcitx5配置中文輸入法四、安裝搜狗輸入法【**不推薦**】1. 安裝fcitx2. 安裝輸入法 五、禁用/home目錄下自動生成文件夾六、更新軟件源1. 針對**新配置方式**的清華源替換方法2. 針對**老配置方式**的清華源替…

互聯網三高-數據庫高并發之分庫分表ShardingJDBC

1 ShardingJDBC介紹 1.1 常見概念術語 ① 數據節點Node&#xff1a;數據分片的最小單元&#xff0c;由數據源名稱和數據表組成 如&#xff1a;ds0.product_order_0 ② 真實表&#xff1a;再分片的數據庫中真實存在的物理表 如&#xff1a;product_order_0 ③ 邏輯表&#xff1a…

BM25、BGE以及text2vec-base-chinese的區別

BM25、BGE以及text2vec-base-chinese的區別 BM25 原理:BM25(Best Matching 25)是一種基于概率檢索模型的算法,它通過考慮查詢詞與文檔之間的匹配程度、文檔的長度等因素,來計算文檔對于查詢的相關性得分。具體來說,它會給包含查詢詞次數較多、文檔長度適中的文檔更高的分…

Python中try用法、內置異常類型與自定義異常類型拓展

目錄 try介紹與語法格式try具體使用案例except的異常類型簡介案例內置的常見異常類型自定義異常類型繼承關系用途 注意事項 try介紹與語法格式 在 Python 里&#xff0c;try 語句主要用于異常處理&#xff0c;其作用是捕獲并處理代碼運行期間可能出現的異常&#xff0c;避免程…

【第41節】windows的中斷與異常及異常處理方式

目錄 一、中斷與異常處理 1.1 中斷與異常 1.2 IDT 1.3 異常的概念 1.4 異常分類 二、windows異常處理方式 2.1 概述 2.2 結構化異常處理 2.3 向量化異常處理之VEH 2.4 向量化異常處理之VCH 2.5 默認的異常處理函數 2.6 如何手動安裝 SEH 節點 2.7 異常處理的優先級…

分布式日志治理:Log4j2自定義Appender寫日志到RocketMQ

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…

【HTML】html文件

HTML文件全解析&#xff1a;搭建網頁的基石 在互聯網的廣袤世界里&#xff0c;每一個絢麗多彩、功能各異的網頁背后&#xff0c;都離不開HTML文件的默默支撐。HTML&#xff0c;即超文本標記語言&#xff08;HyperText Markup Language&#xff09;&#xff0c;作為網頁創建的基…

oracle命令上下左右鍵無法使用如何解決?

1、問題如圖 2、解決辦法 (1) 安裝readline yum -y install readline* &#xff08;2&#xff09;安裝 rlwrap ##下載 wget http://files.cnblogs.com/files/killkill/rlwrap-0.30.tar.gz.zip ##解壓 tar -xzvf rlwrap-0.30.tar.gz.zip ##編譯安裝 ./configure make &&…

vue事假機制都有哪些

Vue 的事件機制主要包含以下幾種類型和方式&#xff0c;可以分為組件內部事件、父子組件通信事件、原生 DOM 事件封裝、修飾符增強等&#xff0c;下面詳細分類介紹&#xff1a; 一、DOM 事件綁定&#xff08;最基礎的事件&#xff09; 使用 v-on&#xff08;或簡寫 &#xff0…

系統編程2(消息隊列)

? 消息隊列概念 Linux系統中消息隊列&#xff08;Message Queue&#xff09;是進程間通信的一種方式&#xff0c;這種通信機制的好處是可以傳輸指定類型(用戶可以自行定義)的數據&#xff0c;相同類型的數據根據到達順序在隊列中進行排隊。 當然&#xff0c;不同類型的數據不…

Pytorch深度學習框架60天進階學習計劃 - 第41天:生成對抗網絡進階(二)

Pytorch深度學習框架60天進階學習計劃 - 第41天&#xff1a;生成對抗網絡進階&#xff08;二&#xff09; 7. 實現條件WGAN-GP # 訓練條件WGAN-GP def train_conditional_wgan_gp():# 用于記錄損失d_losses []g_losses []# 用于記錄生成樣本的多樣性&#xff08;通過類別分…

python 微博爬蟲 01

起因&#xff0c; 目的: ?下載單個視頻&#xff0c;完成。? 獲取某用戶的視頻列表&#xff0c;完成。剩下的就是&#xff0c; 根據視頻列表&#xff0c;逐個下載視頻&#xff0c;我沒做&#xff0c;沒意思。獲取視頻的評論&#xff0c;以后再說。 關鍵點記錄: 1. 對一個視…

Servlet、HTTP與Spring Boot Web全面解析與整合指南

目錄 第一部分&#xff1a;HTTP協議與Servlet基礎 1. HTTP協議核心知識 2. Servlet核心機制 第二部分&#xff1a;Spring Boot Web深度整合 1. Spring Boot Web架構 2. 創建Spring Boot Web應用 3. 控制器開發實踐 4. 請求與響應處理 第三部分&#xff1a;高級特性與最…

vue中根據html動態渲染內容2.0

上次使用的是p標簽用的contenteditable代替的可編輯的input&#xff0c;最后實現還是選擇了用el-input的textarea方式。 一開始考慮的是需要根據用戶輸入自動撐開輸入框&#xff0c;所以選擇了p標簽可編輯。 最后發現還是el-input會更好一點&#xff0c;只不過需要處理輸入框撐…

CentOS 系統磁盤擴容并掛載到根目錄(/)的詳細步驟

在使用 CentOS 系統時&#xff0c;經常會遇到需要擴展磁盤空間的情況。例如&#xff0c;當虛擬機的磁盤空間不足時&#xff0c;可以通過增加磁盤容量并將其掛載到根目錄&#xff08;/&#xff09;來解決。以下是一個完整的操作流程&#xff0c;詳細介紹了如何將新增的 10G 磁盤…

LINUX基礎 [二] - Linux常見指令

目錄 &#x1f4bb;前言 &#x1f4bb;指令 &#x1f3ae;ls指令 &#x1f3ae;pwd指令 &#x1f3ae;whoami指令 &#x1f3ae;cd指令 &#x1f3ae;clear指令 &#x1f3ae;touch指令 &#x1f3ae;mkdir指令 &#x1f3ae;rmdir指令 &#x1f3ae;rm指令 &#…

基于php的成績分析和預警與預測網站(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 人類現已邁入二十一世紀&#xff0c;科學技術日新月異&#xff0c;經濟、資訊等各方面都有了非常大的進步&#xff0c;尤其是資訊與網絡技術的飛速發展&#xff0c;對政治、經濟、軍事、文化、教育等各方面都有了極大的影響。 利用電腦網絡的這些便利&#xff0c;發展一套…

《從底層邏輯剖析:分布式軟總線與傳統計算機硬件總線的深度對話》

在科技飛速發展的當下&#xff0c;我們正見證著計算機技術領域的深刻變革。計算機總線作為信息傳輸的關鍵樞紐&#xff0c;其發展歷程承載著技術演進的脈絡。從傳統計算機硬件總線到如今備受矚目的分布式軟總線&#xff0c;每一次的變革都為計算機系統性能與應用拓展帶來了質的…

Spring Boot 3.5新特性解析:自動配置再升級,微服務開發更高效

&#x1f4dd; 摘要 Spring Boot 3.5作為Spring生態的最新版本&#xff0c;帶來了多項令人振奮的改進。本文將深入解析其中最核心的自動配置增強特性&#xff0c;以及它們如何顯著提升微服務開發效率。通過詳細的代碼示例和通俗易懂的講解&#xff0c;您將全面了解這些新特性在…

【前端】webpack一本通

今日更新完畢&#xff0c;不定期補充&#xff0c;建議關注收藏點贊。 目錄 簡介Loader和Plugin的不同&#xff1f;&#xff08;必會&#xff09; 使用webpack默認只能處理js文件 ->引入加載器對JS語法降級&#xff0c;兼容低版本語法合并文件再次打包進階 工作原理Webpack 的…