2022年第十一届数学建模国际赛小美赛C题人类活动分类解题全过程文档及程序

2022年第十一届数学建模国际赛小美赛

C题 人类活动分类

原题再现:

  人类行为理解的一个重要方面是对日常活动的识别和监控。可穿戴式活动识别系统可以改善许多关键领域的生活质量,如动态监测、家庭康复和跌倒检测。基于惯性传感器的活动识别系统用于通过个人报警系统对老年人进行远程监测和观察[1]、跌倒的检测和分类[2]、医疗诊断和治疗[3]、在家或学校远程监测儿童、康复和物理治疗、生物力学研究、人机工程学、体育科学、芭蕾舞和舞蹈、动画、,电影制作、电视、现场娱乐、虚拟现实和电脑游戏[4]。我们尝试利用微型惯性传感器和磁强计定位在人体不同部位对人体活动进行分类,得到以下数据。
  19项活动中的每项活动由8名受试者(4名女性,4名男性,年龄在20至30岁之间)进行5分钟。每个受试者的每个活动的总信号持续时间为5分钟。受试者被要求以自己的方式进行活动,不受活动应如何进行的限制。由于这个原因,在某些活动的速度和幅度上存在着主体间的差异。
  传感器单元经过校准,以在25 Hz采样频率下获取数据。将5分钟信号分为5秒段,以便为每个活动获得480(=60×8)个信号段。

  这19项活动是:
  1、坐(A1);
  2、站立(A2);
  3、仰卧(A3);
  4、右侧卧(A4);
  5、上行楼梯(A5);
  6、下楼梯(A6);
  7、站在电梯内静止(A7);
  8、在电梯内走动(A8);
  9、在停车场行走(A9);
  10、在跑步机上以4 km/h的速度平卧、15度倾斜行走(A10);
  11、以4 km/h的速度在跑步机上以15度倾斜位置行走(A11);
  12、在跑步机上以8 km/h的速度运行(A12);
  13、在步进机上运动(A13);
  14、交叉训练器训练(A14);
  15、在水平位置的健身车上骑车(A15);
  16、在垂直位置的健身车上骑车(A16);
  17、划船(A17);
  18、跳跃(A18);
  19、打篮球(A19)。

  您的团队被要求开发一个合理的数学模型来解决以下问题。

  1、请设计一套特征和高效算法,以便从这些穿戴式传感器的数据中对19种人体行为进行分类。
  2、由于数据成本高,需要在有限的数据集上使模型具有良好的泛化能力。我们需要对这一问题进行具体的研究和评价。请设计一种可行的方法来评估模型的泛化能力。
  3、请研究并克服过拟合问题,以便您的分类算法能够广泛应用于人的行为分类问题

  可通过以下链接下载完整数据:

  附件:文件结构
  •19项活动(a)
  •8名受试者(p)
  •60段
  •躯干(T)、右臂(RA)、左臂(LA)、右腿(RL)、左腿(LL)各5个单元
  •每个装置上有9个传感器(x、y、z加速计、x、y、z陀螺仪、x、y、z磁强计)
  文件夹a01,a02。。。,a19包含19项活动记录的数据。
  对于每个活动,子文件夹p1、p2、…、。。。,p8包含8名受试者的数据。
  在每个子文件夹中,有60个文本文件s01、s02、。。。,s60,每段一个。
  在每个文本文件中,有5个单元×9个传感器=45列,5秒×25赫兹=125行。
  每列包含在5秒内从其中一个单元的一个传感器获取的125个数据样本。
  每行包含在特定采样瞬间从所有45个传感器轴获取的数据,数据之间用逗号分隔。
  第1-45列对应于:

  •T\u xacc、T\u yacc、T\u zacc、T\u xgyro。。。,T\u ymag,T\u zmag,

  •RA\u xacc、RA\u yacc、RA\u zacc、RA\u xgyro等。。。,RA\u ymag,RA\u zmag,

  •LA\u xacc、LA\u yacc、LA\u zacc、LA\u xgyro等。。。,LA\u ymag,LA\u zmag,

  •RL\U xacc、RL\U yacc、RL\U zacc、RL\U xgyro等。。。,RL\U ymag、RL\U zmag、,

  •LL\U xacc、LL\U yacc、LL\U zacc、LL\U xgyro等。。。,LL\u ymag,LL\u zmag。

  因此,
  •1-9列对应于1号机组(T)中的传感器,
  •第10-18列对应于2号机组(RA)中的传感器,
  •第19-27列对应于3号机组(LA)中的传感器,
  •第28-36列对应于4号机组(RL)中的传感器,
  •第37-45列对应于5号机组(LL)中的传感器。

