2023 “华为杯” 中国研究生数学建模竞赛(E题)深度剖析|数学建模完整代码+建模过程全解全析


在这里插入图片描述

问题一

血肿扩张风险相关因素探索建模

思路:

根据题目要求,首先需要判断每个患者是否发生了血肿扩张事件。根据定义,如果后续检查的血肿体积比首次检查增加≥6 mL或≥33%,则判断为发生了血肿扩张。
具体判断步骤:
(1) 从表1中提取每个患者的入院首次影像检查流水号;

(2) 根据流水号在附表1中查找对应首次检查的时间点;

(3) 计算发病到首次检查的时间间隔;

(4) 在表2中找到每个随访时间点的血肿体积;

(5) 依次计算相邻两次检查血肿体积变化量和变化百分比;

(6) 如果变化量≥6 mL 或变化百分比≥33%,则记为发生血肿扩张,记录下血肿扩张发生的时间点。

3.使用logistic回归建模,以是否发生血肿扩张作为目标变量,个人史、疾病史和首次影像特征作为自变量,建立预测模型。

目标变量: Y = 是否发生血肿扩张(1是,0否)

自变量: X1, X2, …, Xn(个人史、疾病史等)

建模公式: P(Y=1|X) = 1 / (1+e^-(b0+b1X1+…+bnXn))

4.使用训练集拟合logistic回归模型

(1) 将训练集的个人史、疾病史和首次影像特征整理为自变量X

(2) 将训练集的血肿扩张标记(1或0)作为目标变量Y

(3) 将自变量X和目标变量Y喂入logistic回归模型进行拟合

(4) 使用最大似然估计获得变量系数b0, b1, …, bn

(5) 得到拟合后的模型:

P(Y=1|X) = 1 / (1+e^-(b0+b1X1+…+bnXn))

5.用拟合好的模型对测试集进行预测

(1) 对测试集数据进行同样的特征工程,提取自变量X

(2) 将测试集的自变量X代入上面得到的模型中

(3) 计算每个样本的血肿扩张概率P(Y=1|X)

(4) 如果P(Y=1|X) ≥ 0.5,则预测该样本发生了血肿扩张

(5) 计算模型在测试集上的评估指标,如AUC等

(6) 根据变量系数的大小分析变量与血肿扩张的相关性

import pandas as pd
from sklearn.linear_model import LogisticRegression# 读取表1和表2中的数据
table1 = pd.read_excel('表1.xlsx') 
table2 = pd.read_excel('表2.xlsx')# 将表1和表2进行合并
data = pd.merge(table1, table2, on='ID')# 提取需要的特征
features = ['age', 'gender', 'history', ...] # 获得每个患者的首次影像时间和血肿体积
first_scan = data.groupby('ID')['time'].min()
first_volume = data[data['time'] == first_scan]['HM_volume']  

代码主要步骤包括:

读取和合并表格
特征工程
标记目标变量
划分训练集和测试集
模型训练和预测
输出结果
此处我们使用xgboost训练模型:

主要步骤为:

导入xgboost
设置xgboost的参数:
eta:学习率
max_depth:树的最大深度
objective:二分类的逻辑回归
eval_metric:评估指标设为AUC
将训练数据转换为DMatrix格式
使用xgboost训练模型
将测试数据也转为DMatrix格式
用训练好的模型进行预测
输出结果
XGBoost是一个流行且高效的树模型库,可以提取数据的复杂特征关系。

相比逻辑回归,XGBoost可处理各种类型的特征,也便于调参优化模型。

问题二

血肿周围水肿的发生及进展建模,并探索治疗干预和水肿进展的关联关系。

构建水肿体积随时间变化的模型
可以使用 Curve Fitting 的方法,以时间为自变量,水肿体积为目标变量,拟合出水肿体积随时间的曲线模型:

V E D = f ( t ) V_{ED} = f(t) VED=f(t)

其中, V E D V_{ED} VED表示水肿体积, t t t表示时间。

可以试用不同的曲线拟合方法,如线性回归、多项式回归、局部加权回归等。

