PBXAI:将疾病预测转为沿知识图谱的随机游走

news2024/11/24 0:29:16

PBXAI:将疾病预测转为沿知识图谱的随机游走

    • PBXAI = 知识图谱构建 + 病人特征与知识图谱连接 + 强化学习 + 疾病发展路径的生成
    • PBXAI 流程
    • PBXAI 算法设计

 


论文: https://arxiv.org/ftp/arxiv/papers/2010/2010.08300.pdf

代码:https://github.com/ZJU-BMI/PBXAI

 
在这里插入图片描述
在图中,不同的圆圈代表不同类型的实体:

  • 红色圆圈表示被预测的疾病实体
  • 蓝色圆圈代表患者实体
  • 黑色空心圆圈则是KG中的其他实体。

箭头指示了实体之间的关系,红色箭头表示疾病发展路径,蓝色虚线表示患者实体与知识图谱中实体的连接。

患者实体通过具体的疾病或风险因素与KG中的相关实体相连,然后模型会预测患者可能发展出的疾病以及这些疾病的发展路径。

这些路径是根据强化学习模块的策略生成的,模块由患者的电子健康记录数据训练而来。

图说明如何通过分析患者当前的健康状况和历史数据,预测其未来可能发展的疾病及路径。

基于医学知识的知识图谱,通过模拟患者的健康轨迹预测疾病风险,其中模型学习过程由患者的电子健康记录驱动。

  • 基于经过验证的医学知识构建一个知识图谱来记录疾病和风险因素之间的关系。

  • 然后,一个数学对象沿着知识图谱行走,从一个患者实体开始行走,该实体根据患者当前的疾病或者风险因素连接知识图谱,停止在疾病的实体,数学对象的生成轨迹表示患者的疾病发展路径,对象的行走策略由强化学习模块控制,该模块由电子健康记录数据训练。

 

关键要素

  • 知识图谱(KG): 由实体集(疾病、疾病类别、风险因素等)和关系集构成,表示各种医学概念及其互相之间的关系。
  • 患者实体: 患者的健康数据转化成一个向量,可以链接到KG的相应实体。
  • 强化学习模块: 用于预测疾病的模型,通过随机游走过程模拟患者的疾病进展路径。
  • 状态: 在每个时间步,由患者当前信息和历史路径信息组成。
  • 行动: 状态下可能的转移,例如从一个疾病状态转移到另一个。
  • 奖励: 预测正确时给予的正向反馈,用于指导RL模型学习。

链条梳理

  1. 建立知识图谱: 包含医学实体(如糖尿病)及其相关性(如糖尿病与肥胖的关联)。
  2. 处理患者数据: 将患者的EHR数据分为角色(患者当前的疾病状态)和特征(其他健康指标)。
  3. 预测过程: 利用RL模块,从患者当前的状况出发,模拟在KG中的游走过程,预测患者未来可能发展的疾病。

举例说明(糖尿病)
假设有一个患者现在有高血糖和超重风险,这些通过患者角色向量链接到KG。

  • 在KG中,这些状态与糖尿病有直接的连接。
  • RL模块开始模拟患者未来的病程,探索从当前状态到糖尿病的路径。
  • 如果预测成功(即患者确实发展成糖尿病),模型会收到奖励,这有助于未来更准确的预测。

通过这个过程,可以生成一个患者可能从高血糖和超重状态进展到糖尿病的可解释路径,为医生提供关于病情发展的洞见和潜在的干预点。

PBXAI = 知识图谱构建 + 病人特征与知识图谱连接 + 强化学习 + 疾病发展路径的生成

这个复杂的模型解决的是如何使用医学知识图谱(KG)和病人的电子健康记录(EHR)数据,通过强化学习(RL)来预测疾病发展路径的问题。

子解法1:知识图谱构建

  • 之所以使用知识图谱,是因为它可以存储医学概念之间的关系,例如“冠心病”可能导致“心力衰竭”。

子解法2:病人特征与知识图谱连接

  • 之所以要连接病人特征和知识图谱,是因为这可以直接将病人的实际病情(例如高血压)映射到图谱中的相应实体上。

子解法3:强化学习

  • 之所以用RL模型,是因为它可以控制一个数学对象(代表病人)在知识图谱中的路径,模拟疾病的发展过程。

