标签 K-means 下的文章

全文链接:https://tecdat.cn/?p=44893
原文出处:拓端数据部落公众号
关于分析师

在此对Chang He对本文所作的贡献表示诚挚感谢,他在中国中医科学院完成了中医信息学专业的硕士学位,专注中医临床数据挖掘领域。擅长Python、深度学习、临床数据采集与挖掘。Chang He曾参与多项中医临床数据研究项目,聚焦慢性胃炎等常见消化类疾病的中药配伍规律挖掘,通过数据技术赋能传统中医用药研究,积累了丰富的临床数据处理与模型构建经验。

专题名称:慢性胃炎中药用药规律数据挖掘与AI预测实践

引言

中医治疗慢性胃炎注重辨证施治与中药配伍,传统用药经验多依赖医师传承,难以快速提炼普适性规律并实现精准指导。随着大数据与人工智能技术的发展,通过数据挖掘解析病历中的中药配伍逻辑,结合神经网络构建用药预测模型,成为赋能中医临床诊疗的重要方向。本文围绕慢性胃炎住院病历数据,整合多种数据分析方法与AI模型,系统探索中药使用规律与用药预测路径,为临床合理用药提供数据支撑。
本文内容改编自过往客户咨询项目的技术沉淀并且已通过实际业务校验,该项目完整代码与数据已分享至交流社群。阅读原文进群,可与800+行业人士交流成长;还提供人工答疑,拆解核心原理、代码逻辑与业务适配思路,帮大家既懂 怎么做,也懂 为什么这么做;遇代码运行问题,更能享24小时调试支持。
本研究以两家医疗机构的慢性胃炎住院病历为核心数据,采用人工、VBA宏与大语言模型结合的方式提取并规范数据,通过SPSS系列工具与Python库实现频数分析、聚类分析、关联规则挖掘,同时构建含Resblock模块的神经网络模型,实现基于临床症状的中药预测。全文将先梳理数据处理与分析流程,再逐一呈现各环节结果,最后总结方法适用性与实际应用价值,同步配套核心代码供落地复用,兼顾理论性与实操性。

项目文件目录

研究方法与技术准备

数据来源与处理

本研究选取两家医疗机构的慢性胃炎住院病历作为研究对象,其中一家机构数据时间范围为2016年1月至2024年5月,聚焦中药配伍规律挖掘;另一家机构数据时间范围为2013年1月至2021年10月,用于神经网络模型构建,数据集含2214个样本、364种临床特征及469种中药。
数据提取采用人工、VBA宏与大语言模型协同模式,既保障人工校验的准确性,又通过工具提升效率。数据规范化依据《中药学》新世纪版标准,统一中药名称、剂量等关键信息,为后续分析奠定基础。

核心工具与方法说明

  1. 分析工具:SPSS Modeler 18.0、SPSS Statistic 26.0、Python 3.11.5(Sklearn、Scipy、Pytorch 2.0.1模块),上述工具国内均可正常访问使用,无替代需求,其中Python相关模块可通过镜像源快速安装。
  2. 分析方法:频数分布分析(提炼高频中药与临床特征)、聚类分析(K-means、AGNES,对比不同距离与连接法适用性)、关联规则挖掘(挖掘中药联用规律)、BP神经网络(含Resblock模块,优化症状到中药的预测精度)。

核心代码适配与说明(数据提取环节)

以下代码用于中药名称提取与数据清洗,优化变量名与语法结构,适配中文文本处理需求,省略部分重复数据校验代码:

import pandas as pdimport re# 读取Excel格式的病历数据文件input_excel = '病历数据.xlsx' # 替换为实际数据文件路径data_df = pd.read_excel(input_excel)# 定义汉字提取函数,过滤非中文内容(保留中药名称)def get_chinese_content(text): # 正则表达式匹配中文汉字范围 chinese_characters = ''.join(re.findall(r'[\u4e00-\u9fff]+', str(text))) return chinese_characters# 对中药名称列应用提取函数,清洗数据data_df['中药名称'] = data_df['中药名称'].astype(str).apply(get_chinese_content)# 保存清洗后的数据至新文件output_excel = '清洗后病历数据.xlsx'data_df.to_excel(output_excel, index=False, engine='openpyxl')print(f"数据清洗完成,结果已保存至 {output_excel}")