整体求解过程概述(摘要)

  人类活动分类在医疗保健、运动分析等领域发挥着重要作用,广泛应用于人们的日常生活中。本文采用Savitzky-Golay滤波器对九轴传感器数据进行去噪。在互补滤波姿态融合算法提取特征的基础上,设计了一种基于随机森林算法的两阶段粗-精多分类模型,用于人类活动的分类。
  针对问题1,由于原始数据具有分散性和噪声性,首先将数据重组为三层,然后利用SG滤波器对数据进行去噪。然后对加速度计数据进行快速傅立叶变换,采用互补滤波方法对加速度计、磁强计和陀螺仪的数据进行积分,计算出相应的姿态角。加速度计数据对应人体平移,陀螺仪数据对应人体旋转,提取60个特征。考虑到人类活动的时间区域,进一步提取了60个特征的均值、标准差、偏度和峰度。对应不同的位置传感器,最终得到240维特征。最后,构建随机森林模型,对19种人类活动进行分类。
  针对问题2,为了评价模型的泛化能力,将每个被试作为一个集合,通过划分不同比例的训练集和测试集训练19个分类随机森林模型,并利用混淆矩阵评价模型的准确性。结果表明,随着训练集所占比例的增加,总体准确率从44%提高到95%,但训练集的准确率远高于测试集的准确率,表明该模型泛化能力较差,存在过拟合问题,需要进一步优化。
  针对问题3,为了解决过拟合问题,构建了基于随机森林算法的由粗到精的两阶段多分类模型。由于19个活动中的相邻活动具有明显的相关性特征,第一层将19个活动划分为8个类别,训练出8个类别的随机森林。第二层进一步为每个类别划分相应的活动。对8个亚类的随机森林进行训练,结果分为19类活动。结果表明,优化后的模型在各评价指标上均优于预优化模型,且训练集与测试集的精度差距较小,模型泛化能力较好,有效缓解了过拟合问题。

模型假设:

  考虑到实际问题往往包含许多复杂的因素,首先需要做出合理的假设来简化模型,每个假设都紧跟着相应的解释:

  假设1:使用五个位置传感器采集的数据,不考虑传感器之间的影响。
  说明:针对不同的行为,考虑到人体不同部位的运动不一样,从5个位置传感器获取数据并提取特征,便于后续训练分类模型,不考虑传感器之间的影响。

  假设2:考虑所有受试者佩戴同一传感器方向,不考虑不同传感器方向引起的数据差异。
  说明:由于传感器的磨损方向不同,同一行为测量将获得不同的数据。我们认为所有的主体都朝着同一个方向。定义了坐标参考系和相应的传感器坐标系,简化了后续的数据融合计算过程。

  假设3:数据误差只考虑陀螺的低频误差和加速度计、磁强计的高频误差,忽略了其他因素对误差的影响。
  说明:为了简化数据融合的计算过程,我们只考虑由三个传感器特性引起的数据误差。事实上,这种误差是最主要的,其他因素引起的误差可以忽略不计。

  假设4:假设通过提取采样点时间数据的时域特征可以反映人类活动。
  说明:考虑到检测到的人类活动数据处于一段时间内,且每个时间采样点的数据都有噪声影响,为了反映此类活动的整体数据分布特征,考虑可以提取时域特征来反映。

问题重述:

  问题重述
  通过传感器了解人类行为是一个非常复杂的过程。通过对问题背景的深入分析和研究,结合给出的具体约束条件,可以将问题的重述表述如下:

  •根据每个单元上九个传感器收集的不同数据,设定一套标准来评估人体行为。在此基础上,设计了一种算法,根据测量数据对19种不同的人类行为进行分类。
  •对于问题1中设计的算法,需要选择新的数据来测试其适应性,测试算法是否能找到隐藏在数据背后的规律,测试训练后的网络是否也能以相同的规律对学习集之外的数据给出适当的输出,以及是否具有较强的泛化能力。
  •当模型本身过于复杂时,会同时拟合训练样本集中的噪声,使得算法在训练集上表现良好,而在测试集上表现不佳,泛化性能较差。我们需要采用适当的方法来克服这一问题,使该算法能够得到广泛的应用。

  我们的工作

  该问题要求我们设计一套能够对传感器数据中的19种人类活动进行分类的特征集和高效算法,进而评估模型的泛化能力和克服过拟合问题。我们的工作主要包括:
  1、针对原始数据的分散性和噪声性,将整理后的数据分为三层,采用Savitzky-Golay滤波器对数据进行去噪处理。
  2、对加速度计数据进行FFT变换,采用互补滤波的方法对三个传感器的数据进行融合,计算出相应的姿态角,结合加速度和角速度,提取60个特征,进一步提取60个特征的时域特征。
  3、构建了随机森林分类模型,采用不同比例的训练集和测试集对模型进行训练。模型的识别结果用混淆矩阵表示,发现模型的泛化能力较差。
  4、为了解决模型的过拟合问题,进一步构建了两阶段随机森林分类模型,先粗分类后细分类,发现模型的分类精度得到了显著提高。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

