2021年华为杯数模赛D题总结

题目:

题目太长(网上能找到完整题目),背景信息略过,这里把题目抽象一下:

已有条件:

  1. 给出了1974个训练样本和50个测试样本,每个样本有729个特征
  2. 每个训练样本有7个标签,分别是IC50值、pIC50值、和ADMET性质(包含5个标签)
  3. IC50值、pIC50值是两个相关的连续变量。pIC50是IC50的负对数
  4. ADMET性质的五个变标签都是布尔值

问题:

  1. 根据特征对IC50值和pIC50值影响的重要性进行排序,并给出前20个对IC50值和pIC50值最具有显著影响的特征
  2. 选择不超过20个特征,构建IC50值和pIC50值的定量预测模型,并计算测试样本的IC50值和pIC50值。
  3. 构建ADMET性质的分类预测模型,并计算测试样本的ADMET性质
  4. 寻找并阐述哪些特征,以及这些特征在什么取值范围时,pIC50值取值较好,同时具有更好的ADMET性质(给定的五个ADMET性质中,至少三个性质较好)

把题目抽象以后,可以发现是一个很明显的利用机器学习模型处理数据挖掘的问题。题目的大致思路就出来了:

第一问主要问题:特征选择问题

第二问主要问题:回归预测问题

第三问主要问题:二分类问题

第四问主要问题:最优化问题

在使用机器学习模型之前,为简化模型,需要对题目做一些假设:

  1. 729个特征符合独立同分布
  2. 729个特征的值是准确可靠的
  3. ADMET与IC50值和pIC50值是相互独立的

不得不说,这个题目出得相当好。把数据挖掘的每个步骤都考到了,兼顾了回归问题和分类问题。用到的技术及要求比较全面,但又不过分深入。是一道很有价值的题目。

第一问

步骤一

根据假设2,数据集中没有脏数据。可略过数据清洗,直接进行特征选择。

特征可以分为三类,:

  1. 相关特征(保留):对于学习任务(例如分类问题)有帮助,可以提升学习算法的效果;
  2. 无关特征(剔除):对于我们的算法没有任何帮助,不会给算法的效果带来任何提升;
  3. 冗余特征(剔除):不会对我们的算法带来新的信息,或者这种特征的信息可以由其他的特征推断出;

根据假设1,数据集中不存在冗余特征,我们只需将无关特征剔除即可,首先要把方差极小的特征删除。

1.数据归一化(去量纲),保留原有特征分布。norm(x)=x−min(x)max(x)−min(x)norm(x) = \frac{x-min(x)}{max(x)-min(x)}norm(x)=max(x)−min(x)x−min(x)​

2.方差过滤,剔除方差较小的特征。

根据以上操作,剔除了568个无效的特征,剩余161个特征。

步骤二

这一步,我们使用了三种不同的方法进行特征选择分别是:

  1. 灰色关联分析(GRA)
  2. 递归特征消除(RFE)
  3. 互信息法(MIR)

为什么选择这三种方法呢?首先,我们分析数据之后,没能得出数据有什么特点,因此不知道什么样的特征选择方法是最优的。使用多种特征选择方法,之后再对比这几种方法的性能,总能选出一个最优的。其次,我们选择的方法既包含能表征线性关系的方法(GRA),有包含能表征非线性关系的方法(RFE/MIR)。

1.GRA:

GRA的原理和代码可参考我的博客:灰色关联分析

2.RFE:

递归特征消除的主要思想是反复的构建回归模型(这里用的是SVM),然后选出最好的(或者最差的)的特征。把选出来的特征剔除,然后在剩余的特征上重复这个过程,直到所有特征都遍历了。这个过程中特征被消除的次序就是特征的排序。

from sklearn.svm import SVC
from sklearn.feature_selection import RFEsvc = SVC(kernel="linear", C=1)
rfe = RFE(estimator=svc, n_features_to_select=1, step=1)
rfe.fit(X, y)
ranking = rfe.ranking_.reshape(digits.images[0].shape)

3.MIR:

MIR使用了概率论和信息论的知识。篇幅限制,我就贴一个总结的较好的博文吧:MIR

from sklearn.feature_selection import mutual_info_classif as MICresult = MIC(X_fsvar,y)
k = result.shape[0] - sum(result <= 0)
X_fsmic = SelectKBest(MIC, k=20).fit_transform(X_fsvar, y)
cross_val_score(RFC(n_estimators=10,random_state=0),X_fsmic,y,cv=5).mean()

根据以上三种方法,我们得到了三组对pIC50影响最大的20个特征。那么该选那一组作为最终结果呢?我们将这三组特征使用第二问的模型进行对比,哪组拟合优度最好就选哪组。

在这先放个最终答案吧(刚发现,这个三线表的格式有问题… 猛男哭哭):

第二问

我们使用了很多模型进行试验,包括SVM、线性回归、手工设计的全连接神经网络和matlab工具箱中的BP神经网络。这个过程就不再赘述了。最终结论就是matlab工具箱中的BP神经网络是效果最佳的。