代码功能:针对病历数据中的中药名称列进行清洗,提取纯中文内容,剔除符号、数字等干扰项,保障后续分析数据的规范性。省略部分为数据去重、空值填充逻辑,可根据实际数据质量补充。

研究结果与分析

频数分析结果

本次分析共涉及281种中药、7375个用药实例,平均每张处方开具15种中药。其中甘草使用频次最高,达341次,占比71.49%,平均剂量7.8g;黄精、升麻等51种中药仅使用1次,频次最低。
频次排名前20的中药如下表所示,高频中药多集中在理气、健脾、清热类别,符合慢性胃炎脾胃失调、气滞热蕴的常见病机。
表4 药物频次统计前20位

中药频次占比(%)
甘草34171.49%
陈皮28058.70%
半夏27257.02%
白芍23749.69%
柴胡23649.48%
白术22246.54%
黄连21645.28%
茯苓19841.51%
枳实18338.36%
延胡索18338.36%
砂仁17937.53%
党参17336.27%
香附15532.49%
黄芩14229.77%
厚朴13528.30%
丹参12526.21%
紫苏梗12125.37%
当归12025.16%
海螵蛸10722.43%
干姜10221.38%

中药频次分布如下图所示,呈现明显的长尾分布特征,少数中药在临床中广泛应用,多数中药针对性使用。


相关文章

Python预测二型糖尿病:逻辑回归、XGBoost、CNN、随机森林及BP神经网络融合加权线性回归细化变量及PCA降维创新

原文链接:https://tecdat.cn/?p=43572


聚类分析结果

聚类分析核心目标是挖掘中药联用的内在规律,对比K-means与AGNES两种聚类方法,结合不同距离计算方式与连接法,从轮廓系数、临床可解释性等维度评估适用性。

K-means聚类

簇数设置为1-20时,通过WSS图(组内平方和)观察簇数适配性,拐点虽不明显,但簇数为2、3、5、9时WSS下降趋势变缓,簇数适中。

表5 不同簇数的K-means聚类平均轮廓系数

簇数量簇样本量平均轮廓系数
212,290.1490
35,30,60.1252
53,24,9,2,30.0914
94,6,14,2,2,2,8,2,10.0581

当簇数设为9时,各簇样本轮廓系数表现较好,通过PCA降维可视化聚类结果如下:

K-means聚类结果临床可解释性较强,平均评分4.67分,仅簇2可解释性较低(2分)。各簇对应不同病机的用药方案,如簇0含延胡索、砂仁等,与香砂六君子汤核心组分契合,适配脾气虚兼气滞证;簇1含黄芩、干姜等,对应气血阳虚、湿热蕴结的复杂病机。
表6 K-means聚类结果

簇名中药可解释性评分
0延胡索,砂仁,党参,木香5
1黄芩,干姜,桂枝,黄芪,生姜,大枣5
2黄连,枳实,厚朴,海螵蛸,六神曲,吴茱萸,佩兰,竹茹,苍术,浙贝母,瓜蒌,白及,鸡内金,麦芽(14味)2
3香附,紫苏梗5
4白芍,柴胡5
5陈皮,半夏5
6丹参、当归、川芎、枳壳、百合、乌药、豆蔻、酸枣仁(8味)5
7白术、茯苓5
8甘草5
AGNES聚类(不同连接法对比)
  1. 欧氏距离+最长距离法:簇数设为9时,平均轮廓系数0.0803,临床可解释性评分4.11分,部分簇中药组合对应明确诊疗需求,如簇0含香附、紫苏梗等,侧重理气活血。
  2. 欧氏距离+最短距离法:簇数设为12时,平均轮廓系数0.0637,但临床可解释性仅1.33分,多数簇仅含单味药,难以提炼联用规律。
  3. 欧氏距离+组间平均连接法:簇数设为12时,平均轮廓系数0.0901,临床可解释性3分,兼顾聚类效果与规律提取,如簇1(枳实、厚朴)、簇2(白芍、柴胡)均为临床常用配伍。

聚类分析核心代码(AGNES方法)

以下代码优化变量名与注释,适配聚类分析需求,省略部分图表美化与结果导出代码,同时提供24小时应急修复服务,代码运行异常可快速响应,效率较自行调试提升40%:

import numpy as npimport matplotlib.pyplot as pltfrom sklearn.cluster import AgglomerativeClusteringfrom scipy.cluster.hierarchy import dendrogram, linkagefrom sklearn.metrics import silhouette_scoreimport pandas as pd# 读取预处理后的中药数据data_path = '中药数据.xlsx'df = pd.read_excel(data_path, usecols="A:RJ", nrows=41)labels = df.iloc[:, 0].values # 提取样本标签(中药名称)data = df.iloc[:, 1:].to_numpy() # 提取特征数据cluster_num = 12 # 设定簇数try: print(f"开始聚类分析,簇数设置为 {cluster_num}") # 初始化AGNES聚类器,欧氏距离+组间平均连接法 agnes_cluster = AgglomerativeClustering(n_clusters=cluster_num, affinity='euclidean', linkage='average') cluster_results = agnes_cluster.fit_predict(data)# 计算平均轮廓系数,评估聚类效果 avg_silhouette = silhouette_score(data, cluster_results, metric='euclidean') print(f"簇数{cluster_num}时,平均轮廓系数:{avg_silhouette}")# 绘制树状图 linked_matrix = linkage(data, method='average', metric='euclidean') plt.figure(figsize=(12, 6)) dendrogram(linked_matrix, orientation='top', labels=labels, show_leaf_counts=True) plt.title('层次聚类树状图') plt.xlabel('样本标签') plt.ylabel('距离阈值') plt.show() ... # 省略轮廓系数分布图绘制与结果保存代码except Exception as e: print(f"聚类分析过程中出现异常:{e}")

关联规则挖掘结果

设置最小前项支持度0.1、最小置信度0.8,共得到451条关联规则,最高项数6项,其中项数4的规则最多(210条),项数2的规则最少(10条)。规则支持度与置信度前10名的关联规则临床可解释性均为满分,契合中医用药理论。
支持度前5的关联规则中,“党参→甘草”支持度最高(29.560%),二者为临床健脾益气常用配伍;“茯苓、陈皮→半夏”支持度25.367%,对应痰湿内阻型慢性胃炎的用药方案。
置信度前5的关联规则中,“吴茱萸、陈皮→黄连”置信度达98.276%,吴茱萸温肝暖胃,黄连清热燥湿,二者配伍符合寒热错杂证的诊疗逻辑;“延胡索、茯苓、半夏→陈皮”置信度98.077%,体现理气止痛、健脾化痰的联用思路。

神经网络构建与结果

模型设计

基于临床特征预测中药使用,构建含2个Resblock模块与1个全连接层的BP神经网络,Resblock模块通过跳跃连接缓解梯度消失问题,提升模型训练效果。模型输入为364种临床特征,输出为469种中药的预测概率,Resblock输出采用Leaky ReLU激活函数,最终输出采用Sigmoid激活函数,适配多标签分类需求。

特征与标签选择

临床特征频次前3位为烧心(63.69%)、口干(61.92%)、夜寐欠安(61.34%),均为慢性胃炎常见症状;中药标签选取覆盖高、中、低频药物,共12种,验证不同频次药物的预测效果。

模型结果与评估

采用二折交叉验证评估模型性能,F1值为43.54%,多数标签F1值波动幅度控制在0.017以内,模型稳定性较强。其中“黄芩”“陈皮、柴胡”等标签F1值超过50%,预测效果较好;“佩兰、黄芩”标签预测稳定性较差,可能与该组合临床应用场景差异较大有关。
高频药物黄芩预测F1值最高(53.42%),特征明确易被模型捕捉;白芍虽为高频药物,但召回率仅0.0799,呈现“高精低召”特征,提示其应用场景多样性导致模型难以全面识别;低频药物(占比<1%)因样本量极少,模型多预测为阴性,F1值无法计算,需通过数据扩充优化。

总结与应用建议

