写在前面
研二才参加数学建模,昨天中午将论文提交,比赛结束,一群人熬夜奋战,还有点热血的感觉。
组队:研二计算机(解题+编程+写作)+研一计算机(解题+编程)+研一数学(解题+写作)
暑假才开始看数学建模的知识,大家感兴趣的可以看看我的这类博客,里面记录了我的学习笔记。当然有很多的模型我没有更新进去,大家可以在网上找其他同学写的博客看一看。
比赛之前总共学习了这些模型:
层次分析法:评价类模型——层次分析法,一致性检验学习笔记(一)
评价类模型——层次分析法,一致性检验学习笔记,matlab代码实现(二)
TOPSIS(优劣解距离法)评价类模型——TOPSIS法(优劣解距离法)学习笔记(一)
插值算法 数学建模——插值算法(分段三次埃尔米特插值、三次样条插值)思想及Matlab实现
相关系数 相关性模型——皮尔逊person相关系数VS斯皮尔曼spearman相关系数学习笔记
典型相关分析 数学建模——典型相关分析(CCA)及spss操作过程
多元回归分析 数学建模-多元线性回归(Stata实现)
图论最短路径问题 数学建模-图论最短路径(Matlab实现)
分类模型
聚类模型
灰色预测模型 预测模型——灰色预测模型及matlab代码实现
主成分分析
时间序列模型 数学建模——时间序列模型及spss实现
最后选的是D题:汽车行驶工况构建,用的数学建模模型有“主成分分析法+K-means聚类+相关系数分析”,借着讲解题目,顺便介绍一下主成分分析和聚类这两个模型怎么使用的,let's go.
一、选题
19号上午8点开始解压题目,总共A-F六道题;A题需要编程基础非常好的队伍才敢选,且需要将代码上传到华为云平台进行队伍队伍代码性能PK,这题过;B题、C题一看就不知道能用什么模型,过;F题,约束优化,这个模型没有学过,不在考虑范围内;上午对题目简单分析后暂定D、E。主要理由是D、E看起来像数据分析题,比较好套模型,比较容易实现。但E题没有给实验数据,需要网上爬虫获取数据,Python爬虫没有好好学习,只是皮毛,所以综合考虑确定了题目D。D题在2019年的定位与18年恐怖袭击C题很类似,用的模型也差不多,感兴趣的可以对比看一下。
A题目 无线智能传播模型
B题目 天文导航中的星图识别
C题目 视觉情报信息分析
D题目 汽车行驶工况构建
E题目 全球变暖
F题目 多约束条件下智能飞行器航迹快速规划
二、解题思路分析
D题,最终是让你构建一条时间-速度曲线,能用这个曲线解释汽车行驶过程中加速、减速、匀速、怠速等特点。
第一问:如何对原始采集到的数据进行数据预处理。
第二问:对处理后的数据进行运动学片段划分。
第三问:选择一种方法构建汽车行驶工况。
这题主要难点就是数据预处理,数据预处理我们做了两整天;原始数据是通过安装在汽车上的GPS信号采集器采集到的,有缺失数据和异常数据,缺失时间主要集中在缺失1s,还有缺失300s以上的数据,我们是将缺失300s的数据进行了缺失数据补全,通过matlab编程确定的下标。有的组在这部分是将10分钟以内的缺失数据看做匀速状态处理,我们是采取的线性插值方法补全10s-300s的数据,让数据在间断点处也保持平滑。我们认为300s以内的连续数据缺失可以解释为是汽车通过隧道、高楼时缺失的,对于300s以上缺失的数据认为是停车熄火等因素(这个解释忘写进去了..)。
题目还提出,长时间停车不熄火造成的怠速(速度为0)区间大于180s,我们的处理方法是让超过的部分是保留到180s前面的数据,这部分是编程确定好下标位置,徒手删掉的。
还有加速度异常的数据,这个是在运动学片段划分好之后筛选掉的。因为加速度异常不好处理,一个加速度牵扯相邻的几个速度,单独对两个或三个速度修改可能并不能使得数据满足加速度范围,对更多的数据处理可能或造成对原始数据更大的破坏,有的同学在这部分是将加速度异常值视为缺失值进行了缺失值替换,但这个时间成分太大了,且不好操作,放在数据预处理这部分并不合适。数据预处理前是要将时间转化为数值,因为题目给的数据里时间是字符串形式,而我们需要的是能参与运算的数值形式,这里是通过Spss进行操作的。
数据预处理后转而进入第二问:这个是以速度为10km/h为界限,连续低于10km/h的20个速度区间视为怠速区间,下一个连续低于10km/h的20个速度区间视为怠速区间,以此为界限截取一个运动学片段,编程这部分是记住原始时间的下标。
第三问我们查阅文献,发现大多数人使用的都是主成分分析-聚类方法构建汽车行驶工况。我们在题目给的平均速度(km/h)、平均行驶速度(km/h)、平均加速度(m/s^2)、平均减速度(m/s^2)、怠速时间比(%)、加速时间比(%)、减速时间比(%)、速度标准差(km/h)、加速度标准差(m/s^2)九个指标中增加了四个指标用以做运动学片段的特征参数。用主成分分析的思想对13个特征参数进行降维,得到了四个主成分(累积贡献率达到83.7%),在用K-means聚类对四个主成分做聚类,得到三类运动学片段划分。在通过相关系数分析,得到每个类别中与该类别相关系数最高的几个运动学片段进行汽车行驶工况分析。最后通过偏差分析,验证了构建的汽车行驶工况对原始数据的误差在合理的范围内。
最后对数据分析整理,画系统流程图、数据处理流程图、k-means流程图;文件记录数变化表、主成分贡献率表、分类结果表、相关系数表;k-means聚类效果图、分类后运动学片段中匀速怠速等时间比以及其他的数据图表。
总结一下:
在比赛之前我们讨论的是选择做数据分析题目,且选有数据的,结果哼哼,就是有这么一道题,且作为编程建模及写作为一体的综合型选手的宝宝作为主力军在比赛之前就断断续续的学习了十几个模型,因为谁也不知道哪些模型能用上,事实证明,多掌握一点知识总是没错的。数学建模中用到的模型只要理解了其思想,编程及SPSS、Stata操作都比较方便。编程用matlab就够了,当然还要学习一下excel数据分析操作,怎么绘制条形图、饼状图、数据透视表啊,什么的。
前期的数据预处理我们主要使用了spss、matlab和excel三个软件;运动学片段化分和主成分分析用的matlab编程;聚类分析用的是SPSS的分析功能。
给大家建议,队员组建的时候,还是找已经合作过的同学,彼此熟悉对方的能力。这次比赛最难受的跟队员的沟通,实在是性格不同的人不要一起合作、非常不痛快,累死累活的,编程写作画图数据分析。。。
最后,祝我有个好成绩吧!啦啦啦啦...
转载:https://blog.csdn.net/qq_36384657/article/details/101302227