跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

医疗 AI 场景下的 k-均值算法:患者分群与精准医疗实战

k-均值算法作为无监督学习的经典方法,在医疗领域主要用于患者亚型发现与疾病分群。通过最小化簇内距离平方和,该算法能自动识别具有相似临床特征的患者群体,辅助精准医疗决策。实战中结合肘部法则与轮廓系数确定最佳簇数,利用 scikit-learn 实现糖尿病数据集的聚类分析,验证了其在慢性病管理中的有效性。该方法虽对初始值和异常值敏感,但在处理数值型医疗数据时依然高效实用。

GRACE Grace发布于 2026/3/15更新于 2026/6/1519 浏览
医疗 AI 场景下的 k-均值算法:患者分群与精准医疗实战

k-均值算法:患者分群与精准医疗

k-means medical application

在医疗领域,我们常面临这样的挑战:患者能否划分为不同的亚型?不同亚型是否有迥异的疾病进展或治疗反应?这类问题属于无监督学习的范畴。k-均值(k-means)聚类算法是其中最经典、应用最广的工具之一,它能将数据划分为 k 个簇,让同一簇内的样本高度相似,而簇间差异显著。咱们先从原理聊起,看看它如何发现慢性病患者的潜在亚型,为精准医疗提供依据。

算法原理

聚类问题概述

聚类是无监督学习的一种,目标是将数据集划分为若干组(簇),使得组内样本尽可能相似,组间尽可能不同。与分类不同,聚类不需要预先标记的类别,而是直接从数据本身挖掘结构。

k-均值的核心思想

k-均值试图将 n 个样本划分到 k 个簇中,最小化每个样本到其所属簇中心的距离平方和。簇中心即簇内所有样本的均值,这也是'k-均值'名称的由来。

设数据集为 $X = {x^{(1)}, x^{(2)}, …, x^{(n)}}$,每个样本为 p 维向量。算法将样本划分到 k 个簇 $C = {C_1, C_2, …, C_k}$,目标是极小化目标函数(惯性,inertia):

$$ J = \sum_{j=1}^{k} \sum_{x \in C_j} | x - \mu_j |^2 $$

其中 $\mu_j$ 是簇 $C_j$ 的中心(均值向量)。

算法步骤

k-均值通过迭代优化实现上述目标,流程其实很直观:

  1. 初始化:随机选择 k 个样本作为初始簇中心。
  2. 分配:计算每个样本到各簇中心的距离(通常用欧氏距离),将样本分配到最近的簇。
  3. 更新:对每个簇重新计算均值,作为新的簇中心。
  4. 重复:重复步骤 2 和 3,直到簇中心不再发生显著变化或达到最大迭代次数。

当算法收敛时,样本分配和簇中心基本稳定。

距离度量与 k 值选择

k-均值通常使用欧氏距离,但理论上也可用其他度量。距离的选择直接影响结果,医疗数据常混合数值型和类别型特征,此时可能需要独热编码或使用 Gower 距离等专门方法。不过 k-均值对类别型特征处理较弱,通常需先数值化。

k 值(簇数)是关键超参数,常见选择方法有:

  • 肘部法则:绘制不同 k 值下的惯性曲线,下降速度减缓的'肘部'对应较优 k 值。
  • 轮廓系数:结合簇内紧密度和簇间分离度,越接近 1 效果越好。
  • Calinski-Harabasz 指数:基于簇间与簇内离差矩阵比值。
  • 领域知识:如已知疾病有 3 种亚型,可直接设 k=3。

局限性与复杂度

时间复杂度约为 $O(n \cdot k \cdot I \cdot p)$,对于大规模数据效率尚可。但也存在明显局限:需预先指定 k、对初始值敏感、假设簇为凸形且大小相近、对噪声异常值敏感,且主要处理数值型数据。

医疗应用场景

患者分群与疾病亚型发现

这是最经典的应用。通过聚类,可将患者划分为具有相似临床特征、生物标志物或基因组特征的亚组,每个亚组可能对应不同的疾病机制或预后。例如:

  • 糖尿病亚型:基于血糖、BMI、胰岛素抵抗等指标,区分严重自身免疫性、严重胰岛素缺乏性等类型,指导差异化治疗。
  • 心力衰竭表型:通过射血分数、BNP 等指标识别不同心衰表型。
  • COVID-19 临床分型:基于症状和影像特征划分轻症、重症等亚型。

医学影像分割与基因分析

图像分割方面,k-均值可用于脑 MRI 组织分割(灰质、白质等)或肿瘤区域初步识别。虽然深度学习更强大,但 k-均值因简单快速,仍适合预处理或原型验证。

