【Survival Analysis】【机器学习】【1】

news2025/4/18 6:39:22

前言:

       今年在做的一个博士课题项目,主要是利用病人的数据,训练出一个AI模型,做因果分析,

以及个性化治疗。自己一直是做通讯+AI方向的,这个系列主要参考卡梅隆大学的教程,以及临床医生的角度 了解一下医学领域的相关背景,

       参考 卡梅隆大学的 George 的【  Predicting Time-to-Event Outcomes - A Tour of Survival Analysis from Classical to Modern】


目录:

  1. Survail Aanalysis 简介
  2. 生存分析基本问题框架
  3. 传统回归模型解决此类问题

一  Survial Analysis 简介

       预测事件发生时间,主要包括下面几类:

1: 死亡时间(本篇只讨论这个)
2: 疾病复发时间
3: 出院时间
4: 病情再次复发时间
5: 用户退订服务时间

Predicting time-to-event outcomes:

• Time until death Phrase terminology using this example

• Time until disease relapse

• Time until hospital discharge

• Time until a convicted criminal reoffends

• Time until a user unsubscribes from a service

本教程主要讨论下面几个事:

  1. 生存分析基本问题框架

  2. 经典估计方法与预测误差评估

  3. 机器学习界神经网络新进展

  4. 开放挑战与未来方向


 二  生存分析基本问题框架

     2.1 数据集说明

          

feaures中文翻译
Gluten allergy麸质过敏
Immuno suppressant免疫抑制剂
Low resting heart rate静息心率过低
Irregular heart beat心律不齐
High BMI高身体质量指数

   ​​​​​​在预测病人生存期时候,通长会遇到病人还是活着的情况,这个时候6天要用大于等于6来替代

2.2  持续时间预测专用回归模型:

      它的数据集标签跟一般的机器学习模型不一样,有两个:

      标签1: 生存时间y

      标签2: 死亡状态状态\delta

2.3  例子

     活着的例子

     

     死亡的例子

2.4  生存曲线

         生存曲线(Survival Curves)是生存分析(Survival Analysis)中的核心可视化工具,用于描述特定群体随时间推移的生存(或事件未发生)概率。以下是结构化解读:

基本定义

  • 数学表达: S(t) = P(T > t)
    表示个体存活时间T超过时间点t的概率,其中t≥0

  • 典型类型:

    • Kaplan-Meier曲线 (非参数估计,临床研究最常用)

    • Nelson-Aalen曲线 (累积风险函数估计)

    • 参数模型曲线 (如指数分布/威布尔分布拟合)

2.4  生存曲线解读

正向事件 vs 负向事件

场景示例时间延长含义应用领域典型场景
Time until death
(死亡时间)
"优"(生存期越长越好)癌症治疗评估、慢性病预后分析
Hospital length of stay
(住院时长)
"劣"(时间越长越差)医疗资源优化、医院运营效率评估

 在给定的特征向量, 我们希望了解生存函数  p(t|x)

       

2.5 理论基础 (Remarks on Theory)

           总体而言,我们无法对所有时间点都任意精确地估计条件生存函数S(t | x)(即使在训练数据中,也存在最大观测时间!)。

      典型的假设是:专注于在某个时间范围内估计S(t | x)
     • 删失机制和删失率至关重要!当删失率较高时(例如40%以上),生存估计器的效果会显著下降 →预测硬盘故障时间、音乐人签约唱片公司时间等任务会变得非常困难


三  传统Linear regression 问题

     预测回归模型,我们常用的是Linear Regression ,但是这里面存在一个问题。

当人是活着的,其生存时间是大于记录的时间。这个跟其它任务是不一样的。

     针对该任务的特殊性,在模型的方向,自己也想到了一个创新的点,目前代码刚刚写完,预计本周会把结果做出来。

 这边要感谢印度的 Mrutyunjaya Hiremath,做了回复

  • Master of Technology
  • Researcher at REVA University

   You’re bringing up a very important issue. Predicting how long a patient will survive differs greatly from typical machine learning tasks like image recognition or binary classification. You’re right that using linear or logistic regression isn’t enough—these models don’t work well when survival time and censored data (patients still alive) are involved.

Better Models for Your Task