本研究通过多种数据分析方法与AI模型,系统挖掘了慢性胃炎中药用药规律,构建了症状到中药的预测模型,核心结论与建议如下:

  1. 用药规律:甘草、陈皮、半夏等为慢性胃炎核心用药,多以理气、健脾、清热类中药联用为主,关联规则挖掘出的高频组合可作为临床用药参考。
  2. 方法适配:K-means聚类在临床可解释性上优于AGNES,欧氏距离+组间平均连接法可作为AGNES聚类的优选参数,为同类研究提供方法借鉴。
  3. 模型优化:Resblock优化的BP神经网络可实现中药预测,但需针对低频药物扩充样本,优化标签设计,提升模型泛化能力。
  4. 临床应用:研究结果可辅助医师快速制定用药方案,尤其为年轻医师提供配伍参考,同时模型可作为中医用药教学的辅助工具。
    本研究所有代码与数据已同步至交流社群,提供人工答疑与24小时代码调试服务,助力临床数据挖掘爱好者快速落地实践。后续可结合更多医疗机构数据,优化模型参数,进一步提升结果的临床适配性。

全文链接:https://tecdat.cn/?p=44868
原文出处:拓端数据部落公众号

关于分析师

在此对Xiongtao Zou对本文所作的贡献表示诚挚感谢,他在伊利诺伊大学厄巴纳-香槟分校完成了信息管理专业的硕士学位,专注心理健康数据分析领域。擅长Python、MySQL、Neo4j、AWS SageMaker、MATLAB、机器学习、深度学习、数据预处理。Xiongtao Zou曾参与多家机构心理健康评估项目,负责数据建模与分析工作,助力搭建精准的心理分类评价体系,为心理服务机构提供数据支撑与优化方案。

封面:

封面

引言

在心理健康服务日益精细化的今天,多量表联合评估已成为心理状态研判的核心手段,但量表数据的多样性、量化指标的差异性的问题,导致传统评价方法易出现主观性强、分类模糊的痛点。作为数据分析师,我们在过往客户咨询项目中发现,单一方法难以兼顾分类准确性与评价客观性,因此探索出多算法融合的解决方案——通过聚类、降维、统计检验与客观赋权方法结合,构建适配多心理量表的数据处理体系。
本文围绕SL-90症状自评量表、职业成熟度量表、大五人格量表三类数据,搭建从数据预处理到评价验证的全流程模型,依次实现量表分类、综合聚类、分组差异研判与评价方法校验。模型核心创新在于将熵权TOPSIS法与K-means聚类结合,通过客观赋权规避人为权重偏差,同时用K折交叉验证保障结果可靠性。
本文内容改编自过往客户咨询项目的技术沉淀并且已通过实际业务校验,该项目完整代码与数据已分享至交流社群。阅读原文进群,可与800+行业人士交流成长;还提供人工答疑,拆解核心原理、代码逻辑与业务适配思路,帮大家既懂 怎么做,也懂 为什么这么做;遇代码运行问题,更能享24小时调试支持。

项目文件目录

数据预处理与核心方法概述

数据基础

本次采用三类核心心理量表数据,分别从心理症状(SL-90症状自评量表)、职业适配度(职业成熟度量表)、人格特质(大五人格量表)三个维度采集信息,覆盖168名评估对象,为后续分析提供全面数据支撑。

预处理流程

首先对原始数据进行清洗:剔除极端异常值,针对空白值采用众数填补法补全,确保数据完整性。此步骤可规避残缺数据对后续模型的干扰,为分析结果可靠性奠定基础。

核心方法简化说明

  1. 频数分析:将各量表得分划分为四类区间,通过区间分布实现评估对象分类,结合分布特征验证分类科学性。
  2. Kendall’s W检验:检验多量表分类结果的一致性,W值越接近1,表明分类结果关联性越强。
  3. PCA主成分分析:将三维量表数据降维至二维,在保留86%以上信息的前提下简化计算,提升后续聚类效率。
  4. K-means聚类:基于降维后的数据划分聚类簇,通过距离平方和确定最优簇数,实现评估对象的综合分类。
  5. T检验:对比两组评估对象的量表数据,通过均值、标准差等指标研判组间差异显著性。
  6. 熵权TOPSIS法:通过信息熵计算各量表权重,结合TOPSIS法得出评估对象综合得分,实现客观评价。
  7. K折交叉验证:将数据按9:1划分为训练集与验证集,通过准确率、召回率验证模型可靠性。

量表分类与关联性分析

分类实现

采用频数分析对三类量表分别完成分类,计算各得分区间的频数及占比,形成分类标准:评估对象得分落入对应区间,即可判定其所属类别。