在基因组学中,聚类用于发现共表达基因模块或肿瘤分子亚型(如乳腺癌的 luminal A、HER2 过表达等)。此外,还可用于医疗资源优化,如基于就诊模式聚类优化排程,或识别异常诊疗模式进行质量控制。

案例实战:基于 k-means 的慢性病患者聚类分析

理论讲完了,咱们直接上手跑个数据看看效果。本节使用 scikit-learn 自带的糖尿病进展数据集(Diabetes dataset),包含 442 名患者的 10 个基线变量及一年后疾病进展测量。虽然这是回归数据集,但我们可以基于基线特征进行聚类,观察不同簇的疾病进展差异。

数据集加载与预处理

from sklearn.datasets import load_diabetes
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import warnings
warnings.filterwarnings('ignore')

# 加载数据
diabetes = load_diabetes()
X = pd.DataFrame(diabetes.data, columns=diabetes.feature_names)
y = pd.Series(diabetes.target, name='target')

print(X.shape)
print(X.head())

输出显示数据形状为 (442, 10),特征已标准化(均值为 0,方差为 1)。目标变量 target 表示疾病进展程度。检查缺失值确认无误后,即可直接用于聚类。

确定最佳 k 值

我们结合肘部法则和轮廓系数来选择最佳 k 值。

inertia = []
silhouette_scores = []
K_range = range(2, 11)

for k in K_range:
    kmeans = KMeans(n_clusters=k, random_state=42, n_init=10)
    kmeans.fit(X)
    inertia.append(kmeans.inertia_)
    silhouette_scores.append(silhouette_score(X, kmeans.labels_))

# 绘制评估曲线
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.plot(K_range, inertia, marker='o')
plt.xlabel('k')
plt.ylabel('惯性')
plt.title('肘部法则')
plt.subplot(1, 2, 2)
plt.plot(K_range, silhouette_scores, marker='o')
plt.xlabel('k')
plt.ylabel('轮廓系数')
plt.title('轮廓系数')
plt.tight_layout()
plt.show()

运行这段代码,你会看到随着 k 增加,惯性逐渐下降,而轮廓系数会在某个点达到峰值。这个峰值对应的 k 值通常就是最优簇数。在实际项目中,除了看图表,还要结合业务含义——如果 k=3 时轮廓系数最高,且符合临床对三种亚型的认知,那就定下来。

接下来就可以用选定的 k 值训练模型,并分析每个簇的特征分布,看看它们分别代表了什么样的患者群体。这就是 k-均值在医疗数据分析中的核心价值:把复杂的数据变成可解释的临床洞察。

目录

  1. k-均值算法:患者分群与精准医疗
  2. 算法原理
  3. 聚类问题概述
  4. k-均值的核心思想
  5. 算法步骤
  6. 距离度量与 k 值选择
  7. 局限性与复杂度
  8. 医疗应用场景
  9. 患者分群与疾病亚型发现
  10. 医学影像分割与基因分析
  11. 案例实战:基于 k-means 的慢性病患者聚类分析
  12. 数据集加载与预处理
  13. 加载数据
  14. 确定最佳 k 值
  15. 绘制评估曲线
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 基于 DeepFace 和 OpenCV 的情绪分析器实现
  • 渲境 AI 使用指南:建筑室内景观多场景渲染实战
  • GitHub Copilot 接入第三方 OpenAI 接口无需扩展
  • π0 源码深度剖析:从 PaLI-Gemma 扩散策略到 C/S 架构部署
  • 国产主流 AI 智能体平台 OpenClaw 及其竞品对比汇总
  • LangChain 文档切分器详解:从字符到代码的文本分割策略
  • 阿里云 RDS AI 助手上线:大模型驱动的数据库智能运维
  • RDS AI 助手上线:大模型驱动数据库智能运维
  • 大模型落地:在“卷模型”与“卷应用”间的行业化关卡
  • 阿里云配置 Zabbix 邮件发送
  • 2026 年 2 月 AIGC 行业模型发布及前沿资讯
  • 文心一言、通义千问、Kimi、豆包:四大国产大模型对比评测
  • 专利检索与 AI 辅助工具资源汇总
  • 阿里云 Maven 镜像配置实战
  • MySQL 数据类型详解与选型指南
  • 通义 DeepResearch 开源:轻量级 AI 代理性能对标 OpenAI
  • 二级 Python 考试真题及参考代码(基本操作题)
  • JDK 17 安装与环境配置实战指南
  • 前端地图开发实战:折线与多边形覆盖物的绘制及交互优化
  • MoltBot 接入钉钉 Stream 流式接口配置指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online