计算患者真实值与拟合曲线的残差
对第i个样本:

r i = V E D i − f ( t i ) r_i = V_{ED_i} - f(t_i) ri=VEDif(ti)

其中, V E D i V_{ED_i} VEDi为第i个样本的真实水肿体积, f ( t i ) f(t_i) f(ti)为对应时间点上的拟合值。

划分患者亚组,拟合各亚组的水肿体积曲线
可以使用聚类算法如K-means对患者进行分群,然后对每一群体单独拟合曲线。

分析不同治疗对水肿演变的影响
可以将治疗方法作为类别特征,构建不同的曲线模型,然后比较模型效果。

也可以通过统计学方法(如t检验)比较不同治疗组水肿体积变化的差异。

分析三者之间的关系
可以采用相关性分析等统计学方法探索血肿体积、水肿体积和治疗之间的关系。

也可以构建包含三者作为特征的预测模型,通过分析系数等来发现三者之间的关联。
具体来说,相关性分析法
(1) 计算每个样本的血肿体积、水肿体积和各种治疗方式的 0/1 表示

(2) 使用 Pearson 相关系数计算血肿体积和水肿体积的线性相关性

(3) 使用 Spearman 秩相关系数计算血肿体积与各治疗方法的秩相关性

(4) 使用 Spearman 秩相关系数计算水肿体积与各治疗方法的秩相关性

(5) 比较不同系数的大小,分析三者之间的相关程度

建模法
(1) 将血肿体积、水肿体积作为连续特征,治疗方法作为分类特征

(2) 构建回归模型,以水肿体积为目标变量,血肿体积和治疗作为自变量

(3) 训练模型,得到各变量的系数

(4) 比较各治疗类别的系数,看其对水肿体积的影响效果

(5) 通过变量的显著性检验,选择关键的影响因素

(6) 分析模型总体表现,评估各变量的解释能力

import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.cluster import KMeans# 读取数据
data = pd.read_excel('table2.xlsx') # 特征工程:提取时间和水肿体积
X = data[['time']]  
y = data[['ED_volume']]# 构建线性回归模型
lr = LinearRegression()# 训练模型
lr.fit(X, y)# 获取拟合的系数
print('模型Slope:', lr.coef_)  
print('模型Intercept:', lr.intercept_)# 预测水肿体积
y_pred = lr.predict(X) 

​ 问题三

出血性脑卒中患者预后预测及关键因素探索
1.基于首次影像结果预测预后
使用回归模型,以90天mRS评分为目标变量,个人史、疾病史和首次影像特征为自变量:

m R S = w 0 + w 1 x 1 + . . . + w n x n mRS = w_0 + w_1x_1 + ... + w_nx_n mRS=w0+w1x1+...+wnxn

其中, m R S mRS mRS为预后评分, x i x_i xi为各特征, w i w_i wi为对应的权重系数。

可以试用线性回归、LASSO回归等算法。

2.基于全部影像结果预测预后
同上,不仅使用首次影像,还结合后续各时间点的影像特征,构建回归模型进行预测。

3.分析关键影响因素
通过分析各变量的权重 w i w_i wi,确定对 m R S mRS mRS影响最大的特征。
使用统计检验分析不同特征对 m R S mRS mRS的显著影响。
采用则特征选择的方法(如RFE),选择关键特征。
将无关特征删除后,观察模型评分的变化。
具体来说,
1)建模算法的选择
可以尝试线性回归、LASSO回归、GBDT等多种算法
比较不同算法的误差、过拟合情况,选择较优算法
调参优化模型,提升准确率
2)特征工程
处理缺失值:删除/填充
编码类别特征:One-hot 编码
标准化连续特征:去均值和方差归一化
提取时间序列特征:趋势、周期性等
采用 PCA 等方法降维
3)模型评估
划分训练集、验证集、测试集
多次交叉验证,观察方差
计算 RMSE、R2、MAE 等评价指标
绘制学习曲线,检查过拟合问题
4)关键因素分析
计算特征影响力,排序筛选
通过添加/删除特征,比较模型效果变化
使用统计学检验(t-test等)判断显著性
采用正则化方法自动特征筛选
分析特征在不同亚群中的效果