分类结果验证

对三类量表的频数分布进行可视化分析,结果如下:



图1 三类量表频数统计图


图2 频数分布条形统计图
从分布特征来看,职业成熟度量表与大五人格量表的频数分布接近正态分布,符合心理评估数据的普遍规律,证明分类标准具有科学性;SL-90量表某一区间占比达90%,因该量表用于心理健康筛查,健康人群占比偏高的结果贴合实际应用场景。

分类结果关联性检验

采用Kendall’s W检验验证三类量表分类结果的一致性,检验结果如下表所示:

名称秩平均值中位数Kendall’s W系数P
SL-9011.0712000.000*
大五人格3194.5---
职业成熟度23.78---

注:*代表1%的显著性水平
检验结果显示Kendall’s W系数为1,表明三类量表的分类结果几乎完全相关,说明不同维度的心理评估具有一致性,为后续综合分析提供了合理性支撑。

相关文章

Python用TOPSIS熵权法重构粮食系统及期刊指标权重多属性决策MCDM研究|附数据代码

原文链接:https://tecdat.cn/?p=37724


综合评价体系构建与聚类分析

降维处理

先通过KMO检验与Bartlett检验验证数据适配性,检验结果显示KMO值为0.525,Bartlett球形度检验P值小于0.001,表明数据适合进行主成分分析。
采用PCA主成分分析对三类量表数据降维,提取特征根大于1的主成分,结果显示前两个主成分的累积方差解释率达86.917%,可充分保留原始信息。降维后各量表在主成分上的载荷系数如下:

量表主成分1主成分2共同度
SL-90-0.5910.7850.966
大五人格0.7840.490.855
职业成熟度0.8820.0910.787

聚类实现

基于降维后的数据进行K-means聚类,通过对比不同簇数的距离平方和确定最优簇数为5,此时距离平方和降至2158.375,聚类效果较优。

聚类核心代码(MATLAB改写)
% 心理量表数据聚类分析(K-means算法)psych_data = []; % 省略:导入降维后的主成分数据cluster_num = 5; % 最优聚类簇数[cluster_idx, centroids] = kmeans(psych_data, cluster_num); % 执行聚类% 聚类结果可视化color = {'r','g','b','c','m'};figurefor i = 1:cluster_num cluster_data = psych_data(cluster_idx == i, :); scatter3(cluster_data(:, 1), cluster_data(:, 2), zeros(size(cluster_data,1),1), color{i},'o'); hold on; scatter3(centroids(i, 1), centroids(i, 2), 0,'k','x');endhold off;xlabel('主成分1');ylabel('主成分2');title('5簇K-means聚类分析');legend({'簇1','簇2','簇3','簇4','簇5','簇中心'});grid on;

代码功能:导入降维数据后,以5为簇数执行K-means聚类,通过散点图可视化聚类结果,标注各簇中心位置,直观呈现分类效果。

聚类结果分析

聚类结果如下表所示,5个簇的占比分别为34%、27%、16%、8%、15%,分布相对合理。

聚类类别频数百分比%
13434
22727
31616
488
51515
合计100100

各聚类中心对应的原始量表得分如下:

聚类种类SL-90大五人格职业成熟度量表
11.115187.5593.553
21.132201.4813.865
31.103168.6253.708
41.030231.1254.325
51.062216.5334.252

可视化结果显示,各簇整体区分度良好,但簇1与簇2、簇2与簇5存在少量重叠,后续可通过算法优化提升分离度。

分组差异研判与评价方法验证

分组差异分析

采用T检验对比两组评估对象的量表数据,研判组间差异:SL-90量表两组数据的P值小于0.001,Cohen’s d为1.309,表明组间差异显著;大五人格量表P值为0.918,职业成熟度量表P值为0.001但Cohen’s d仅0.355,两组量表的组间差异不明显。
结果提示,两组评估对象的心理症状表现差异较大,而人格特质与职业适配度的差异较小,可为针对性心理服务提供方向。

评价方法准确性验证

采用熵权TOPSIS法构建综合评价模型,客观计算各量表权重,再通过K折交叉验证检验模型可靠性。

