2023年 华为杯数学建模 E题

本科大三的时候,打过一次美赛,当时租了一个民宿,和队友一起度过了专注的四天。当时比赛结束之后,拿着手机,看到四天没回的消息,四天没刷过的朋友圈,有种很新奇的感觉,谢谢美赛给了我消失的自由。

入学后,九月的时候,师姐邀请室友和我打华为杯。美赛的时候,我是论文手,感觉收获不大,不止一次后悔过为什么不平时多敲点代码,争取当编程手,或者辅助编程手。一年半中,我确实看了或敲了不少代码,这次比赛我主动请缨想写代码。嗯,还是建模写代码有意思多了。

由于我和室友周一周二有课,所以我们一开始就确定下来,要早点确定选题,并争取前三天周五到周日的时候,把题目做完。22号早上,我八点就守到电脑前准备接收赛题了,但是网络拥堵,八点二十队长才把赛题下载下来,上午经过简单的讨论,我们和一开始计划的一样,选了确保我们能够做出来的,预测类的数据分析题E题。

我和队长一起负责建模和编程,我们会一起讨论每道题的做题思路,然后每个人依次负责下一道需要做的题。在这里我们分享一下我主要负责的题1b,2b,2d和3b的思路。

1b)请以是否发生血肿扩张事件为目标变量,基于“表1” 前100例患者(sub001至sub100)的个人史,疾病史,发病及治疗相关特征(字段E至W)、“表2”中其影像检查结果(字段C至X)及“表3”其影像检查结果(字段C至AG,注:只可包含对应患者首次影像检查记录)等变量,构建模型预测所有患者(sub001至sub160)发生血肿扩张的概率。

注:该问只可纳入患者首次影像检查信息。

这道题需要用到1a的结果作为label,利用题目中指定的表1,2,3的特征做预测。表1是个人史和疾病史,一共给定的二十列中有17列都是0,1表示的二分类离散变量,表2(血肿的位置分布),表3(血肿的形状、颜色)是高维离散数据。题目一共只给了160个样本,并且只有100个是训练样本。针对本题数据小样本高维度的特点,我选择先对连续变量使用PCA降维。对于离散数据和连续数据使用两个不同的模型训练后集成起来。最后,离散数据选择的是l1正则项的逻辑回归,连续数据选择的是随机森林。

import pandas as pd
from sklearn.decomposition import PCA
#主成分分析降维及数量选择.import pandas as pd
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler# 数据缩放
scaler = StandardScaler()
X_2_scaled = scaler.fit_transform(X_2)# 使用PCA降维
pca = PCA()
data_pca = pca.fit_transform(X_2_scaled)# 设定阈值
threshold = 0.98# 计算主成分数量
explained_variance_ratio = pca.explained_variance_ratio_.cumsum()
n_components = (explained_variance_ratio < threshold).sum() + 1# 输出信息
print("Variance Threshold: ", threshold)
print("Number of Principal Components: ", n_components)# 得到降维后的数据
X_2_reduced = data_pca[:, :n_components]
#模型训练及预测#交叉验证训练单模型
import xgboost as xgb
from sklearn.linear_model import LogisticRegressionscaler = StandardScaler()model = xgb.XGBClassifier() 
model = LogisticRegression(penalty='l1', solver='liblinear') 
pipeline = Pipeline([('scaler', scaler),('model', model)
])# 交叉验证
ss = ShuffleSplit(n_splits=5, test_size=0.2, random_state=43)  # 每次交叉验证中随机抽样20%的数据
scores = cross_val_score(pipeline, X_1, y, cv=ss, scoring='accuracy')# 输出交叉验证准确率
print(f'Cross-Validation Accuracy Scores: {scores}')
print(f'Average Cross-Validation Accuracy: {scores.mean()}')#集成模型
predictions1 = model1.predict_proba(X_1)  # 模型1的预测概率
predictions2 = model2.predict_proba(X_2)  # 模型2的预测概率# 集成两个模型的预测概率,这里以平均值为例
#0.8 1.2
ensemble_predictions = (0.5*predictions1 + 1.5*predictions2) / 2

2b)请探索患者水肿体积随时间进展模式的个体差异,构建不同人群(分亚组:3-5个)的水肿体积随时间进展曲线,并计算前100个患者(sub001至sub100)真实值和曲线间的残差。

这道题我的理解是,每个患者的水肿体积随时间的变化可以绘制一条曲线,对这些曲线做聚类,得到几类不同的变化模式。然后分别统计每类变化模式的人群的特点,比如年龄,是否患高血压。

首先是曲线的绘制,横轴是时间,纵轴的水肿的体积。我们需要根据每位患者的几次检查的时间和体积,绘制曲线。由于每个患者的变化情况都不同,所以如果要用时间序列拟合曲线的话,需要分别对100个患者确定做一百次平稳性检验,确定一百个不同的ARIMA参数,所以放弃了这个思路。我选择直接用多项式做拟合。由于从第一问绘制的图可以看出,大多数曲线都呈现上升后下降的变化趋势,加上数据点只有几个,所以选择的多项式的阶数为2。最终用二阶多项式对100个患者绘制的曲线如下:

