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.mzph.cn/news/88116.shtml

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

相关文章

python基础语法

目录 常量和表达式 变量和类型 1.整数int 2.小数float 3.字符串string 4.布尔类型bool 5.动态类型 注释 输入输出 输出 输入 运算符 算术运算符 关系运算符 逻辑运算符 赋值运算符 python和C、Java语法区别 创建一个python项目 常量和表达式 在python中&…

String的增删查【C++】

String的增删查【C】 前言string的增删查改构造与析构构造string(const char* str "")赋值构造string(const string& s1) 赋值重载析构函数增reservepush_backappendinsert 删erase 查迭代器流插入流提取流插入流提取 前言 从这里开始可以算是进入了STL的学习中…

CRM客户管理系统英文专业版

外资公司日常沟通的语言以英文为主,业务往来也是涉及到国内外,专业的英文版CRM系统很适合这样的业务团队,尤其CRM供应商是国际化企业,在海外也有分公司、办事处。 多语言 ZOHO支持多语种如英语、汉语、日语等28种语言&#xff0…

MySQL基础篇-函数

目录 1.字符串函数 2.数值函数 3.日期函数 4.流程函数 5.小结 在MySQL中,函数是一种数据库对象,用于执行特定的操作或计算,并返回结果。函数通常用于查询、数据处理和转换,以及在SQL语句中执行其他操作。MySQL提供了许多内置函…

linux驱动之input子系统简述

文章目录 一、什么是input子系统二、内核代码三、代码分析 一、什么是input子系统 Input驱动程序是linux输入设备的驱动程序,我们最常见的就按键,触摸,插拔耳机这些。其中事件设备驱动程序是目前通用的驱动程序,可支持键盘、鼠标…

C++ -- IO流

目录 C语言的输入与输出 CIO流 C标准IO流 C文件IO流 文件常见的打开方式如下 以二进制的形式操作文件 以文本的形式操作文件 读写结构体 stringstream的简单介绍 C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输…

零基础学空手道_3_空手道的站姿(上)

欢迎回来一起学习刚柔流空手道。 讲一些比较严肃的内容,就是礼仪和站姿。 空手道一开始不是要学习怎么打,而是要学习怎么去尊重别人和不打。所以礼仪很重要。 一切事情都是以礼仪开始,以礼仪结束。这叫以理始以理终。 空手道也是这样&#xf…

MySQL - DML数据增删改

功能介绍: DML(Data Manipulation Language)数据操作语言,用来对数据库中表的数据记录进 行增、删、改操作。 添加数据(INSERT) 基本语法:insert into 表名(字段列表) values (值列表); …

【问题解决】Android Studio 无法连接手机(荣耀90)无法识别手机usb

问题描述: 使用AS调试的时候遇到一个问题,由于是重装后的电脑,什么都没配置,但是两个旧手机都在安装SDK tools里的Google usb driver后直接连上AS,而我的新手机却死活连不上,查了一下午,啥方法都…

Redis原理(一):Redis数据结构(上)

文章目录 1、 Redis数据结构-动态字符串2、 Redis数据结构-intset3、 Redis数据结构-Dict4、 Redis数据结构-ZipList5、 Redis数据结构-ZipList的连锁更新问题6、 Redis数据结构-QuickList1、 Redis数据结构-动态字符串 我们都知道Redis中保存的Key是字符串,value往往是字符串…

MongoDB(二)基础操作 创建、删除,查询等

mongodb有一个特点,如果某个库,库下面没数据(mongodb成集合),该库等于不存在的 mongodb只要创建一个库,在库下写入数据,该库才会生成 mongoshe [-hhost -pxxx] 创建数据库 use 数据库名 # 如果…

c语言常见字符函数、内存函数(详讲)

前言: 其实在c语言当中是没有字符串这一概念的,不像c里面有string类型用来存放字符串。在c语言中我们只能把字符串放在字符串常量以及字符数组中。 1.常见字符串函数 1.1strlen size_t strlen ( const char * str );作用:用来求字符串中 …

人工智能的未来:从 Jetson 到 GPT,沙龙见闻与洞察

前言 在当今数字化时代,人工智能正以惊人的速度改变着我们的生活和工作方式。从智能语音助手到自动驾驶汽车,从智能家居到医疗诊断,人工智能技术已经广泛渗透到各个行业,并为其带来了巨大的变革和创新。越来越多的行业专家、学者…

postman发送图片

POSTMAN 如何发送携带图片的请求? 闲话不叙 步骤如下: 新建一个请求,在Headers中添加一对k-v : Content-Type > multipart/form-data 请求的接口: RequestMapping("/fileUploadController")public String fileUpload(MultipartFile fil…

【C++】构造函数和析构函数第一部分(构造函数和析构函数的作用)--- 2023.9.25

目录 前言初始化和清理的概念构造函数和析构函数的作用构造函数的作用析构函数的作用 使用构造函数和析构函数的注意事项默认的构造函数和析构函数结束语 前言 在使用c语言开发的项目场景中,我们往往会遇到申请空间的需求,同时也肯定遇到过程序运行一段…

积跬步致千里 || 可视化动图展示

可视化动图展示 目前只能在 jupyter notebook 中测试成功 %matplotlib notebook import numpy as np import matplotlib.pyplot as plt import timen 500 data np.random.normal(0,1,n)fig plt.figure() ax fig.add_subplot(111)fig.show() fig.canvas.draw()for i in ra…

什么是Redux?它的核心概念有哪些?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是Redux?⭐ 它的核心概念有哪些?⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发…

C++——模板

目录 泛型编程 函数模板 函数模板概念 函数模板格式 类模板 类模板的定义格式 类模板的实例化 泛型编程 泛型编程是什么呢?泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。型就是类型,不…

【Java】医院智能导诊小程序源码,springboot框架

智能导诊 可以根据用户症状描述精准推荐科室及医生智能学习医院历史数据及自动进行科室对照,与医院的系统连接后,患者可直接完成预约。 一、系统概述 “智能导诊”以人工智能手段为依托,为人们提供智能分诊、问病信息等服务,在一定程度上满足了人们自我…

低照度增强算法(图像增强+目标检测+代码)

本文介绍 在增强低光图像时,许多深度学习算法基于Retinex理论。然而,Retinex模型并没有考虑到暗部隐藏的损坏或者由光照过程引入的影响。此外,这些方法通常需要繁琐的多阶段训练流程,并依赖于卷积神经网络,在捕捉长距…