部分程序代码:(代码和文档not free)

cv_params = {’n_estimators’: [5,10,15,20,25,30,35]}
other_params = {’learning_rate’: 0.1, ’n_estimators’: 500, ’max_depth’:
5, ’min_child_weight’: 1, ’seed’: 0,
’subsample’: 0.8, ’colsample_bytree’: 0.8, ’gamma’: 0, ’reg_alpha’:
0, ’reg_lambda’: 1}
model = xgb.XGBClassifier(**other_params)
optimized_GBM = GridSearchCV(estimator=model, param_grid=cv_params,
scoring=’accuracy’, cv=5, verbose=0, n_jobs=-1)
optimized_GBM.fit(X_train, y_train)
evalute_result = optimized_GBM.cv_results_
print(’result:{0}.format(evalute_result))
print(’best score:.format(optimized_GBM.best_score_))
cv_params = {’max_depth’: [1,2,3, 4, 5, 6, 7, 8, 9, 10],
’min_child_weight’: [1, 2, 3, 4, 5, 6]}
other_params = {’learning_rate’: 0.1, ’n_estimators’: 25, ’max_depth’:
5, ’min_child_weight’: 1, ’seed’: 0,
’subsample’: 0.8, ’colsample_bytree’: 0.8, ’gamma’: 0, ’reg_alpha’:
0, ’reg_lambda’: 1}
model = xgb.XGBClassifier(**other_params)
optimized_GBM = GridSearchCV(estimator=model, param_grid=cv_params,
scoring=’accuracy’, cv=5, verbose=0, n_jobs=-1)
optimized_GBM.fit(X_train, y_train)
evalute_result = optimized_GBM.cv_results_
print(’result:{0}.format(evalute_result))
print(’best score:{0}.format(optimized_GBM.best_score_))
cv_params = {’reg_alpha’: [0,0.05, 0.1, 1, 2, 3], ’reg_lambda’: [0,
0.05, 0.1, 1, 2, 3]}
other_params = {’learning_rate’: 0.1, ’n_estimators’: 15, ’max_depth’:
2, ’min_child_weight’: 1, ’seed’: 0,
’subsample’: 0.8, ’colsample_bytree’: 0.8, ’gamma’: 0, ’reg_alpha’:
0, ’reg_lambda’:0.05}
model = xgb.XGBClassifier(**other_params)
optimized_GBM = GridSearchCV(estimator=model, param_grid=cv_params,
scoring=’accuracy’, cv=4, verbose=0, n_jobs=-1)
optimized_GBM.fit(X_train, y_train)
evalute_result = optimized_GBM.cv_results_
print(’result:{0}.format(evalute_result))
print(’best score:{0}.format(optimized_GBM.best_score_))
cv_params = {’learning_rate’: [0.01, 0.05, 0.07, 0.1, 0.2,0.3,0.4,0.5]}
other_params = {’learning_rate’: 0.1, ’n_estimators’: 25, ’max_depth’:
3, ’min_child_weight’: 2, ’seed’: 0,
’subsample’: 0.8, ’colsample_bytree’: 0.8, ’gamma’: 0, ’reg_alpha’:
0, ’reg_lambda’:0.05}
model = xgb.XGBClassifier(**other_params)
optimized_GBM = GridSearchCV(estimator=model, param_grid=cv_params,
scoring=’accuracy’, cv=4, verbose=0, n_jobs=-1)
optimized_GBM.fit(X_train, y_train)
evalute_result = optimized_GBM.cv_results_
print(’result:{0}.format(evalute_result))
print(’best score:{0}.format(optimized_GBM.best_score_))
from sklearn.model_selection import train_test_split
train_set, test_set = train_test_split(dataSet, test_size=0.25,
random_state=42)
X_train = [x[0:720] for x in train_set]
y_train = [x[720] for x in train_set]
X_test = [x[0:720] for x in test_set]
y_test = [x[720] for x in test_set]
Xgb_train = xgb.DMatrix(X_train,y_train)
Xgb_test = xgb.DMatrix(X_test,y_test)
#%%
params =
{’objective’:’multi:softmax’,’num_class’:19,’booster’:’gbtree’,’max_depth’:5,
’eta’:0.1, ’subsample’:0.7, ’colsample_bytree’:0.7}
num_round = 200
watchlist = [(Xgb_train,’train’), (Xgb_test,’test’)]
model=xgb.train(params,Xgb_train,num_round,watchlist)
y_pred = model.predict(Xgb_test)
import matplotlib.pyplot as plt
plt.ylim(0,3)
plt.plot(train_mlogloss_, label=’train_mlogloss’)
plt.plot(test_mlogloss_, label=’test_mlogloss’)
plt.xlabel( ’epoch’)
plt.ylabel( ’mlogloss’)
plt.title(’Loss chart’)
plt.legend()
plt.savefig(’E:\Machine Learning\ICM\pic\\loss_.jpg’,dpi=600)
plt.show()
rom sklearn.model_selection import train_test_split
train_set, test_set = train_test_split(dataSet_, test_size=0.25,
random_state=41)
X_train = [x[0:18] for x in train_set]
y_train = [x[18] for x in train_set]
X_test = [x[0:18] for x in test_set]
y_test = [x[18] for x in test_set]
Xgb_train = xgb.DMatrix(X_train,y_train)
Xgb_test = xgb.DMatrix(X_test,y_test)
params = {’objective’:’multi:softmax’,’num_class’:19,’booster’:’gbtree’}
num_round = 200
watchlist = [(Xgb_train,’train’), (Xgb_test,’test’)]
model=xgb.train(params,Xgb_train,num_round,watchlist)
y_pred = model.predict(Xgb_test)
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/224229.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习记录---Kubernetes的资源指标管道-metrics api的安装部署