Since this is a survival prediction problem, here are some models that are more suitable and still offer good interpretability:

  1. Cox Proportional Hazards (CoxPH)
  • A widely used model in medicine.
  • It gives clear results like hazard ratios, which doctors can understand.
  • Available in Python (lifelines) and R (survival).
  1. Random Survival Forests (RSF)
    • A tree-based model that handles complex data and works well with censored information.
    • You can still interpret which features are most important.
  2. DeepSurv
    • A deep learning version of CoxPH that can capture more complex patterns.
    • It is still interpretable using tools like SHAP.
    • Paper link :

      Article Deep Survival: A Deep Cox Proportional Hazards Network

    • Code link : https://github.com/jaredleekatzman/DeepSurv
  3. Multi-task Logistic Regression (MTLR)
    • Models survival over different time points.
    • More flexible than Cox in some situations.

Better Metrics to Evaluate the Model

Standard metrics like AUC, R², or MSE are not the best fit for survival tasks. Instead, try these:

  • C-index (Concordance Index): Checks how well the model ranks patients by survival time.
  • Time-dependent AUC: AUC score that changes with time.
  • Brier Score and Integrated Brier Score: Measure the accuracy of the model’s probability predictions over time.

These are made specifically for survival models and take censored data into account.

Try Some Early Plots

Before training models, you could try plotting Kaplan-Meier survival curves for groups like GCB vs. ABC or high vs. low KPS score. This can help show which features matter early on.

Useful Tools

  • Python: scikit-survival, lifelines
  • R: survival, survminer, randomForestSRC
  • Deep Learning: DeepSurv GitHub link: https://github.com/jaredleekatzman/DeepSurv

Final Thoughts

In clinical settings, having a model that doctors can trust and understand is just as important as accuracy. You’ve raised a great question that applies to many medical AI projects.

教程: https://sites.google.com/view/survival-analysis-tutorial

代码: https://github.com/georgehc/dksa


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

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

相关文章

JavaScript---原型和原型链

目录 一、引用类型皆为对象 二、原型和原型链是什么 三、__proto__与prototype 总结 四、原型链顶层 五、constructor 六、函数对象的原型链 一、引用类型皆为对象 原型和原型链都是来源于对象而服务于对象: JavaScript中一切引用类型都是对象,…

离散数学问题集--问题5.9

问题 5.9 综合了计算机组成原理、数字逻辑和离散数学中的关键概念,旨在帮助学生理解二进制算术运算的硬件实现、逻辑门与算术运算的关系,以及如何使用数学方法来验证数字系统的正确性。它强调了从规范到实现再到验证的完整过程。 思想 函数抽象&#xf…

Java—HTML:CSS选择器

今天我要介绍的知识点内容是Java HTML中的CSS选择器; CSS选择器用于定位HTML元素并为其添加样式。它允许我们控制网页的颜色、字体、布局和其他视觉元素。通过分离内容与样式。 下面我将介绍CSS中选择器的使用,并作举例说明; 选择器基本语…

SSM阶段性总结

0 Pojo类 前端给后端:DTO 后端给前端:VO 数据库:PO/VO 业务处理逻辑:BO 统称pojo 1 代理模式 实现静态代理: 1定义接口2实现类3写一个静态代理类4这样在调用时就可以使用这个静态代理类来实现某些功能 实现动态代…

Qt 5.14.2入门(一)写个Hello Qt!程序

目录 参考链接:一、新建项目二、直接运行三、修改代码增加窗口内容1、Qt 显示一个 QLabel 标签控件窗口2、添加按键 参考链接: Qt5教程(一):Hello World 程序 Qt 编程指南 一、新建项目 1、新建一个项目&#xff08…

Jmeter分布式测试启动

代理客户端配置 打开jmeter.properties文件,取消注释并设置端口(如server_port1099), 并添加server.rmi.ssl.disabletrue禁用SSL加密。 (Linux系统)修改jmeter-server文件中的RMI_HOST_DEF为代理机实际IP。…

redis itheima

缓存问题 核心是如何避免大量请求到达数据库 缓存穿透 既不存在于 redis,也不存在于 mysql 的key,被重复请求 public Result queryById(Long id) {String key CACHE_SHOP_KEYid;// 1. redis & mysqlString shopJson stringRedisTemplate.opsFo…

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)

文章目录 1、问题描述2、问题推测3、解决方法3.1 selenium自动启动浏览器3.2 selenium接管已启动的浏览器3.3 区别总结 4、代码实战4.1 手动方法(手动打开浏览器输入账号密码)4.2 自动方法(.bat文件启动的浏览器) 1、问题描述 使用…

MPP 架构解析:原理、核心优势与对比指南

