赞
踩
众所周知,我在写这篇文章的时候已经是2024年了,国赛快到了不得不抱一抱佛脚,拿以前的题目来练练手,这是我对于2022年全国大学生数学建模竞赛C题的经验总结。如有出错,请大佬指正!!!!
全国大学生数学建模竞赛 (mcm.edu.cn)http://www.mcm.edu.cn/html_cn/node/388239ded4b057d37b7b8e51e33fe903.html
题目要求我们分析表面风化和玻璃类型,表面风化和纹饰,表面风化和颜色这三对变量之间的关系。注意这三个变量是分类变量,因此我可以三次使用卡方检验。原假设就是不存在相关性,观察计算出来的p值,如果p值小于0.05,也就是说相关程度大于95%,那么我们认为两者之间具备显著相关性,拒绝原假设。反之,接受原假设。
按照玻璃类型和是否风化进行分类成四组,求得均值,标准差,最小值,第一四分位数,中位数,第三四分位数,最大值,峰度和变异系数这些统计量,对同一玻璃类型的是否风化两组进行相互对照,言之有理即可。
题目要求我们知道某一个风化的文物在风化前(也就是未风化)的化学成分含量,在这里我采用的方法是偏最小二乘回归的方法,因为偏最小二乘回归是可以处理多个自变量对应多个因变量的情况,并且善于处理自变量之间存在多重共线性(也就是高度相关)的数据,而在第一小问的卡方检验中我们知道玻璃类型和是否风化是显著相关的。我对四个分类变量进行量化处理,用这四个分类变量作为自变量,十四个化学成分作为因变量建立偏最小二乘回归模型。模型建立好之后,针对某一个已经风化的文物,我将风化变量(我在处理过程中风化为1,未分化为0)从1改为0,其余自变量保持不变,经过模型处理后即可得知风化前的化学成分含量。
在这个问题上还有一种方法我觉得也很合适,那就是Dirichlet回归。这个方法适合因变量相加是一个常数的情况,这个问题上十四个化学成分含量相加接近1,因此适用。
这里我采用的是logistic回归,简单介绍一下logistic回归。
logistic回归是一个简单地机器学习模型,用于处理二类分类问题(虽然叫回归,但是处理的是分类问题)。举一个简单的例子,假设我的样本有四个变量(x1,x2,x3,x4)每个样本都含有一个分类标签,比如在我们这道题里面就是玻璃类型(铅钡和高钾),但是在代码处理上需要对分类变量进行量化,我们可以用0和1代替。logistic就需要找到这四个自变量和因变量之间的映射。
logistic的处理是对这四个变量进行线性组合,也就是每个变量前面乘以一个系数。线性组合的结果当作sigmoid函数的自变量,这个sigmoid函数的值域是[0,1],用于表示概率。机器学习训练的目的就是找到每个变量前面的系数的合适的值。所以就需要数据集进行模型训练,这里我们可以使用预处理之后的数据,因为这些样本是什么类型的玻璃我们都是知道的。
模型训练好后,如果存在哪个样本知道自变量,但是不知道因变量(在这里就是不知道二类中的哪一类),就可以把他的自变量组成一个向量投入logistic模型当作,会得到一个介于0和1之间的值。如果大于0.5就是正例,反之就是负例。
训练的时候注意对数据集划分为训练集和测试集,并且可以调整学习率和迭代次数,避免过拟合和欠拟合的情况发生。
言归正传,这里我的思路是很显然变量的系数可以反映出变量对logistic模型结果的影响程度。因此我取系数正数最大和系数负数最大分别取两个变量,系数为正数的两个变量越大同时系数为负数的两个变量越小,则越接近正例。反之,同理。.
我们先按照玻璃类型将数据分成两组,对每一组单独分析。这里我采用的是K-means聚类,这个可以使用SPSS软件实现,也可以使用代码实现。我简单介绍一下k-means聚类
k-means聚类是一种无监督的机器学习方法,目的是对数据进行分类。
在我们这个问题当作,每一个文物都有十四个化学成分,因此每一个文物都可以对应到十四维度空间中的一个点,这个空间我们叫做特征空间。先在空间中任取三个点(我叫做中心点),样本按照就近原则分别分配到这三个中心点中的某一个。这样就完成了第一次分类,对三类数据取平均值,这样又得到了三个中心点,如此反复。直到中心点的位置收敛到一定程度就可以结束迭代,得到最终的分类结果。
可以看到k-means聚类的一个是按照特征空间中点之间的远近来判断相似程度的。
合理性我觉得可以使用k-means聚类的合理性来回答,敏感性我觉得可以对变量在其本身加上一定程度的噪声。如果结果没有显著改变的话可以说明模型具有较强的稳健性。
我们在第二题当中就建立好了logistic回归模型,使用表单三的数据进行模型推理就可以知道分类结果了。我的分类结果是高钾,铅钡,铅钡,铅钡,铅钡,高钾,高钾,铅钡,这个结果和国一大佬的结果是一样的(我看了两篇论文)。但是我用SPSS的结果却有两个结果不一样,我目前还没有找到原因。评论区的大佬们看到这里麻烦提示一下我。
但是如果还用logistic就显得我们比较low了,搞得好像第三问在摸鱼,在这里可以使用一些其他的模型,比如说决策树,偏最小二乘回归等等,然后进行相互对照。
和第二题一样的思路。
对于关联分析,这里我采用的是灰色关联度分析。下面介绍一下灰色关联度分析:
灰色关联度分析是一种用于确定不同数据序列之间关联程度的方法。这种方法特别适用于处理那些具有不完全数据或信息的系统,因为灰色系统理论的核心就是研究少量数据下系统的生成、预测和决策问题。
在进行关联度分析时,会选定一个参考序列(通常是标准或者理想状态下的序列),然后用其他序列(比较序列)与之进行对比,以评估这些序列与参考序列的相似程度。
这里我就采用二氧化硅为参考序列,可以求得关联度。
在第一小问当中我们求得了两组数据的关联度,也就是说我们得到了两个长度一样的数组,我们需要分析这两组数之间的差距。我们采用的方案是wilcoxon检验。
Wilcoxon检验是一组非参数统计检验方法,用于比较两个相关样本(配对样本)或两个独立样本的中心趋势是否显著不同。这种检验非常适合于数据不是正态分布的情况,或者数据是等级数据的情况。
wilcoxon检验假设的是两者没有显著的关系,和上面的卡方检验类似,也存在一个p值。当p值大于0.05的时候,接受原假设,这里也是这样的结果。
数学建模广泛地运用到了线性代数和数理统计的知识,同时又与实际紧密地结合,是一个很锻炼能力的竞赛。我们还有很多的不足,如你所见,我在一些问题的处理上还有很多缺陷,还请各位大佬路过指正!!!同样对建模感兴趣的宝子欢迎私信我,大家一起努力!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。