一、简介 Metrics API,为我们的k8s集群提供了一组基本的指标(资源的cpu和内存),我们可以通过metrics api来对我们的pod开展HPA和VPA操作(主要通过在pod中对cpu和内存的限制实现动态扩展),也可以通过kubectl top的方式,获取k8s中n…

近期复习三

目录 nginx.conf文件介绍 一.文件共享功能 1.清空html目录下文件并新建你要共享的文件 2.修改nginx.conf文件,开启autoindex功能 3.测试 二.状态模块 1.修改nginx.conf文件 2.测试 (1)使用刚才定义的IP/nginx_status进行访问 &#…

计算机图形图像技术(图像锐化处理与图像解析)

一、实验原理: 1、拓展Sobel算子锐化 void Sobel(Array src, Array dst, int ddepth, int dx, int dy, int ksize); ①参数:src为输入图像;dst为输出图像,大小和通道数与源图像一致,必要时重建;ddepth为目…

我把springboot项目从Java 8 升级 到了Java 17 的过程总结,愿为君提前踩坑!

项目从jdk8升级到jdk17,我不是为了追求java 17的新特性(准确来说也还没有去了解有什么新特性),也不是为了准确与时俱进,永远走在java行列的最前端,纯粹因为项目需要,因为我们都知道,…

【华为数据之道学习笔记】3-1 基于数据特性的分类管理框架

华为根据数据特性及治理方法的不同对数据进行了分类定义:内部数据和外部数据、结构化数据和非结构化数据、元数据。其中,结构化数据又进一步划分为基础数据、主数据、事务数据、报告数据、观测数据和规则数据。 对上述数据分类的定义及特征描述。 分类维…

HarmonyOS学习--TypeScript语言学习(四)

注意:这只是我学习的笔记!!! 注意:这只是我学习的笔记!!! 注意:这只是我学习的笔记!!! 本章目录如下: 一、对象 二、接口…

配置CentOS服务器以支持PHP

CentOS是一款优秀的开源服务器操作系统,为各种网络服务提供了强大的支持。为了使CentOS服务器能够支持PHP,我们需要进行一些必要的配置。下面将介绍配置CentOS服务器以支持PHP的关键步骤。 安装PHP 首先,需要安装PHP解释器。在CentOS上&…