BP神经网络的原理和实现方法参见我的博客:BP神经网络

我们得到的结果如下:

GAR/RFE/MIR的迭代曲线:

可见MIR的拟合优度最高。因此第一问最终结果就是使用MIR得到的那组特征。

下面拟合的pIC值与真实的pIC50值的对比:

赛后思考:这一问其实是有点问题的。RFE做特征选择的时候使用的模型是SVM,但实际性能对比的时候用到模型是BP神经网络,这是错误的。当选用BP神经网络时,我们应该让RFE使用BP神经网络重新做一次特征选择,这样才能保证结果是可靠的。

第三问

由假设3可知,第三问与前两问一毛钱关系都没有。

第三问是一个经典的二分类问题,套路与前两问类似——先做特征选择,再做预测模型。而随机森林算法既可以做二分类模型,也可以进行特征选择,因此这一问我们很自然的选择了随机森林算法。

随机森林是一种基于决策树的集成学习算法,具体的原理可以参考这篇博文:随机森林(by the way, 这篇文章详略得当,写的确实不错)

特征选择:

import sklearn.feature_selection
from sklearn.model_selection import ShuffleSplit
from collections import defaultdict
from sklearn.ensemble import RandomForestClassifierrf = RandomForestClassifier(n_estimators=100,
criterion='gini',
verbose=1,
n_jobs=-1,
oob_score=True)scores = defaultdict(list)
rs = ShuffleSplit(n_splits=5, test_size=0.2)for train_idx, test_index in rs.split(x_train):X_train, X_test = x_train[train_idx], x_train[test_index]Y_train, Y_test = y[train_idx], y[test_index]r = rf.fit(X_train,Y_train)acc = mean_absolute_error(Y_test, rf.predict(X_test))for i in range(x_train.shape[1]):X_t = X_test.copy()np.random.shuffle(X_t[:, i])shuff_acc = mean_absolute_error(Y_test, rf.predict(X_t))scores[i].append(abs(acc-shuff_acc))print("Features sorted by their score:")
print(sorted([(round(np.mean(score), 4), feat) forfeat, score in scores.items()], reverse=True))

五个标签选择的特征分别是:

Caco-2 (相关性阈值取0.5): [719, 677, 105, 725, 716, 655, 626, 27, 26, 175, 8, 678, 653, 286, 630, 615, 605, 604, 594, 266, 66, 638, 35, 3, 720, 88, 294]

CYP3A4 (相关性阈值取0.5): [225, 105, 102, 100, 99, 722, 7, 91, 30, 623, 238, 98, 26, 653, 101, 346, 31]

hERG (相关性阈值取0.5): [357, 238, 476, 653, 606, 291, 4, 587, 480, 95, 92, 648, 11, 7, 410, 346, 250, 155, 104, 22, 8, 725, 647, 630, 84, 97]

HOB (相关性阈值取0.5): [39, 238, 119, 291, 357, 615, 44, 585, 346, 86, 292, 94, 23, 172, 465, 411, 630, 4, 606, 493, 476, 344, 228, 81, 619, 618, 594, 591, 529, 504, 225, 88, 610, 589, 587, 531, 463, 383, 237, 60]

MN (相关性阈值取0.3): [724,722,346]

分类预测:

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_reportX_train,X_test,Y_train,Y_test = train_test_split(x_train,y,test_size=0.2)# 模型建立和训练
rf = RandomForestClassifier(n_estimators=100,criterion='gini',verbose=1,n_jobs=-1,oob_score=True
)rf.fit(X_train,Y_train)
predict = rf.predict(X_test)# 模型评估
print('The accuracy of random forest classifier is', rf.score(X_test, Y_test))
print(classification_report(predict, Y_test))# 预测
predict_test = rf.predict(x_test)
print('Final prediction result is:')
print(predict_test)

最终得到的结果为:

第四问

第四问是一个最优化问题,我们尝试了使用粒子群算法,但最后效果非常离谱。。总而言之,我们在第四问遇到了困难(猛男哭哭)。因此使用了一个非常不科学的方式:

这一部分我就不细讲了。最后贴个结果吧。

分子描述符序号 分子描述符 取值范围
68 SCH-7 (1.66 , +∞)
73 VCH-7 (0.847 , +∞)
78 VC-3 (2.46 , +∞)
81 VC-6 (1.2, 1.25)
90 SP-2 (18.481 , +∞)
92 SP-4 (3.61 , +∞)
346 minwHBd (-∞, 2.2)
529 maxssssNp (1.2 , +∞)
619 ETA_BetaP_ns (4.32 , +∞)
665 MDEO-11 (8.91 , +∞)
722 WTPT-2 (-∞, 9.2)
724 WTPT-4 (-∞, 4.32)
726 WPATH (30134.1 , +∞)

