基于机器学习的 ICU 脑血管疾病死亡风险智能预测系统

news2024/11/24 14:55:32

温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :)

1. 项目简介

        重症患者或重大手术后的患者在重症监护室(ICU)内通过多种生命支持系统以维持生理功能。患者在ICU 内会被频繁持续的记录生命体征和实验室测量等多种数据。由于高频次的数据采集,数十年来ICU 内已经形成了一个巨大的临床医疗数据信息库,这俨然是一种重要的、可被利用的医疗资源。

        本系统通过构建决策树机器学习算法,可根据ICU中脑血管疾病患者的实时17项生理参数的输入来实时预测患者的死亡风险,预测结果为0代表无风险,结果为1代表有风险。利用Pandas、Numpy、Matplotlib 和 Seaborn 等工具包对脑血管数据进行多维度的可视化分析。最后,利用 Flask + Bootstrap + Echarts 框架搭建 Web 系统,通过上传最新 ICU脑血管监测数据,实时预测患者的死亡风险。

2. 数据探索式分析

2.1 数据缺失值分析

def contains_null(dataframe):
    """数据缺失值分析"""
    missing_df = dataframe.isnull().sum(axis=0).reset_index()
    missing_df.columns = ['column_name', 'missing_count']
    missing_df['missing_rate'] = 1.0 * missing_df['missing_count'] / dataframe.shape[0]
    missing_df = missing_df[missing_df.missing_count > 0]
    missing_df = missing_df.sort_values(by='missing_count', ascending=False)
    return missing_df

        可以看出,原始数据集存在大量的缺失,将缺失率超过 80% 的特征进行剔除。剩下的数值类型的缺失值,利用相应特征的平均值进行填充。

2.2 模型训练数据集构造

        通过对原始数据集进行标签化处理,构造机器学习模型训练所需要的训练集:

from tqdm import tqdm

def create_dataset(df, is_test=False):
    train_x = []
    train_y = []
    for i, row in tqdm(df.iterrows(), total=df.shape[0]):
        f = row['stay']
        
        if is_test:
            data = pd.read_csv('./data/test/' + f)
        else:
            data = pd.read_csv('./data/train/' + f)
        # 数据预处理
        data = data.drop(['Capillary refill rate', 'Height', 'Fraction inspired oxygen', 'Weight', 'pH',
           'Glucose', 'Temperature', 'Glascow coma scale total', 'Glascow coma scale verbal response',
          'Glascow coma scale eye opening'], axis=1)
        # 删除类别类型的特征
        del data['Glascow coma scale motor response']
        # 缺失值填充
        col_mean = dict(data.mean())
        for key in data.columns:
            data[key].fillna(col_mean[key], inplace=True)
        
        # 特征工程核心函数
        features = feature_engineering(data)
        
        train_x.append(features)
        train_y.append(row['y_true'])
    
    # 创建 dataframe 表格
    train_x = ......
    
    return train_x, train_y

2.3 训练集、验证集和测试集的标签分布

plt.figure(figsize=(20, 5))
plt.subplot(131)
sns.countplot(train_x['label'])
plt.title('训练集ICU脑血管疾病死亡风险分布', fontsize=16, weight='bold')

plt.subplot(132)
sns.countplot(valid_x['label'])
plt.title('验证集ICU脑血管疾病死亡风险分布', fontsize=16, weight='bold')

plt.subplot(133)
sns.countplot(test_x['label'])
plt.title('测试集ICU脑血管疾病死亡风险分布', fontsize=16, weight='bold')
plt.show()

2.4 Xgboost 决策树模型构建与训练

        ICU 脑血管疾病死亡风险预测为典型的二分类问题,以此目标函数选择 `binary:logistic`,验证指标选择 AUC 指标:

import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import auc, roc_curve
from sklearn.metrics import accuracy_score, precision_score, recall_score

def evaluate_score(predict, y_true):
    false_positive_rate, true_positive_rate, thresholds = roc_curve(y_true, predict, pos_label=1)
    auc_score = auc(false_positive_rate, true_positive_rate)
    return auc_score

dtrain = xgb.DMatrix(train_x, train_y, feature_names=feature_names)
dvalid = xgb.DMatrix(valid_x, valid_y, feature_names=feature_names)
dtest = xgb.DMatrix(test_x, test_y, feature_names=feature_names)

watchlist = [(dtrain, 'train'), (dvalid, 'valid')]

