2021“华为杯”第⼗⼋届研究⽣数学建模D题
数学建模已结束数⽇,今晚刚好闲来⽆事,决定对这次数学建模进⾏⼀下总结。
单招成绩查询系统入口
题⽬下发以后,和队友经过⼀番商讨,便决定在B和D之间选择⼀个,原因也很简单,本⾝研究⽅向是NLP,机器学习和深度学习⾃然还是⽐较熟悉。然后⼤致看了⼀下,B更加复杂⼀些,我们决定把时间多花在论⽂上,于是就选了D。
先来简单介绍⼀下D题,题意其实就是研究不同分⼦描述符组合对ERa这种致癌基因的影响,使⽤⽣物活性来判断这个基因的显性程度。所以也就⼀⽬了然,⽣物活性就是因变量Y,不同分⼦描述符组合就是⾃变量。
南方电网校园招聘问题
问题1. 根据⽂件“Molecular_Descriptor.xlsx”和“ERα_activity.xlsx”提供的数据,针对1974个化合物的729个分⼦描述符进⾏变量选择,根据变量对⽣物活性影响的重要性进⾏排序,并给出前20个对⽣物活性最具有显著影响的分⼦描述符(即变量),并请详细说明分⼦描述符筛选过程及其合理性。
问题2. 请结合问题1,选择不超过20个分⼦描述符变量,构建化合物对ERα⽣物活性的定量预测模型,请叙述建模过程。然后使⽤构建的预测模型,对⽂件“ERα_activity.xlsx”的test表中的50个化合物进⾏IC5
0值和对应的pIC50值预测,并将结果分别填
石家庄市直事业单位⼊“ERα_activity.xlsx”的test表中的IC50_nM列及对应的pIC50列。
问题3. 请利⽤⽂件“Molecular_Descriptor.xlsx”提供的729个分⼦描述符,针对⽂件“ADMET.xlsx”中提供的1974个化合物的ADMET数据,分别构建化合物的Caco-2、CYP3A4、hERG、HOB、MN的分类预测模型,并简要叙述建模过程。然后使⽤所构建的5个分类预测模型,对⽂件“ADMET.xlsx”的test表中的50个化合物进⾏相应的预测,并将结果填⼊“ADMET.xlsx”的test表中对应的Caco-2、CYP3A4、hERG、HOB、MN列。
问题4. 寻并阐述化合物的哪些分⼦描述符,以及这些分⼦描述符在什么取值或者处于什么取值范围时,能够使化合物对抑制ERα具有更好的⽣物活性,同时具有更好的ADMET性质(给定的五个ADMET性质中,⾄少三个性质较好)。
湖北人事考试网首页
求解:
1.问题⼀其实就和2020年研究⽣数模的B题很像了,说⽩了就是从多个变量中筛选出其中最重要的N个。这个时候要注意的是,是筛选出原来的变量,所以PCA就显得不太适⽤了,因为PCA产⽣出了新变量,相当于对原变量进⾏了⼀种概括或合并。(有⼈可能会说PCA之后的结果是原变量的线性组合,
我可以通过线性组合的系数来判断原变量的重要新,这种⽅法是可以作为⼀种⽅向,但解释性不强。同时另⼀个问题就值得思考,怎么确定原变量是线性⽆关的么,那如果不是线性⽆关,线性组合的⽅式⼜是否可靠呢!如果所有变量是线性⽆关的,那完全可以使⽤标准化回归,相对来说更加准确)
经过⼀番思考,我们考虑到可以使⽤的⽅法有灰⾊关联度分析、聚类、随机森林、XGBOOST以及LightGBM等集成学习的⽅法。最后经过尝试,聚类这种⽅法通过系谱图发现不适合聚20类,这个数据聚六七类就很合适,所以就把聚类丢掉了。
其中灰⾊关联性分析其实就是计算空间上的相似性来判断重要程度,⽐较常见。
随机森林是在决策树的基础上进⾏的改进,那么提到决策树就不得不提“信息增益”这个词了,决策树中的每个分⽀就是根据“信息增
益”来进⾏计算得到,所以⽤信息增益来作为变量筛选的⽅式⾃然是合理的,况且使⽤随机森林的⽅法不⽤考虑⾮线性关系,⼀举两得。
⾄于集成学习的那⼏种⽅法其实是随机森林的改进版本,都是基于GBDT来做的,其中lightGBM是XGBOOST的改进版。随机森林是
算“信息增益”,⽽这类⽅法是算“基尼系数”,然后使⽤均⽅误差来做损失函数。这类⽅法的效果也确实
不错,我们使⽤这些⽅法来做,结果基本没有显著相关的变量,都通过相关性检验。
题⽬要求筛选20个变量,但要对所选结果进⾏相关性检验,这⾥我们设计了⼀个⼩思路,就是进⾏相关性检验后,删去两个相关性系数⼤于0.9的其中之⼀。然后再将变量补充⾄20个,再检验,再补充,直⾄20个变量都两两不显著相关。(相关性检验使⽤斯⽪尔曼相关系数,因为数据不满⾜正态分布,正态分布使⽤JB检验,因为数据量⼤,⽤这个⽐较合适,也可以使⽤QQ图检验法,为了好解释,我们就⽤了JB检验,然后对结果进⾏P检验,发现P⼩于0.05,就拒绝原假设,不满⾜正态分布。这⾥不太清楚的话可以看⼀下相关性分析那块内容)
2.问题⼆是⼀个典型的回归预测问题。题⽬要求使⽤不多于20个变量,我们也就使⽤第⼀问所选的20个变量来做回归。我们基本还是使⽤第⼀问中所罗列的⽅法,包括随机森林、XGBOOST等,新加了SVR,以及使⽤粒⼦算法改进的SVR、BP神经⽹络等。
忻州人事这⾥说⼀下PSO-SVR, SVM通常指分类,SVR就是⽀持向量机做回归。那为什么要⽤粒⼦算法来改进SVR呢,因为SVR包括好多超参数,粒⼦算法的⽬的就是寻到最合适的参数,来调优SVR,能寻到那个最合适的超平⾯。高中教师资格证报考条件要求
3.问题三是个典型的分类预测问题,因为题⽬说训练多个模型,所以就没将问题考虑为多标签分类,⽽是考虑为⼀般的多分类任务。题⽬没限制变量个数,于是我们使⽤全部变量进⾏训练(这⾥可能有
⼈会疑惑为啥不去掉⼀些⽆意义变量,后⾯我会解释,耐⼼看完!)。这⾥我先说⼀下回归和分类的区别,我以神经⽹络来阐述可能更加好理解。对于神经⽹络,我们只要要分类的话我们通常最后接⼀个softmax就搞定了,但是softmax前是什么呢。其实这个东西叫做logits,就是隐藏层的输出,对应每⼀类别的概率,softmax其实就是将这些值归⼀到0-1,并且放⼤正例的概率,缩⼩负例的概率。那回归只有⼀个logits,最后把这个值映射到⼀个合适的区间也就是预测值。
除此之外,我们知道,分类任务我们通常使⽤交叉熵作为损失函数,⽽回归任务我们就不能使⽤交叉熵来作为损失函数了。⽽是要⽤均⽅误差来作为损失函数,这其实也很简单,交叉熵的定义为:
其中pic为预测值,回归任务预测值可能为⼀个负数,负数没有对数,所以交叉熵⾃然也就不能作为损失函数了,所以⼀般使⽤均⽅误差,事实上包括XGBoost等算法也确实使⽤均⽅误差作为损失函数。
4.问题四可能是这个题最复杂的⼀问了,这是⼀个优化问题,要求筛选⼀些变量,并求解他们的值或者范围,使⽣物活性达到最⼤的同时能拥有三个及以上的ADMET指标。
那我们就先初始化⼀批变量,这些变量应该是对⽣物活性影响最⼤的,⾃然就想到了使⽤第⼀问所筛选得到的20个重要变量,然后⽤这20个变量组成的数据使⽤第⼆问最好的模型训练⼀个回归模型,接
着求解Y(⽣物活性)的最⼤值,然后把最⼤值对应的20个变量对应的值出来⽤第三问训练的5个分类模型进⾏预测,来判断是否有三个及以上的ADMET指标满⾜。
这⾥有两个关键点:
⼀个是最⼤值的求解,我们选⽤遗传模拟退⽕算法来做,⼀来嘛就是遗传算法加模拟退⽕算法结合使⽤可以避免陷⼊局部最优解,⽽在局部最优的条件下还可以满⾜全局最优。⼆来嘛就是为了论⽂看起来⾼⼤上⼀点,懂得都懂.....
第⼆个就是不满⾜三个及以上ADMET指标后如何修改初始化变量呢,我们是通过降低20个变量的相关性系数矩阵的判定阈值,阈值降低了,原本不显著相关的变量⾃然就相关了,然后就剔除其中⼀个,再加进去新的变量,再训练回归模型,再求解最⼤值,再验证,这样迭代下去,直到到满⾜题意的变量组合。
中间遇到的⼩插曲:
第⼀问筛选变量时刚开始我们是在变量筛选前就进⾏相关性检验,再筛选,后来发现这样做不太合理,因为删除变量的过程中有可能把本来很重要的变量删掉,所以后来放在最后检查相关性更合理。
第⼆问和第三问刚开始就直接把数据集中全部为0的变量去除了,因为我们认为全部为0的变量它没有
显著的特征,故没意义。最后使⽤测试集预测时发现测试集中那些删除的变量并不全为0,处于不轻易修改题⽬测试集的原则,我们也就在训练时使⽤全部变量进⾏训练。
最后的最后,真的⾮常感谢两位队友的努⼒付出,四天三夜的努⼒作战,最后⼀晚熬夜在写论⽂、写代码,直到最后五分钟才提交论⽂,⼀段经历最重要的可能并不是结果!故事仍未结束,⽣活还在继续~