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

news2025/1/21 1:00:44

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名片即可

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

10.Java程序设计-基于SSM框架的微信小程序家教信息管理系统的设计与实现

摘要是论文的开篇,用于简要概述研究的目的、方法、主要结果和结论。以下是一个简化的摘要示例,你可以根据实际情况进行修改和扩展: 摘要 随着社会的发展和教育需求的增长,家教服务作为一种个性化的学习方式受到了广泛关注。为了更…

Flink State 状态原理解析 | 京东物流技术团队

一、Flink State 概念 State 用于记录 Flink 应用在运行过程中,算子的中间计算结果或者元数据信息。运行中的 Flink 应用如果需要上次计算结果进行处理的,则需要使用状态存储中间计算结果。如 Join、窗口聚合场景。 Flink 应用运行中会保存状态信息到 …

使用Navicat连接MySQL出现的一些错误

目录 一、错误一:防火墙未关闭 二、错误二:安全组问题 三、错误三:MySQL密码的加密方式 四、错误四:修改my.cnf配置文件 一、错误一:防火墙未关闭 #查看防火墙状态 firewall-cmd --state#关闭防…

大数据可视化项目——基于Python豆瓣电影数据可视化分析系统的设计与实现

大数据可视化项目——基于Python豆瓣电影数据可视化分析系统的设计与实现 本项目旨在通过对豆瓣电影数据进行综合分析与可视化展示,构建一个基于Python的大数据可视化系统。通过数据爬取收集、清洗、分析豆瓣电影数据,我们提供了一个全面的电影信息平台…

VS2019 下配置 OpenCV4.6.0 库

一、编辑电脑系统环境变量。 二、打开 VS2019 新建一个C项目。 1.进行Debug和Release的配置 X64 平台。 2.属性配置:VC目录 -> 包含目录 3.属性配置:VC目录 -> 库目录 4.属性配置:链接器 -> 输入 -> 附加依赖项 带 d 的 .lib 为 …

使用C语言操作kafka ---- librdkafka

1 安装librdkafka git clone https://github.com/edenhill/librdkafka.git cd librdkafka git checkout v1.7.0 ./configure make sudo make install sudo ldconfig 在librdkafka的examples目录下会有示例程序。比如consumer的启动需要下列参数 ./consumer <broker> &…

高工氢电年会 | 未势能源解超朋博士受邀出席并做主题演讲

12月4日&#xff0c;以“战略重构 商业觉醒”为主题的2023高工氢电年会在深圳举办&#xff0c;未势能源副总裁解超朋博士受邀出席开幕式论坛&#xff0c;以《把握机遇、直面挑战&#xff0c;迎接氢车规模化推广时代》为主题发表演讲&#xff0c;并参与圆桌论坛研讨。 氢势已来&…

C++类和对象——(8)类的组合

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 人生就像骑单车&#xff0c;想保持平衡…

uniapp 设置内容超长时的省略样式

需求 在uniapp中&#xff0c;页面在展示搜索历史的时候&#xff0c;需要对内容过长的进行处理&#xff0c;也就是文本超出我的最大长度时&#xff0c;不允许换行&#xff0c;且末尾为省略 期望的效果如下 思路 使用 官网 text-overflow 可选值俩个 clip 修建文本ellipsi…

电脑版便签软件怎么设置在桌面上显示?

对于不少上班族来说&#xff0c;如果想要在使用电脑办公的时候&#xff0c;随手记录一些常用的工作资料、工作注意事项等内容&#xff0c;直接在电脑上使用便签软件记录是比较方便的。电脑桌面便签工具不仅方便我们随时记录各类工作事项&#xff0c;而且支持我们快速便捷使用这…

虚拟机网络设置

虚拟机网络设置 上一篇讲了虚拟机的安装与使用 因为虚拟机默认使用的是网络地址转换和端口转发的方式&#xff0c;这种方式对于后面的开发不方便&#xff0c;所以我们需要设置虚拟机网络。 直接修改虚拟机的网卡信息 进入虚拟机并和虚拟机建立连接&#xff0c;在虚拟机内修改…

分布式环境下的session 共享-基于spring-session组件和Redis实现

1、问题概述 不是所有的项目都是单机模式的&#xff0c;当一个项目服务的局域比较广&#xff0c;用户体量比较大&#xff0c;数据量较大的时候&#xff0c;我们都会将项目部署到多台服务器上&#xff0c;这些个服务器都是分布在不同的区域&#xff0c;这样实现了项目的负载和并…

Spring Boot 项目的创建、配置文件、日志

文章目录 Spring Boot 优点创建 Spring Boot 项目创建项目认识目录网页创建&#xff08;了解&#xff09; 约定大于配置Spring Boot 配置文件配置文件格式读取配置项properties 配置文件yml 配置文件基本语法进阶语法配置对象配置集合yml 设置不同环境的配置文件 Spring Boot 日…

使用MIB builder自定义物联网网关的MIB结构

文章目录 物联网网关初识&#xff08;了解即可&#xff09;IoT的通用MIB库结构MIB Builder开发流程指导问题总结子叶没所属分组值范围不为0 物联网网关初识&#xff08;了解即可&#xff09; 网关又称网间连接器、协议转换器。简单说&#xff0c;物联网网关是一台智能计算机&a…

Java集合进阶(上)

集合 集合在Java开发中应用极为广泛&#xff0c;它其实就是一些常用的数据结构的包装类&#xff0c;分为单列集合&#xff08;Collecton接口类&#xff0c;例如LinkdeList集合&#xff09;和双列集合&#xff08;Map接口类&#xff0c;例如HashMap集合)两种 Collection Coll…

Sprite Editor图片编辑器的使用_unity基础开发教程

Sprite Editor图片编辑器的使用 什么是Sprite Editor安装插件&#xff08;3D项目&#xff09;切片方式Automatic&#xff1a;自动切片Grid By Cell Size&#xff1a;按照像素大小进行切片Grid By Cell Count&#xff1a;按照个数进行切片Isometric Grid&#xff1a;等距网格切片…

Java利用UDP实现简单群聊

一、创建新项目 首先新建一个新的项目&#xff0c;并按如下操作 二、实现代码 界面ChatFrame类 package 群聊; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.net.InetAddress; public abstract class ChatFrame extends JFrame { p…

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含pytho、JS工程源码)+数据集+模型(一)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Jupyter Notebook环境Pycharm 环境 相关其它博客工程源代码下载其它资料下载 前言 本项目基于Keras框架&#xff0c;引入CNN进行模型训练&#xff0c;采用Dropout梯度下降算法&#xff0c;按比例…

MAC 系统在vs code中,如何实现自动换行

目录 问题描述&#xff1a; 问题解决&#xff1a; 问题描述&#xff1a; 在vscode中&#xff0c;有些时候&#xff0c;一行内容过多&#xff0c;如果不能自动换行&#xff0c;就需要拖动页面&#xff0c;才能看到完整的内容。如下图两行所示&#xff1a; 问题解决&#xff1a…

华为数通---使用基本ACL限制Telnet登录权限案例

组网需求 如下图所示&#xff0c;PC与设备之间路由可达&#xff0c;用户希望简单方便的配置和管理远程设备&#xff0c;可以在服务器端配置Telnet用户使用AAA验证登录&#xff0c;并配置安全策略&#xff0c;保证只有符合安全策略的用户才能登录设备。 配置通过Telnet登录设备…