对曲线聚类是这道题的难点,因为患者做随访检查的次数,时间都不同。我们需要同一时间跨度后在进行聚类。最开始的想法是,对每条曲线都等间隔取若干点,用这些点代表曲线,送入kmeans做聚类。但是效果不怎么好,95个点都被分为了同一类。

第二天早上,我睡醒之后思考,效果不好的原因在于,只用50个点,并不能很好的代表二次曲线。对于每条二次曲线,我最关注的点有两个:一是曲线最后的趋势是上升还是下降,因为这决定了患者最后的情况是恶化还是好转;而是,在患者最后恶化或者好转的趋势前,是否还有其他趋势,比如先好转再恶化,或者先恶化再好转。而这两个点正好分别由二次曲线的a(开口方向和大小)和对称轴-b/2a(单调性变化的位置是大于0还是小于0)决定。所以最后是使用(a,-b/2a)代表每条曲线,聚类的效果优于前一种方式。

2d)请分析血肿体积、水肿体积及治疗方法(“表1”字段Q至W)三者之间的关系。

首先统计发现每次检查的血肿体积和水肿体积都近似正态分布,所以计算了两者的皮尔逊相关系数。其次使用血肿体积和水肿体积预测治疗方法,发现能够较为准确的预测,说明三者具有相关性。

3b)根据前100个患者(sub001至sub100)所有已知临床、治疗(表1字段E到W)、表2及表3的影像(首次+随访)结果,预测所有含随访影像检查的患者(sub001至sub100,sub131至sub160)90天mRS评分。

3b和3a的差别在于,补充了随访数据。虽然只是补充了随访数据,但是每次随访都包含了将近100个特征,所以如何使用正确的方式降维是这个问的重点。由于随访数据是一个时间序列,所以如果直接把所有数据拼接起来的话会损失时间信息。假设每次随访有100个特征,如果直接把所有特征直接拼接起来的话,其实第一列和第一百零一列是同一个特征在不同时间点的取值,而直接拼接会损失这个信息。所以我一开始的想法是,对于每个患者的三次随访数据,竖着拼接起来。每个患者的数据原本是1*300,我把第一列,第一百零一列,第二百零一列的数据竖着拼在一列,把每个患者的数据变成[3*100]的格式。但是由于没有找到适合二维数据的降维方法,所以这个思路失败了。


结果出来了,是二等奖,也算给三天四晚的付出一个不错的回答吧,

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库清理Relay_Log_File日志

背景 “Relay_Log_File” 是 MySQL 中用于复制的参数之一。在 MySQL 复制中&#xff0c;当一个服务器作为主服务器&#xff08;master&#xff09;时&#xff0c;它会将其更改写入二进制日志文件&#xff08;binary log file&#xff09;。而另一个服务器作为从服务器&#xf…

买台灯看什么参数?考公必备护眼台灯推荐

说到台灯相信大家都不陌生&#xff0c;不管是平时间休闲看书、办公&#xff0c;还是孩子学习阅读时都会用的上。不过台灯还是不能随便乱买的&#xff0c;因为如果买的台灯品质不合格&#xff0c;光源质量太差&#xff0c;使用久了还会对眼睛带来不好的影响。 所以我们在挑选台灯…

flutter下拉列表

下拉列表 内容和下拉列表的标题均可滑动 Expanded&#xff1a; 内容限制组件&#xff0c;将其子类中的无限扩展的界面限制在一定范围中。在此使用&#xff0c;是为了防止下拉列表中的内容超过了屏幕限制。 SingleChildScrollView&#xff1a; 这个组件&#xff0c;从名字中可…

idea查看UML类图

idea查看UML类图 一、如何查看UML类图 1.1 选择需要查看的类或者包&#xff0c;鼠标右键&#xff0c;选择Diagrams->Show Diagram 1.2 对于UML类图中的包&#xff0c;选中后点击鼠标右键-> Expand Nodes(展开节点) 展开前 展开后 1.3 展开后分布比较凌乱&#xff…

北大腾讯打造多模态15边形战士!语言作“纽带”,拳打脚踢各模态,超越Imagebind

AI4Happiness 投稿 量子位 | 公众号 QbitAI 北大联合腾讯打造了一个多模态15边形战士&#xff01; 以语言为中心&#xff0c;“拳打脚踢”视频、音频、深度、红外理解等各模态。 具体来说&#xff0c;研究人员提出了一个叫做LanguageBind的多模态预训练框架。 用语言作为与其…

手写LASSO回归python实现

import numpy as np from matplotlib.font_manager import FontProperties from sklearn.datasets import make_regression from sklearn.model_selection import train_test_split import matplotlib.pyplot as pltclass Lasso():def __init__(self):pass# 数据准备def prepar…

Hoppscotch:开源 API 开发工具,快捷实用 | 开源日报 No.77