子解法4:疾病发展路径的生成

  • 之所以要生成疾病发展路径,是因为这提供了一种对疾病预测的直观解释,帮助医生理解模型的决策过程。

举例:假设我们要预测病人是否会发展成糖尿病:

  1. 在知识图谱中,我们已经有了糖尿病及其相关的风险因素和后果。
  2. 我们从病人的EHR中获取其特征(比如血糖水平、体重等),并将这些信息与知识图谱连接。
  3. RL模型通过学习这些数据,开始在图谱中为病人找到可能发展成糖尿病的路径。
  4. 最终,RL模型不仅可以预测病人是否会得糖尿病,还可以展示从当前状况到糖尿病发展的整个过程。

通过这种方法,模型不仅给出了是否会发展成糖尿病的预测结果,而且还能给出一个解释,即病人从现在的健康状况到最终可能发展成糖尿病的具体路径。

这对于医生来说非常有用,因为他们不仅看到了预测结果,还看到了为什么会有这样的预测,从而可以更好地制定治疗计划。
 


PBXAI 流程


这幅图展示的是一种基于知识图谱(KG)和强化学习(RL)的疾病预测模型框架。

这里是它的主要组成部分和步骤:

  1. 知识图谱(KG):展示了一系列相互关联的实体(如疾病、症状、生理特征等),这些通过箭头连接,表示它们之间的关系。每个箭头(如 r1, r2, r3)表示一个实体之间的特定类型的关联。

  2. 病人实体:代表特定病人的节点,通过他们的个性化特征(如年龄、性别、病史等)与知识图谱连接。

  3. 病人数据(EHR):电子健康记录中的病人特征和特征性状被用来在模型中代表一个病人实体。

  4. RL代理:强化学习算法的“智能体”,它在知识图谱中导航以预测疾病。它通过两个主要组成部分进行工作:

    • Actor(演员):根据当前状态和行动空间(A_t)来生成策略向量 π,决定下一步行动。
    • Critic(评论家):评估当前状态的价值,生成一个估计的状态值 v。
  5. 行动和状态:智能体的行动(a_t)受到当前可能的行动空间(A_t)和当前状态(s_t)的限制。在这个模型中,状态是病人的特征、当前实体和历史轨迹的组合。

  6. 奖励(r_t):当智能体执行一个行动时,它会得到一个奖励,这个奖励反映了行动的结果是否有利于达到预测正确疾病的目标。

整体来看,这个模型是通过结合医学知识(通过KG)和病人的个人数据来预测疾病的发展,同时通过强化学习提供决策的可解释性。

智能体的目标是找到最佳路径,以预测未来可能发生的疾病,并为这个预测提供一个可解释的途径。

 

  1. 知识图谱中的糖尿病实体:在知识图谱(KG)中,糖尿病会是一个实体。

它可能与其他实体如“高血糖”、“肥胖”、“遗传倾向”等通过某种类型的关系(例如因果关系、共发生关系)相连接。

  1. 病人实体:假设有一个病人的电子健康记录(EHR)显示他有预糖尿病的症状,他的病人实体就会包括这些信息,如血糖水平、体重指数(BMI)、家族病史等。

  2. 模型预测过程:RL代理开始在KG中为这个病人导航。

从病人实体出发,RL代理考虑当前的病人特征(如预糖尿病症状)、与病人实体直接连接的KG中的实体(如“高血糖”节点),以及历史信息来决定下一步行动。

这个决定过程包括两部分:Actor(生成下一步的策略向量 π)和Critic(评估当前决策的状态值 v)。

  1. 生成疾病进展路径:RL代理的每一步行动都旨在探索糖尿病可能的发展路径。

例如,如果病人实体连接到“高血糖”,然后是“肥胖”,RL代理可能会预测下一步的疾病发展实体为“2型糖尿病”。

  1. 奖励和学习:如果RL代理的行动(预测)与实际发生的疾病(比如病人确实发展成了糖尿病)匹配,那么它会得到正向奖励(r_t),从而加强这个预测路径的权重。

随着越来越多的EHR数据被训练,模型就会在预测糖尿病的任务上变得更加精确。

最终,通过这个过程,模型能够不仅预测病人可能发展的疾病,而且还能提供一条清晰的疾病进展路径,这为医生提供了可解释的决策支持。

这样,医生可以更好地理解为什么模型会预测某个病人有高糖尿病风险,以及可以采取哪些预防措施。

 