[UIM]论文解读:subword Regularization: Multiple Subword Candidates

文章目录 一、完整代码二、论文解读2.1 介绍2.2 NMT2.3 Unigram language model2.4 subword 抽样2.5 效果 三、整体总结 论文:Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates 作者:Taku Kudo 时…

【分布式微服务专题】从单体到分布式(一、SpringCloud项目初步升级)

目录 前言阅读对象阅读导航前置知识笔记正文一、单体服务介绍二、服务拆分三、分布式微服务升级前的思考3.1 关于SpringBoot/SpringCloud的思考【有点门槛】 四、SpringCloud升级整合4.1 新建父子项目 学习总结感谢 前言 从本节课开始,我将自己手写一个基于SpringC…

智能优化算法应用:基于非洲秃鹫算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于非洲秃鹫算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于非洲秃鹫算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.非洲秃鹫算法4.实验参数设定5.算法结果6.参考…

docker安装及配置mysql

docker 安装mysql 下载镜像文件 下载mysql5.7版本 sudo docker pull mysql:5.7检查是否下载成功 sudo docker images2.创建实例并启动 切换到root下避免每次使用sudo 密码:vagrant docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/my…

PACS源码,医学影像传输系统源码,全院级应用,支持放射、超声、内窥镜、病理等影像科室,且具备多种图像处理及三维重建功能

​三维智能PACS系统源码,医学影像采集传输系统源码 PACS系统以大型关系型数据库作为数据和图像的存储管理工具,以医疗影像的采集、传输、存储和诊断为核心,集影像采集传输与存储管理、影像诊断查询与报告管理、综合信息管理等综合应用于一体的…

AI助力智慧农业,基于YOLOv4开发构建不同参数量级农田场景下庄稼作物、杂草智能检测识别系统

智慧农业随着数字化信息化浪潮的演变有了新的定义,在前面的系列博文中,我们从一些现实世界里面的所见所想所感进行了很多对应的实践,感兴趣的话可以自行移步阅读即可: 《自建数据集,基于YOLOv7开发构建农田场景下杂草…

【开源】基于JAVA的APK检测管理系统

项目编号: S 038 ,文末获取源码。 \color{red}{项目编号:S038,文末获取源码。} 项目编号:S038,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 开放平台模块2.3 软…

翻译: 大语言模型LLMs能做什么和不能做什么 保存笔记What LLMs can and cannot do

生成式 AI 是一项惊人的技术,但它并非万能。在这个视频中,我们将仔细看看大型语言模型(LLM)能做什么,不能做什么。我们将从我发现的一个有用的心理模型开始,了解它能做什么,然后一起看看 LLM 的…

ThreadX开源助力Microsoft扩大应用范围:对比亚马逊AWS的策略差异

全球超过120亿台设备正在运行ThreadX,这是一款专为资源受限环境设计的实时操作系统。该操作系统在微控制器和小型处理器上表现出色,以极高的可靠性和精确的时间控制处理任务而闻名。 ThreadX曾是英特尔芯片管理引擎的引擎,并且是控制Raspber…

unity 2d 入门 飞翔小鸟 飞翔脚本(五)

新建c#脚本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Fly : MonoBehaviour {//获取小鸟(刚体)private Rigidbody2D bird;//速度public float speed;// Start is called before the first frame up…

挑选数据可视化工具:图表类型、交互功能与数据安全

作为一名数据分析师,我经常需要使用各种数据可视化工具来将数据以直观、清晰的方式呈现出来,以便更好地理解和分析。在市面上的众多可视化工具中,我根据实际需求和项目特点进行选择。本文将从以下几个角度对市面上的数据可视化工具进行对比&a…

Ros智行mini,opencv,Gmapping建图,自主导航auto_slam,人脸识别,语音控制

功能 一、Gmapping建图 二、自主导航 起始点 、终点 三、人脸识别 四、语音控制 完成任务: 机器人先建图 建完图后给出目标点,机器人就可以完成调用自主导航走到目标点,期间会调用激光雷达扫描局部环境来进行自主避障,到达终点后进行语音…

指针(进阶)

指针进阶: 通过指针基础我们已经了解了指针,这篇文章我们会举大量的例子,使我们对指针透彻理解,我们下来看一段代码: int main() {char a[] "ab";char* pc a;printf("%c\n", *pc);printf("…