hoppscotch/hoppscotch Stars: 56.1k License: MIT Hoppscotch 是一个开源的 API 开发生态系统&#xff0c;主要功能包括发送请求和获取实时响应。该项目具有以下核心优势&#xff1a; 轻量级&#xff1a;采用简约的 UI 设计。快速&#xff1a;实时发送请求并获得响应。支持多…

Servlet 常见的API

文章目录 写在前面Smart Tomcat 插件Servlet 中常见的API1. HttpServletinit 方法destroy 方法service 方法Servlet 的生命周期 使用 postman 构造请求使用 ajax 构造请求2. HttpServletRequest3. 前端给后端传参1). GET, query string2). POST, form3). json 4. HttpServletRe…

JWT登录认证(2认证)

备注说明&#xff1a; 用户登录成功后&#xff0c;系统会自动下发JWT令牌&#xff0c;然后在后续的每次请求中&#xff0c;浏览器都需要在请求头header中携带到服务器&#xff0c;请求头的名称为Authorization&#xff0c;值为登录时下发的JWT令牌。 如果检测到用户未登录&…

通过右键用WebStorm、Idea打开某个文件夹或者在某一文件夹下右键打开当前文件夹用上述两个应用

通过右键用WebStorm、Idea打开某个文件夹或者在某一文件夹下右键打开当前文件夹用上述两个应用 通过右键点击某个文件夹用Idea打开 首先打开注册表 win R 输入 regedit 然后找到HKEY_CLASSES_ROOT\Directory\shell 然后右键shell 新建一个项名字就叫 Idea 第一步&#xf…

社区论坛小程序源码系统,功能齐全,页面简洁,前端+后端+完整部署教程

现如今&#xff0c;社区论坛已经成为人们交流思想&#xff0c;分享经验&#xff0c;获取信息的重要平台。近年来&#xff0c;小程序的出现更是改变了传统的网站建设方式&#xff0c;让用户体验更加便捷&#xff0c;高效。今天源码小编来和大家分享一款社区论坛小程序源码系统&a…

蓝桥杯每日一题2023.11.13

题目描述 蓝桥杯大赛历届真题 - C 语言 B 组 - 蓝桥云课 (lanqiao.cn) 题目分析 由于每次吹灭的蜡烛与年龄相同故我们想到使用前缀和可以让我们求出各个区间的和&#xff0c;我们将每个区间都枚举一遍&#xff0c;如果符合要求就输出区间开始的位置&#xff08;答案&#xff…

JVM——类加载器(JDK8及之前,双亲委派机制)

目录 1.类加载器的分类1.实现方式分类1.虚拟机底层实现2.JDK中默认提供或者自定义 2.类加载器的分类-启动类加载器3.类加载器的分类-Java中的默认类加载器4.类加载器的分类-扩展类加载器5.类加载器的分类-类加载器的继承 2.类加载器的双亲委派机制 类加载器&#xff08;ClassLo…

Page分页records有数据,但是total=0,解决办法

Page分页records有数据&#xff0c;但是total0&#xff0c;解决办法 问题&#xff1a;程序运行起来后&#xff0c;后端接收前端传来的搜索请求信息正常&#xff0c;但无法在前端正确反馈信息&#xff0c;通过在后端排查发现total一直等于零&#xff0c;但数据库中有数据&#x…

使用postman测试

第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a;添加请求 第四步&#xff1a;填写请求 代码实现自动关联的位置&#xff1a; 为相关联的接口设置环境&#xff1a; 使用设置的环境变量&#xff1a; 参数化实现测试&#xff1a;测试脚本中仅测试数据不一样&#xff…

postman导入请求到jmeter进行简单压测,开发同学一学就会

背景# 这个事情也是最近做的&#xff0c;因为线上nginx被我换成了openresty&#xff0c;然后接入层服务也做了较大改动&#xff0c;虽然我们这个app&#xff08;内部办公类&#xff09;并发不算高&#xff0c;但好歹还是压测一下&#xff0c;上线时心里也稳一点。 于是用jmet…

CTFhub-RCE-过滤空格

1. 查看当前目录&#xff1a;127.0.0.1|ls 2. 查看 flag_890277429145.php 127.0.0.1|cat flag_890277429145.php 根据题目可以知道空格被过滤掉了 3.空格可以用以下字符代替&#xff1a; < 、>、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS等 $IFS在li…

Workplace Search 的演变:使用 Elasticsearch 搜索你的私人数据

作者&#xff1a;Dana Juratoni, Aditya Tripathi Workplace Search 功能将来将与 Elastic Search 合并。 这是你需要了解的内容。 生成式人工智能技术的最新进展为搜索带来了一系列可能性。 随着开发人员构建新的体验&#xff0c;用户正在采用新的搜索使用方式 —— 从用自然…

基于SSM的员工信息管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

大厂必备的6款React UI框架

优秀的ReactUI框架可以为您节省开发时间&#xff0c;提高开发效率&#xff0c;统一设计语言。你还在为你的项目寻找高质量的ReactUI框架吗&#xff1f;为了让您更容易找到易于使用的UI框架&#xff0c;分享6个优秀的ReactUI框架选项&#xff0c;并介绍了每个UI框架的不同功能和…