PBXAI 算法设计

在这里插入图片描述
这个图展示的是一个算法的伪代码,具体是疾病预测和路径推理的算法。这个算法是如何工作的,我会用中文逐步解释:

输入

  • 病人表示 ( p_e ),
  • 时间范围 ( T ),
  • 知识图谱 ( G_c ),
  • 病人实体 ( p ),
  • Beam搜索集合 ( [K_0, K_2, …, K_{T-1}] ),
  • 预测疾病数量 ( D )。

输出

  • 疾病概率集合 ( P ),
  • 路径集合 ( R_T ),
  • 路径概率集合 ( Q_T )。

算法步骤

  1. 初始化

    • 路径集 ( R_0 ) 初始化为包含病人实体 ( p ) 的集合。
    • 路径概率集 ( Q_0 ) 初始化为 1。
    • 疾病概率集 ( P ) 初始化为 0。
  2. 时间步迭代:从 0 到 ( T-1 ):

    • 初始化下一时间步的路径集 ( R_{t+1} ) 和路径概率集 ( Q_{t+1} ) 为空集合。
  3. 遍历每个行动:对于每个可能的行动 ( a ) 和边 ( e ) 在 ( R_t ) 和 ( Q_t ) 中:

    • 根据当前行动生成新的路径 ( \hat{P} )。
    • 设置当前状态 ( S_t ) (包含病人表示、当前实体和历史轨迹)。
    • 获取行动空间 ( A_t ) 根据 ( G_c ) 和 ( e_t )。
    • 生成策略 ( \pi ) 和行动空间 ( A_t )。
    • 删除概率不在 top ( K_t ) 中的行动。
    • 对于 ( A_t ) 中的每个行动 ( a ):
      • 保存新的路径 ( \hat{P} ) 和 ( (r_{t+1}, e_{t+1}) ) 到 ( R_{t+1} )。
      • 保存新的概率 ( \pi_t(a) ) 乘以 ( \hat{Q} ) 到 ( Q_{t+1} )。
  4. 遍历路径和概率:对于每个 ( \hat{P} ) 在 ( R_T ) 和 ( \hat{Q} ) 在 ( Q_T ):

    • 如果路径的末端 ( e_r ) 是一个疾病实体:
      • 更新该疾病实体的概率 ( P )。
  5. 返回结果:最后返回疾病概率 ( P ),路径 ( R_T ),和路径概率 ( Q_T )。

这个算法的核心是通过迭代地模拟在知识图谱上的随机游走来预测病人未来可能发展出的疾病,同时生成每种疾病发展的概率和对应的路径。

这个过程考虑了病人的历史病情和当前状态,并使用RL方法来优化预测的路径。

通过这种方法,可以得到可解释的疾病进展路径和每种疾病的概率,从而为临床决策提供支持。

 
假设我们要用这个算法预测一个病人是否会发展成糖尿病。

  1. 输入和初始化

    • 输入病人的基本信息,如性别、年龄、体重指数(BMI)、血糖水平,这些数据形成病人的特征表示 ( p_e )。
    • 确定时间范围 ( T ),比如我们要预测病人在未来5年内的健康变化。
    • 输入知识图谱 ( G_c ),它包含了诸如“高血糖”可能导致“糖尿病”的医学关系。
    • 病人实体 ( p ) 将是与病人特征表示 ( p_e ) 相连的节点。
    • 初始化路径集合 ( R_0 ) 为只包含病人实体 ( p ) 的集合,路径概率 ( Q_0 ) 为1,疾病概率集合 ( P ) 为0。
  2. 时间步迭代

    • 从 ( t = 0 ) 到 ( t = T-1 )(例如从0到4,代表5年),为每一年重复以下步骤。
  3. 行动和路径生成

    • 对于每一步 ( t ),根据病人当前的健康状态和知识图谱生成可能的下一步行动。
    • 例如,如果病人当前状态是“高血糖”,算法将探索从“高血糖”到“糖尿病”的路径。
    • 根据算法计算出的概率,保留最有可能的路径,并删除那些不太可能的行动。
  4. 遍历所有路径

    • 最终,我们会得到一系列可能的疾病发展路径 ( R_T ) 和每条路径对应的概率 ( Q_T )。
    • 如果这些路径中的最终节点是“糖尿病”,并且这个结果在未来确实会发生,疾病概率集合 ( P ) 将更新,增加糖尿病发生的概率。
  5. 结果返回

    • 算法完成后,我们会得到一个关于病人在未来可能发展成糖尿病的概率 ( P ),以及如何到达这个结论的路径 ( R_T ) 和这些路径的概率 ( Q_T )。