xgb_params = {
    'eta': 0.05,
    'colsample_bytree': 0.1,
    'max_depth': 6,
    'subsample': 0.1,
    'lambda': 1,
    'scale_pos_weight': 1,
    'eval_metric': 'auc',
    'objective': 'binary:logistic',
    'nthread': -1,
    'silent': 1,
    'booster': 'gbtree'
}
model = xgb.train(dict(xgb_params),
                  dtrain,
                  evals=watchlist,
                  verbose_eval=1,
                  early_stopping_rounds=10,
                  num_boost_round=5)

        模型训练日志如下:

[0]	train-auc:0.785276	valid-auc:0.785276
Multiple eval metrics have been passed: 'valid-auc' will be used for early stopping.

Will train until valid-auc hasn't improved in 10 rounds.
[1]	train-auc:0.848569	valid-auc:0.848569
[2]	train-auc:0.897501	valid-auc:0.897501
[3]	train-auc:0.898473	valid-auc:0.898473
[4]	train-auc:0.903983	valid-auc:0.903983

        模型训练完成后,可以看出,训练集和验证集的 AUC 指标可以达到 90% 以上,可以有效预测脑血管疾病的死亡风险。其特征的重要程度分布如下:

2.5 模型预测的 ROC 曲线

from sklearn.metrics import auc, roc_curve

fpr, tpr, _ = roc_curve(valid_y, predict_valid)
roc_auc = auc(fpr, tpr)