4.提出建议
对具有显著影响的特征,分析临床意义,给出干预建议。
对预后良好和预后不良的患者组,进行对比分析,找出影响因素的差异。
代码:

# 导入需要的库
import pandas as pd
from sklearn.linear_model import Lasso
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt# 读取数据
data = pd.read_csv('data.csv')# 特征工程
X = data[['age', 'gender', 'treatment', 'image_features']]
y = data['mRS']# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=2020)# Lasso回归
model = Lasso()# 使用网格搜索找到最优参数
from sklearn.model_selection import GridSearchCV
params = {'alpha': [0.001, 0.01, 0.1, 1]}
gs = GridSearchCV(model, params, scoring='neg_mean_squared_error', cv=5)
gs.fit(X_train, y_train)
print('最优参数:', gs.best_params_)
model = gs.best_estimator_#见完整版

完整版的思路看看我的回答哈~

(5 封私信 / 2 条消息) 如何评价2023数学建模研赛? - csdn

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

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

相关文章

数据库:Hive转Presto(一)

本人因为工作原因,经常使用hive以及presto,一般是编写hive完成工作,服务器原因,presto会跑的更快一些,所以工作的时候会使用presto验证结果,所以就要频繁hive转presto,为了方便,我用…

蓝牙核心规范(V5.4)10.5-BLE 入门笔记之HCI

HCI全称:HOST Constroller Interface 主机控制器接口(HCI)定义了一个标准化的接口,通过该接口,主机可以向控制器发出命令,并且控制器可以与主机进行通信。规范被分成几个部分,第一部分仅从功能的角度定义接口,不考虑具体的实现机制,而其他部分定义了在使用四种可能的…

记一次springboot的@RequestBody json值注入失败的问题(字段大小写的问题)

有时候做后端开发时,难免会与算法联调接口,很多算法的变量命名时全部大写,在实际springmvc开发中会遇到无法赋值的问题。 先粘贴问题代码 entity类 Data NoArgsConstructor EqualsAndHashCode(callSuper true) ToString(callSuper true) …

十,从摄像机打印立方体的一个外表面

从摄像机是与主摄像机保持同样的投影矩阵,所以,不用单独设置。如果把漫游器还是在(1,0,0)这个位置,各个从摄像机看向上下左右前后六个面,那么会出现什么现象呢?应该是x正轴打印出来,…

LLaMa

文章目录 Problems403 代码文件LLaMA: Open and Efficient Foundation Language Models方法预训练数据结构优化器一些加速的方法 结果Common Sense ReasoningClosed-book Question AnsweringReading ComprehensionMassive Multitask Language Understanding Instruction Finetu…

【实验记录】AGW | Visible-Infrared Re-ID

【RT】Visible Thermal Re-IDDeep Learning for Person Re-identification: A Survey and Outlook中提出了一个针对单/跨模态行人重识别的baseline:AGW 做过两次,在测试阶段有问题,现在再重做一次🤔Code RTX3090 修改数据集路…

【空间-光谱联合注意网络:多时相遥感图像】

A Spatial–Spectral Joint Attention Network for Change Detection in Multispectral Imagery (一种用于多光谱图像变化检测的空间-光谱联合注意网络) 变化检测是通过比较双时相图像来确定和评估变化,这是遥感领域的一项具有挑战性的任务…

c++图像的边缘检测