通过这个例子,可以看到这个算法如何结合个人健康数据和医学知识来预测疾病,并且提供一条明确的解释路径。

这对于医生来说非常有用,因为它帮助他们理解病人未来健康风险的概率,并根据这些信息制定预防措施。


这个图包括了两部分,展示了一个基于知识图谱(KG)的疾病预测模型的工作原理和结果。

(a) 部分是一个知识图谱的可视化,其中:

  • 蓝色圆圈代表患者实体。
  • 红色圆圈代表被预测的疾病实体。
  • 灰色圆圈代表知识图谱中的其他实体。
  • 实线箭头代表疾病之间的因果关系,如 “导致”。
  • 虚线箭头代表患者与疾病或风险因素之间的关系,如 “有”。

这张图展示了从患者当前的健康状况(高血压、糖尿病、肥胖、贫血)出发,模型是如何预测未来可能出现的疾病(高血压、心力衰竭、糖尿病、心绞痛、贫血)的。

(b) 部分是一个流程图和表格,总结了知识图谱中的路径和预测结果:

  • 流程图左侧显示了从患者实体到当前疾病和风险因素的路径。
  • 右侧表格列出了预测的疾病、它们的概率以及从当前疾病或风险因素到预测疾病的转移概率。

表格展示了每种预测疾病的概率以及相应的转移概率,例如,患者从现在的高血压、糖尿病、肥胖、贫血状态,预测未来可能继续患有高血压(自循环概率0.88)、糖尿病(自循环概率0.81)、贫血(自循环概率0.87);而心力衰竭(因为高血压、糖尿病、肥胖而发生的概率分别为0.12、0.11、0.34)和心绞痛(因肥胖而发生的概率0.64)的概率较低。

整体来看,这个图解释了一个复杂的医疗预测模型如何工作,并提供了对预测结果的深入解释。

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

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

相关文章

NLP_知识图谱_介绍、构建、问答知识

文章目录 知识图谱的介绍图图能做些什么任务基于图的推荐系统图的一些基本概念与表述有向图与无向图节点的度节点的边的数量有向图又分为入度和出度 什么是知识图谱知识图谱属于异质图知识图谱的schema知识图谱的应用场景 知识图谱的构建三元组如何构建知识图谱构建知识图谱通常…

基于springboot+vue+Mysql的简历系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

C语言输出不同颜色的字体

本文章在Linux进行演示!!! 使用C语言输出不同颜色字体和背景 格式: printf("\033[字体背景颜色;字体颜色m字符串\033[0m"); 上边的 \033 也可以用 \e 来代替。 字体颜色与字符的对应关系 字符颜色30黑色31红…

小白学视觉 | 各种各样神奇的自注意力机制(Self-attention) 建议收藏!

本文来源公众号“小白学视觉”,仅用于学术分享,侵权删,干货满满。 原文链接:收藏!各种各样神奇的自注意力机制(Self-attention) 编者荐语 文章总结了关于李宏毅老师在 2022 年春季机器学习课…

MAC(M1芯片)编译Java项目慢且发热严重问题解决方案

目录 一、背景二、排查三、解决四、效果以及结果展示五、总结 一、背景 使用idea编译项目等操作,经常性发热严重,并且时间慢。直到昨天编译一个项目用时30分钟,电脑温度很高,并且有烧灼的味道,于是有了此篇文章。 二、…

关于Jar包提示找不到主类 找不到或无法加载主类

关于Jar包提示找不到主类 找不到或无法加载主类 当时看到教程打包一个正常的小型增删改查为50MB,也就是几十MB,可我打包得到的Jar包只有几MB,一直提示找不到主类application。经检查 根据方法,只需使用mvn clean 和 mvn packa…

大米自动化生产线设备:现代粮食加工的核心力量

随着科技的不断进步和粮食加工行业的快速发展,大米自动化生产线设备在现代粮食加工中的地位愈发重要。这些设备不仅大大提高了生产效率,还保证了产品的质量和安全,成为了现代粮食加工行业不可或缺的核心力量。 一、自动化生产线设备助力效率提…