2021年华为杯数模赛D题总结相关推荐

  1. 第十八届“华为杯”数模LaTeX模板送你!附官方优秀论文下载

    [写在最前面] LaTeX模板, 旨在让大家专注于论文的内容写作, 而不用花费过多精力在格式的定制和调整上.将格式用代码的形式固定,用户只需要填充内容即可.模板提供了一 些基本常用的环境和命令,方便用 ...

  2. 2019 高教社杯数模竞赛A题 高压油管的压力控制 题解

    2019 高教社杯数模竞赛A题 高压油管的压力控制 题解 问题一题解 分析 求解 求解微分方程 求解管内燃油密度变化 问题二题解 分析 求解 燃油的进入 燃油的喷出 模型的求解 问题三题解 分析 求解 ...

  3. 2019.9.19年华为杯数模

    六月份,同老乡聊天聊到数模,抱着比赛加分的心态想要尝试一下,两人以前都没有任何数模经验,我连对应比较常用的软件都不清楚,只知道要用到matlab,巧了的是,自己也不会:可以说是真的数模零基础.第二步, ...

  4. 2020第十七届华为杯数模C题——P300脑电信号数据预处理算法

    脑电信号数据预处理   这两天的数学建模选的C题,目标是要处理脑电P300信号的数据并进行相关预测任务.该题重点是数据预处理,因此根据最后实验的结果,分享相关的预处理方法以及源代码.长话短说,给出任务 ...

  5. 2020 华为杯 数模 B题 数据挖掘

    B题是一道数据挖掘题目 主要难点是 :题目样本较小,但是样本的维度又很大,需要分析的目标与数据之间的关系不明显 解决这个题目应该注重以下几方面 1.审题,对题目的要求一定要看清楚,特别是对提供的数据一 ...

  6. 2021泰迪杯数据分析技能赛B题-肥料登记数据分析

    调用模块: import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns p ...

  7. 2021年华为杯数学建模比赛——二分类与回归问题(1)

    前言: 作者在2021年10月参加了华为杯研究生数学建模比赛,历经5天的比赛,最终结果是全国二等奖,还算不错.作为队伍中的编程手和建模者,我使用的是jupyter notebook来编写代码和画一些结 ...

  8. 2021 年“泰迪杯”数据分析技能赛 B 题 肥料登记数据分析 (视频讲解+解题源码)、数据挖掘、数据分析实战

    2021 年"泰迪杯"数据分析技能赛 B 题 肥料登记数据分析 (视频讲解+解题源码).数据挖掘.数据分析实战 前言: 整理了2021 年"泰迪杯"数据分析技能 ...

  9. 2021年“春秋杯”新年欢乐赛--十二宫的挑衅

    前言 没怎么打,随便玩了一下.发现有一道十二宫杀手密码比较有趣.总结一下 题目说明 标题:十二宫的挑衅 题目文件:Twelve_palaces_of_serial_killers.png(翻译:十二宫 ...

最新文章

  1. 计算机禁用了网络怎么qtyong,如何禁用Qpushqt按钮?
  2. DataGrid的使用
  3. 【数据结构与算法】之深入解析“不同路径III”的求解思路与算法示例
  4. Osg/OsgEarth—— 无法打开文件osgGA/MatrixManipulator错误
  5. ajax漏洞 console_在实战中可能碰到的几种ajax请求方法详解
  6. 稳定服务器头像,WordPress 修复 Gravatar 头像稳定服务器地址
  7. 规模比互联网大 30 倍的物联网,如何入门?
  8. DBA_Oracle性能优化的基本方法概述(方法论)
  9. Dijkstra算法C++实现
  10. 背包问题九讲 2.0 beta1.1
  11. 2019年物联网行业市场研究报告
  12. rust石墙掉耐久_rust恢复房子耐久 | 手游网游页游攻略大全
  13. 浪潮服务器开机没有信号输出,PLC输出指示灯已经点亮但是输出没有信号-工业支持中心-西门子中国...
  14. 企业小程序应该如何开发?
  15. qq机器人代码c语言百度云,QQ机器人开源模块集合打包
  16. csv文件导入后台乱码_Excel打开csv文件出现乱码的解决方法
  17. 读书笔记之《设计原本》
  18. 故障排查:maven下载依赖失败(Transfer failed)
  19. node os模块读取hostname乱码
  20. wiredtiger java_为什么PostgreSQL比MongoDB还快之续篇(WiredTiger引擎)

热门文章

  1. 推荐一个完善的停车管理系统,物联网项目springboot,附源码
  2. 有限元仿真的流程:三大步三小步
  3. 国美金融贷款安装mysql ,国美金融贷款优化MySQL配置
  4. ios真机调试教程(不上架App Store安装到手机)
  5. 新城疫治疗行业调研报告 - 市场现状分析与发展前景预测
  6. 高中数学必修2;解析几何高考热点_逆袭高考
  7. 让我瞅瞅积灰的收藏夹里有什么好东西!
  8. C++【对象模型】| 【06】类中各种函数的刨析
  9. jq点击事件第二次点击会出现两次点击 依次累积
  10. vue 使用h5播放器 Chimee 没有样式