图像的边缘检测 cv::Canny 是 OpenCV 中用于进行边缘检测的函数,特别是用于检测图像中的边缘。Canny 边缘检测是一种广泛使用的技术,它能够识别图像中的边缘,这些边缘通常表示对象之间的边界或图像中的显著特征 void cv::Canny(const cv::M…

【lesson7】git的介绍及使用

文章目录 什么是gitgit的历史git使用在gitee上创建仓库git clone HTTPS地址git add .git add 文件名git commit “日志”git pushgit loggit rm 文件名git statusgit pull 什么是git git是版本控制器,那么什么是版本控制器呢? 下面讲个故事为大家讲解一…

运算放大器(四):输入偏置电流

一、定义 运放输入级一般由 或 MOSFET 构成,理想情况下,运放的输入端没有电流流入。实际上为保证放大器工作在线性范围,运放的输入端一般设计成基极(栅极)开路,由外电路提供电流的方式,所以需要…

c++-string

文章目录 前言一、STL库介绍二、标准库中的string类1、string类介绍2、string类使用3.1 string类的构造函数3.2 string类对象的容量操作3.3 string类对象的遍历操作3.4 string类对象的访问操作3.5 string类对象的修改操作3.6 string类对象的字符串操作 三、模拟实现string类四、…

Prettier - Code formatter格式化规则文件

文章目录 前言安装使用 前言 先前公司在规范代码时,由于个人业务繁忙跟技术总监是后端出身用的IDEA不熟悉vsCode;以及大多数时都自己一个人负责一个项目,当时并不看重这些;最近在整理vue3tsvite的脚手架模板(平时工作用的react),开始整理格式化代码,方便之后 vue 和 react 中应…

element plus table 拖拽

element plus table 拖拽 sortablejs package.json "sortable.js": "^0.3.0","sortablejs": "^1.14.0", "vuedraggable": "^2.24.3",我的table 是在 el-dialog 里面的 在开发过程中出现过两个问题 1.进入加载 …

【力扣2154】将找到的值乘以 2

👑专栏内容:力扣刷题⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、题目描述二、题目分析 一、题目描述 题目链接:将找到的值乘以 2 给你一个整数数组 nums ,另给…

百度实习一面(知识图谱部门)

百度面经(知识图谱部)一面 1.自我介绍 介绍完了,打开共享,对着简历一点一点问 2.ffmpeg在项目中是怎么使用的 回答了ffmpeg在项目中使用的命令,用来干了什么 3.为什么使用toml配置,了解过yml配置吗&am…

Mock.js之Element-ui搭建首页导航与左侧菜单

🎬 艳艳耶✌️:个人主页 🔥 个人专栏 :《Spring与Mybatis集成整合》《springMvc使用》 ⛺️ 生活的理想,为了不断更新自己 ! 1、Mock.js的使用 1.1.什么是Mock.js Mock.js是一个模拟数据的生成器,用来帮助前…

【前端面试题】2023年 国庆 前端面试真题之JS篇

人的一生,总是难免有浮沉。不会永远如旭日东升,也不会永远痛苦潦倒。反复地一浮一沉,对于一个人来说,正是磨练。因此,浮在上面的,不必骄傲;沉在底下的,更用不着悲观。必须以率直、谦…

Linux内核源码分析 (B.2)深入理解 Linux 物理内存管理

Linux内核源码分析 (B.2)深入理解 Linux 物理内存管理 文章目录 Linux内核源码分析 (B.2)深入理解 Linux 物理内存管理1. 前文回顾2. 从 CPU 角度看物理内存模型2.1 FLATMEM 平坦内存模型2.2 DISCONTIGMEM 非连续内存模型2.3 SPARSEMEM 稀疏内存模型2.3.1 物理内存热插拔 3. 从…

DM8归档管理

开启归档 归档的格式: ARCH_NAME_DB_MAGIC[SEQNO]_日期时间.log ARCH_NAME 是在 dmarch.ini中配置的 LOCAL/REMOTE 归档名称 DB_MAGIC 是生成日志的数据库魔数 SEQNO 代表DSC 节点号,日期时间是归档日志文件的创建时间。 eg:ARCHIVE_LOCAL1_…

解决kali beef启动失败问题及实战

文章目录 一、解决方法二、靶场实战应用1.首先打开dvwa这个靶场,设置难度为low2.打开xss-stored3.准备payload4.提交payload5.利用 一、解决方法 首先需卸载 ruby apt remove ruby 卸载 beef apt remove beef-xss 重新安装ruby apt-get install ruby apt-get insta…