厂房起火3D消防灭火安全救援模拟演练

深圳VR公司华锐视点依托前沿的VR虚拟现实制作、三维仿真和图形图像渲染技术,将参训者带入栩栩如生的火灾现场。佩戴VR头盔,参训者将真切体验火势蔓延的紧张与危机,身临其境地感受火灾的恐怖。 并且消防安全VR虚拟现实演练系统精心模拟了住宅、…

基于单链表实现通讯管理系统!(有完整源码!)

​ 个人主页:秋风起,再归来~ 文章专栏:C语言实战项目 个人格言:悟已往之不谏,知来者犹可追 克心守己,律己则安! 1、前言 友友们,这篇文章是基于单链…

005Node.js模块URL的使用

引入 URL 模块 要使用 URL 模块,首先需要在代码中引入它。可以使用以下代码将 URL 模块导入到你的脚本中: const url require(url);实例代码 const urlrequire(url); var apihttp://www.baidu.com?nameshixiaobin&age20; console.log(url.parse(…

Android应用和开发环境

🌈个人主页:小新_- 🎈个人座右铭:“成功者不是从不失败的人,而是从不放弃的人!”🎈 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 🏆所属专栏&#xff1…

70 个常用的GIS Python 库

由于其多功能性、广泛的库生态系统和用户友好的语法,Python 已成为地理信息系统 (GIS) 和遥感领域的主导语言。这个 70 个地理空间 Python 库的汇编展示了可用于 GIS 和遥感数据处理和分析的丰富工具包。 Python 在 GIS 中的重要性源于它处理复杂地理空间数据的能力…

rancher踩坑日志:prometheus访问kubelet 10250端口提示鉴权失败

该原因是因为kubectl禁止了非授权用户访问10250端口来获取node的数据。 解决思路: 添加prometheus访问kubelet时带上证书进行验证匹配 --> 由于我的prometheus是rancher安装的,不知道要怎么修改所以研究了一会没研究明白就放弃了。设置prometheus访问…

运动听歌哪款耳机靠谱?精选五款热门开放式耳机

随着人们对运动健康的重视,越来越多的运动爱好者开始关注如何在运动中享受音乐。开放式蓝牙耳机凭借其独特的设计,成为了户外运动的理想选择。它不仅让你在运动时能够清晰听到周围环境的声音,保持警觉,还能让你在需要时与他人轻松…

gym界面修改

资料:https://blog.csdn.net/weixin_46178278/article/details/135962782 在gym环境中使用mujoco的时候,有一个很难受的地方,界面上没有实时显示动作空间和状态空间状态的地方。 gym自己原始带的环境是用pygame画的图,所以在定义…

【爬虫+数据清洗+可视化分析】Python文本分析《狂飙》电视剧的哔哩哔哩评论

一、背景介绍 把《狂飙》换成其他影视剧,套用代码即可得分析结论! 2023《狂飙》热播剧引发全民追剧,不仅全员演技在线,且符合主旋律,创下多个收视记录! 基于此热门事件,我用python抓取了B站上千…

【SpringBoot】获取参数

获取参数 传递单个参数传递多个参数传递对象后端参数重命名传递数组传递 json 数据获取 URL 中参数上传文件获取 cookie 和 session获取cookie获取session 传递单个参数 RequestMapping("/user") RestController public class UserController {// 传递单个参数Reque…

力扣 | 160. 相交链表

import ListNodeInfo.ListNode;import java.util.HashSet; import java.util.Set;public class Problem_160_IntersectionOfTwoLinkedList {//双指针方法 public ListNode getIntersectionListNode(ListNode headA, ListNode headB){if(headA null || headB null) return nul…

S32K324 CANFD报文接收超限分析

文章目录 前言问题描述原因分析问题处理总结 前言 随着汽车软件复杂度越来越高,传输的数据越来越多,CAN总线到CANFD总线已经是发展的必然了。CANFD总线中单个报文ID可以传递至多64byte数据,对CAN Driver来说,所需的MCU资源也将变…

数据集学习

1,CIFAR-10数据集 CIFAR-10数据集由10个类的60000个32x32彩色图像组成,每个类有6000个图像。有50000个训练图像和10000个测试图像。 数据集分为五个训练批次和一个测试批次,每个批次有10000个图像。测试批次包含来自每个类别的恰好1000个随机…