熵权计算结果
量表信息熵值e信息效用值d权重(%)
大五人格0.970.0355.374
职业成熟度0.9810.01934.307
SL-900.9940.00610.319

结果显示,大五人格量表权重最高,对综合评价的影响最大,符合人格特质在心理评估中的核心地位。

K折交叉验证核心代码(MATLAB改写)
% 心理评价模型K折交叉验证(验证准确率、召回率、精确度)X = []; % 省略:导入量表特征数据y = []; % 省略:导入分类标签数据% 划分训练集与验证集(9:1比例)cvp = cvpartition(size(X,1),'HoldOut',0.1);X_train = X(cvp.training,:);y_train = y(cvp.training,:);X_val = X(cvp.test,:);y_val = y(cvp.test,:);% 训练模型并预测model = fitcsvm(X_train, y_train); % 支持向量机模型训练y_pred = predict(model, X_val); % 验证集预测% 计算评价指标confusionMatrix = confusionmat(y_val, y_pred);accuracy = sum(diag(confusionMatrix)) / sum(sum(confusionMatrix));recall = diag(confusionMatrix) / sum(confusionMatrix, 1);precision = diag(confusionMatrix) / sum(confusionMatrix, 2);% 输出结果fprintf('准确率: %.4f\n', accuracy);fprintf('召回率: %.4f\n', mean(recall));fprintf('精确度: %.4f\n', mean(precision));

代码功能:按9:1比例划分数据,通过支持向量机训练模型,计算准确率、召回率、精确度三个指标,验证评价模型可靠性,最终结果显示准确率0.9492、召回率0.9128、精确度0.9389,模型表现优异。

聚类优化结果

基于熵权TOPSIS法的综合得分再次进行聚类,仍划分为5个簇,聚类结果的F值为556.892,P值小于0.001,表明各簇间差异显著。

图3 熵权法评价聚类分析图

模型评价、优化与工具适配说明

模型优势与应用价值

优势在于多算法融合,通过客观赋权与交叉验证规避主观性,结果可靠性高;覆盖分类、聚类、差异分析、评价验证全流程,适配心理评估实际需求。可广泛应用于心理服务机构的评估筛查、人才选拔的心理适配度研判等场景。

优化方向

  1. 数据层面:扩充评估对象样本量,纳入不同年龄段、职业背景的数据,提升模型泛化能力。
  2. 算法层面:引入随机森林、决策树等深度学习算法,优化聚类重叠问题,提升分类精度。
  3. 维度层面:增加评估对象的社会背景、生活习惯等特征,丰富评价维度,提升结果全面性。

工具适配说明

  1. 国外工具适配:AWS SageMaker国内可正常访问,国内替代品有阿里云PAI、腾讯TI-ONE,功能与适配性相近;Neo4j国内可访问,替代品有NebulaGraph,更适配国内数据存储需求。
  2. 应急修复服务:提供24小时响应“代码运行异常”求助,针对本文模型代码的调试效率较自行排查提升40%,可快速解决变量报错、可视化异常等问题。

附录(关键代码节选)

1. PCA主成分分析代码(MATLAB改写)

% 量表数据PCA降维psych_data = []; % 省略:导入原始量表数据[m,n] = size(psych_data);% 数据中心化data_centered = zeros(m,n);for i = 1:n data_centered(:,i) = psych_data(:,i) - mean(psych_data(:,i));end% 计算协方差矩阵并降维C = cov(data_centered);[V,D] = eig(C);E = diag(D);[u,v] = sort(E,'descend');V = V(:,v);k = 2; % 保留2个主成分X_pca = psych_data * V(:,1:k); % 降维后数据fprintf('降维后的二维特征数据:\n');disp(X_pca);

2. 熵权TOPSIS法核心代码(MATLAB改写)

% 熵权TOPSIS法计算综合得分X = []; % 省略:导入标准化后的量表数据[n,m] = size(X);% 计算信息熵e = zeros(1,m);for j = 1:m p = X(:,j)/sum(X(:,j)); e(j) = -sum(p.*log(p))/log(n);end% 计算权重与综合得分d = 1 - e;w = d/sum(d);% 省略:正理想解、负理想解及距离计算代码C = D_neg ./ (D_pos + D_neg); % 综合得分fprintf('各评估对象综合得分:\n');disp(C);

封面