一、引言:大数据时代的数据处理挑战 全球数据量正以指数级增长。据 Statista 统计,2010 年全球数据量仅 2ZB,2025 年预计达 175ZB。企业面临的核心挑战已从“如何存储数据”转向“如何快速分析数据”。传统架构在处理海量数据时暴露明显瓶颈…

Python设计模式-工厂模式

一、模式定义与核心思想 工厂模式(Factory Pattern)属于创建型设计模式,其核心思想是通过一个"工厂类"来创建对象,而不是直接调用类的构造函数。这种模式将对象的实例化过程封装起来,使系统在实例化对象时能…

彻底解决VS2008编译错误:fatal error C1083 无法打开包括文件“stdint.h“

彻底解决VS2008编译错误:fatal error C1083 无法打开包括文件"stdint.h" 一、错误现象与本质原因 当在Visual Studio 2008中编译包含C99标准整数类型(如int8_t、uint32_t)的代码时,常出现以下编译错误: f…

react从零开始的基础课

全文约5万字。 1.hello,.. // App.jsx import { useState } from react import reactLogo from ./assets/react.svg import viteLogo from /vite.svg import ./App.cssfunction App() {const [count, setCount] useState(0)return (<><Greeting name"world&qu…

算法题型讲解

一.双指针 主要分为俩种类型&#xff1a; 1.左右指针&#xff1a;双指针指向开头&#xff0c;以一定标准移动或交换&#xff0c;对区域进行划分&#xff0c;或找到特殊点的位置 &#xff08;如&#xff1a;快慢指针判断有无环&#xff0c;移动零&#xff09; 2.对撞指针&am…

Redis和数据库一致性问题

操作模拟 1、先更新数据库还是先更新缓存&#xff1f; 1.1先更新缓存&#xff0c;再更新数据库 按并发的角度来说&#xff0c;有两个线程A、B&#xff0c;操作同一个数据&#xff0c;线程A先更新缓存为1&#xff0c;在线程A更新数据库之前&#xff0c;这时候线程B进来&#…

第R8周:RNN实现阿尔茨海默病诊断(pytorch)

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营]中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊]** 本人往期文章可查阅&#xff1a; 深度学习总结 一、准备工作 &#x1f3e1; 我的环境&#xff1a; 语言环境&#xff1a;Python3.1…

C++基础精讲-02

文章目录 1.C/C申请、释放堆空间的方式对比1.1C语言申请、释放堆空间1.2C申请、释放堆空间1.2.1 new表达式申请数组空间 1.3回收空间时的注意事项1.4malloc/free 和 new/delete 的区别 2.引用2.1 引用的概念2.2 引用的本质2.3 引用与指针的联系与区别2.4 引用的使用场景2.4.1 引…

【网络安全】Linux 命令大全

未经许可,不得转载。 文章目录 前言正文文件管理文档编辑文件传输磁盘管理磁盘维护网络通讯系统管理系统设置备份压缩设备管理其它命令前言 在网络安全工作中,熟练掌握 Linux 系统中的常用命令对于日常运维、日志分析和安全排查等任务至关重要。 以下是常用命令的整理汇总,…

C++学习之ORACLE①

目录 1.ORACLE数据库简介 2..ORACLE数据库安装 3..ORACLE体系结构 4..ORACLE基本概念 5..ORACLE基本元素 6..ORACLE数据库启动和关闭 7.SQLPLUS登录ORACLE数据库相关操作 8.SQLPLUS的基本操作 9.oracle中上课使用的方案 10.SQL语言分类 11.SQL中的select语句语法和注…

企业级开发SpringBoost玩转Elasticsearch

案例 Spring Boot 提供了 spring-data-elasticsearch 模块&#xff0c;可以方便地集成 Elasticsearch。 下面我们将详细讲解如何在 Spring Boot 中使用 Elasticsearch 8&#xff0c;并提供示例代码。 1. 添加依赖: 首先&#xff0c;需要在 pom.xml 文件中添加 spring-data-e…

从零开始的图论讲解(1)——图的概念,图的存储,图的遍历与图的拓扑排序

目录 前言 图的概念 1. 顶点和边 2. 图的分类 3. 图的基本性质 图的存储 邻接矩阵存图 邻接表存图 图的基本遍历 拓扑排序 拓扑排序是如何写的呢? 1. 统计每个节点的入度 2. 构建邻接表 3. 将所有入度为 0 的节点加入队列 4. 不断弹出队头节点&#xff0c;更新其…