plt.figure(figsize=(10,10))
plt.plot(fpr, tpr, color='darkorange',
         lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([-0.02, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC curve')
plt.legend(loc="lower right")
plt.show()

        可以看出,构建的机器学习模型具备很好的预测性能,可以根据用户的历史 Diastolic blood pressure Heart Rate Mean blood pressure Oxygen saturation Respiratory rate Systolic blood pressure 特征,实现脑血管死亡风险预警!

 3. ICU 脑血管疾病死亡风险智能预测系统

        本课题利用 Flask + Bootstrap + Echarts 框架搭建 Web 系统,通过上传最新 ICU脑血管监测数据,绘制主要特征的时序变化情况、模型的性能表现,并实时预测患者的死亡风险的概率值。

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。

技术交流认准下方 CSDN 官方提供的学长 Wechat / QQ 名片 :)

精彩专栏推荐订阅:

1. Python 毕设精品实战案例
2. 自然语言处理 NLP 精品实战案例
3. 计算机视觉 CV 精品实战案例

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

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

相关文章

电大搜题——搜索难题

添加图片注释,不超过 140 字(可选) 广东开放大学是一所素有口碑的知名学府,一直致力于为广大学员提供优质的教育资源和学习支持。随着科技的不断发展,电子学习成为了现代学习的主要方式之一。为了更好地满足学员的学习…

Django(一、简介,安装与使用)

文章目录 一、Django引入1.web应用程序什么是web?web引用程序的优点web应用程序的缺点什么是web框架 2.纯手写web框架1.web框架的本质2.HTTP协议的特性:3.编写基于wsgire模块搭建web框架代码封装优化代码封装 二、Django框架的学习1.Python中的主流框架2…

Kubernetes实战(四)-部署docker harbor私有仓库

1 Docker原生私有仓库Registry 1.1 原生私有仓库Registry概述 Docker的仓库主要分两类: 私有仓库公有仓库 共有仓库只要在官方注册用户,登录即可使用。但对于仓库的使用,企业还是会有自己的专属镜像,所以私有库的搭建也是很有…

基于SSM的婚恋网站的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

前端常用的开发工具有哪些?

目录 内置管理系统的通用场景 前后端代码生成器 权限管控 开放源码 运行性能 主流数据库 写在最后 目前使用的是JNPF框架。 前端采用Vue.js,这是一种流行的前端JavaScript框架,用于构建用户界面。Vue.js具有轻量级、可扩展性强和生态系统丰富等特点&…

成集云 | 企业微信考试+活动抽奖小程序系统 | 解决方案

方案介绍 企业微信考试功能是一种基于企业微信平台的在线考试系统,可以帮助企业进行员工培训、考核、招聘等考试场景。 活动抽奖小程序系统是一种基于互联网技术的应用程序,旨在为用户提供便捷、公平的抽奖体验。它可以帮助商家或平台吸引用户关注和参…

Gorm 中的钩子和回调

一个全面的指南,利用 GORM 中的钩子和回调的力量,为定制的数据库工作流程 在数据库管理领域,定制化是打造高效和定制化工作流程的关键。GORM,这个充满活力的 Go 对象关系映射库,为开发人员提供了钩子和回调的功能&…

机器人伺服驱动控制环

伺服驱动器​的控制环,包括:位置环、速度环、电流环这三种类型。 对于伺服的控制回路,内侧控制环的响应带宽一般会是外侧控制环的5到10倍。也就是说,电流环带宽大致是速度环的5到10倍,速度环带宽则约为位置环的5到10倍…

K8S知识点(七)

(1)实战入门-Namespace kubernets:系统创建的资源在这个命名空间里 ,集群组件资源 kubrnets组件也是以pod的形式运行的 命令行方式操作 查看namespace和详情: 创建和查看和删除: 使用过配置文件操作&am…

Docker 介绍

Docker 介绍 1 介绍1.1 概述1.2 资源高效利用1.3 发展历程1.4 组件1.5 工具1.6 对环境部署和虚拟化的影响1.7 优点1.8 容器技术核心CgroupNamespaceUnionFS 2 命令信息、状态、配置info命令用于显示当前系统信息、docker容器、镜像个数、设置等信息 镜像容器资源 3 安装3.1 版本…

flashAttention是什么

flashAttention是一种attention加速计算的精确算法,它的核心有三点:tiling(分块计算),kernel合并,和重计算。

03运算符综合

03 3.1.1算数运算符 3.1.2赋值运算符 3.1.3比较(关系)运算符 3.1.4逻辑运算符 3.1.5位运算符 3.2运算符的优先级 3.3条件表达式

IP地址冲突解决办法

在计算机网络中,每个设备都需要一个唯一的IP地址来与其他设备进行通信。然而,有时候会出现IP地址冲突的情况即多个设备使用了相同的IP地址。这种冲突会导致网络连接问题,因此需要及时解决。 IP地址查询:IP66_ip归属地在线查询_免费…

Python 数据库应用教程:安装 MySQL 及使用 MySQL Connector

Python可以用于数据库应用程序。 其中最流行的数据库之一是MySQL。 MySQL数据库 为了能够在本教程中尝试代码示例,您应该在计算机上安装MySQL。 您可以在 MySQL官方网站 下载MySQL数据库。 安装MySQL驱动程序 Python需要一个MySQL驱动程序来访问MySQL数据库。…

关于electron打包卡在winCodeSign下载问题

简单粗暴,直接上解决方案: 在你的项目根目录下创建一个.npmrc的文件,且在里面加上以下文本,不用在意这个镜像源是不是最新的,它会自己重定向到nodemirror这个域名里下载 ELECTRON_MIRRORhttps://npm.taobao.org/mirror…

RS练习 - PTE(一)

目录 RS 题目练习 请问大学中的研究员到底处于一个什么样的地位,它的晋升通道是什么样的? 介绍一下莎翁笔下的塞壬 介绍一下绘画当中的至上主义派 介绍一下黑格尔的主仆辩证法 介绍一下巴塔耶的“经济学的终结” 介绍一下愿望驱动的力比多经济&am…

flink的带状态的RichFlatMapFunction函数使用

背景 使用RichFlatMapFunction可以带状态来决定如何对数据流进行转换,而且这种用法非常常见,根据之前遇到过的某个key的状态来决定再次遇到同样的key时要如何进行数据转换,本文就来简单举个例子说明下RichFlatMapFunction的使用方法 RichFl…

一台电脑生成两个ssh,绑定两个GitHub账号

背景 一般一台电脑账号生成一个ssh绑定一个GitHub,即一一对应的关系!我之前有一个账号也配置了ssh,但是我想经营两个GitHub账号,当我用https url clone新账号的仓库时,直接超时。所以想起了配置ssh。于是有了今天这篇…

UG画弹簧模型教程

我们通常做的弹簧大多数都圆柱形的,如果要创建弹簧弯曲的形状也是可以的,这里介绍怎样通过样条曲线做弯曲样式来生成弹簧的技巧。 UG怎么画已经折弯的弹簧模型? 1、先新建一个模型文件,进入草图,绘制一条样条曲线,样…

深入理解指针:【探索指针的高级概念和应用二】

目录 一,数组参数、指针参数 1.一维数组传参 2.二维数组传参 3.一级指针传参 4.二级指针传参 二,函数指针 三,函数指针数组 🍂函数指针数组的用途(转移表): 四,指向函数指针…