Advertisement

人工智能开发实战辅助诊断应用解析

阅读量:

内容导读

  1. 项目分析
  2. 预备知识
  3. 项目实战

一、项目分析

1、提出问题

伴随人们生活水平的提高以及健康意识的日益重视,在这一社会背景下,定期接受健康检查的行为已逐渐成为社会普遍现象。通过早期开展疾病检测与筛查工作,则能及时识别身体内已存在的异常征兆,并在此基础上实现正确的诊断与有效的干预措施。这样的做法不仅有助于预防患病后所带来的一系列痛苦问题,并促使人们及时修正不良生活习惯。

在医疗领域大举进攻并 marks the beginning of the era of intelligent healthcare technology, which is being propelled by the "Artificial Intelligence Brain". As AI-assisted diagnosis becomes a reality, it is gradually becoming a new force in driving medical progress. By leveraging advanced computational methods like big data, cloud computing, machine learning, and deep learning, AI technologies are not only enhancing diagnostic accuracy but also revolutionizing treatment approaches. These cutting-edge innovations are effectively supplementing human capabilities in understanding and managing complex diseases, making them indispensable partners for medical professionals.

传统的医疗诊断仅凭医生目视检查X射线 computed tomography (CT) 儿子超声 magnetic resonance (MR)等影像资料以得出患者的诊疗结论。这一过程既费时又费力,并且存在较大的重复性问题。然而,在当今时代借助人工智能辅助诊疗系统的作用下,则能显著提升医疗机构和医师的工作效率与工作强度水平的同时还能有效降低误诊率和漏诊率的数量统计与发生频率。那么人工智能又是如何协助医师完成病情诊断的具体机制是什么呢?

让我们来看看它是如何利用女性身上的活检数据来识别号称女性头号杀手的乳腺癌的。

2、解决方法

支持向量机SVM特别适合样本相对少、样本特征数较多的应用场合。

从患者体内采集病变组织时可采用手术切除、穿刺采集等多种方法获取活检样本。用于活检的数据难以与其他类型的数据相比拟,并且其成本也相对较高。此外,在获取活检样本的过程中可能涉及患者的隐私信息等敏感内容。若能通过机器学习技术自动鉴别癌细胞的性质(良性或恶性),这对医生和医疗系统都将大有裨益——不仅能够显著缩短诊断所需时间,在不影响患者治疗的前提下为病人争取更多宝贵的治疗时间的同时还能使医生有更多精力专注于临床诊疗工作

利用SVM辅助诊断乳腺癌的解决方案如下图所示。

二、预备知识

用支持向量机SVM来“智慧”识别癌细胞,这个工作无疑是令人兴奋的。

为在后续的工作中合理设计SVM模型,先了解相关的知识。

1、SVM的最优分界面

假设有两分类数据如图所示。

立即需要确定一个最优分界面H,并将其用来把两类数据区分为两个不同的类别。明显存在多种能够实现此类区分的分界面,在图中展示的就是其中几种情况。

分界面H₁和H₄邻近样本族群的边界,并被称为临界分界面。那么哪个分界面是最佳的选择呢?

我们期望获得的最优区分界面不仅能够精确地区分为两类数据,并且期待两边临界区分界面之间的距离最大化。尽管训练样本中可能存在个别噪声样本和离群样本,则由于最优区分界面远离族群,则能在此范围内正确分类这些噪声或离群样本,并且具有较强的抗噪声能力和较小的泛化误差。

临界面上的样本包括样本1、7和10被视为支持向量;H0则代表最佳分界面;由于它到两边临界分界面的距离最大;这表明H0由支持向量所决定;这也是支撑向量机名称的根本原因。

2、SVM模型参数

在常见的多变量分析场景中,各变量之间的关系往往呈现非线性特征;即使在低维输入空间中也无法利用分界面有效地区分两类样本数据集(如图1所示)。

支持向量机旨在通过核函数 K(x,y) 将两类样本分开得更加清晰,在处理复杂分类问题时采用核技巧将其映射至高维空间以提高模型的表现能力。具体而言,在此过程中我们利用核函数 K(x,y) 将输入空间中的样本映射至高维特征空间,并在此过程中使得原本在低维空间中不可分的问题变得线性可分(如图所示)。

这就有点类似于我们换了一个新的视角看数据,看到了不一样的情形。

该种数学工具的形式多种多样;一般而言,在实际应用中需要通过不断试验和验证来选择合适的模型参数;但在不同场景下选择合适的数学工具具有一定的灵活性;虽然不同的数学工具在性能上可能差异不大;然而,在众多选项中最为常见且有效的是径向基函数(RBF) Kernel。

下表就列出SVM模型的常用参数,以便大家在实际应用中合理来选择。

3、样本数据解读

本案例中的样本数据源自网站UCI Machine Learning Repository, 由威斯康星大学的研究人员作为开源项目提供

该数据集主要包含乳腺肿瘤组织切片图像中细胞核的多个测量指标。通过以下代码段读取数据集并分析样本的基本特征信息。

复制代码
    datas=pd.read_csv(r'data\wisc_bc_data.csv',sep=',')

读取的样本数如下图所示:

总共有569个样本相当于乳腺细胞活检案例的数量。每一行的数据包含32个字段其中包括一个编号字段其内容不具有实用价值会在后续的数据处理阶段被排除或隐藏。

诊断列diagnosis取值[M|B],分别表示诊断为恶性或良性。

其他30列由细胞核的10个不同特征的平均值、标准偏差以及最大最小值构成。

通过命令datas.columns查看所有的列名,可知10个特征有:

这10个特征值旨在表征乳腺细胞核的形态特性和尺寸参数,在临床医学中被广泛采用作为诊断工具的关键指标。经验丰富的医疗专家可以通过分析这些特征数据或评估细胞核影像来辅助诊断一名患者是否患有乳腺癌。那么SVM是如何利用机器学习逐步识别出这一模式的具体表现呢?让我们开始进行一次实际操作练习吧。

三、项目实战

1、准备训练集

为了使SVM算法应用于乳腺癌预测研究,在实验过程中需要准备好所需的学习数据;为此,在实验初期首先获取这些数据,并对其进行适当处理;之后将这些处理后的数据最终构建训练集与测试集以供模型使用。

相关的代码如下。

复制代码
 import numpy as np

    
 import pandas as pd
    
 import sklearn.model_selection as ms
    
 	datas=pd.read_csv(r'data\wisc_bc_data.csv',sep=',')
    
 	x=datas.iloc[:,2:32]
    
 	y=datas.iloc[:,1:2]
    
 	x_train,x_test,y_train,y_test=ms.train_test_split(x,y,test_size=0.2, random_state=42)
    
 	y_train=y_train.values.ravel()
    
 	y_test=y_test.values.ravel()

引入模型选择模块用于样本数据划分;加载CSV文件至data对象;提取所有行中的第3至第32列的数据作为输入集合X;收集所有行中的第一至第二列的数据作为输出集合Y;对输入集合X与输出集合Y进行划分,并按比例8:2分开为训练集与测试集。

行8-9各自对训练样本和测试样本的结果值进行维度压缩,并将其转换为一维数组形式,并满足模型训练与测试所需的数据格式要求

以测试样本为例,准备好的数据如下图所示。

通过查看上图所展示的整个训练样本特征值分布情况及标签值信息,并利用这些数据推测模型在完成训练后的表现能力。具体而言,在这114条样本数据中选取部分代表性的病例进行建模分析。

2、构建和训练模型

在获得了训练数据和标签信息之后,我们可以搭建一个SVM模型,并完成它的训练流程

复制代码
 import sklearn.svm as svm

    
 #导入支持向量机模块svm
    
 modle=svm.SVC(C=1, kernel='rbf')
    
 #利用高斯核函数rbf构建模型modle,惩罚参数C取值为1
    
 modle.fit(x_train,y_train)
    
 #利用训练样本对模型modle进行训练

完成模型的训练后,为了评估模型的性能表现,通过以下代码块显示模型训练后的准确率

复制代码
    print(modle.score(x_train,y_train))

模型得分为:

虽然该模型的表现略显不佳,在经过一系列优化后效果仍有待提升;然而,在针对这114条测试样本而言其性能究竟如何仍需进一步观察

3、评估模型预测效果

基于模拟病例库(共涉及114位病患)对模型的诊断效能进行评估,并考察其预测结果与专业医师标注结果的一致性如何;如果存在显著差异,请分析差异原因以判断该模型能否有效地推广至未见过的新病例(或在临床环境中辅助使用)。

代码如下。

复制代码
  import sklearn.metrics as sm

    
 	#导入评估模块metrics
    
 	y_pred=modle.predict(x_test)
    
 	#利用模型modle对测试样本进行预测得到预测值y_pred
    
 	print(sm.classification_report(y_test,y_pred))

用于比较实际标签值y_test与预测值y_pred之间的差异,并通过对比分析得出结论;然后将结果以书面形式呈现为报告,并参考图表中所示的数据。

观察得知,在经过系统测试分析后可以看出,在所有114个测试样本中存在显著差异性表现特征的数据特征集共有95个实例可实现准确分类结果其中约有86%的真实恶性病例能够被正确识别但仍有约14%的真实恶性病例却被错误归类成良性案例在这种情况下这种分类偏差可能带来严重的后果误诊可能导致患者失去治疗最佳时机从而影响病情发展进程

因此,有必要对样本数据或模型进行调整,以便训练出性能更好的模型。

观察样本输入特征值在图表中分布情况。各特征值的大小和范围存在明显差异性特点。比如细胞核半径radius_mean指标的数据点落在区间[6.981, 28.11]范围内而平滑度smoothness_mean指标则分布于[0.05263, 0.1634]区间内两者的数量级存在显著差异这就需要我们对其进行标准化处理以便消除由于量纲不同导致的影响

代码如下。

复制代码
 from sklearn.preprocessing import MinMaxScaler

    
 x=MinMaxScaler().fit_transform(x)

在第1行导入名为MinMaxScaler的min-max标准化类;接着在第2行将所有样本的输入特征值经过归一化处理;随后使用任务2中的相同模型来进行训练;最后再对经过训练后的模型执行测试评估;评估结果如图所示。

通过分析发现,在仅需使用一行代码完成样本集x的标准差处理后,在标签为M的数据上的召回率达到95%,较之前提升了2个百分点;其中B类与M类样本各自对应的F1分数均有所提升:B类提升了2个百分点至...而M类则进一步增长了4个百分点;整体性能表现得到显著改善。

基于训练样本的数据情况能够达到97%的预测精度仍然令人满意

4、模型优化

然而,在用于乳腺癌诊断方面,支持向量机(SVM)模型表现出显著高的预测准确率;然而,在癌症诊断方面的应用效果并不尽如人意;因为无论是在假阴性判断上还是在假阳性判断上都会导致严重的后果;因此为了最大限度地减少误判现象的发生程度应当尽可能避免出现误判情况。

在这里,有必要从以下几个方面不断尝试,试图找到更好的模型。

1、将样本输入特征集x进行Z-score转换

在之前的模型训练过程中,在经过样本数据实施min-max归一化处理后使模型性能得到了增强。那么是否还能通过将样本数据进行标准化处理来提高模型效果呢?

利用以下代码对样本输入变量x进行Z-score转换。

复制代码
 from sklearn.preprocessing import StandardScaler

    
 x=StandardScaler().fit_transform(x)

数据转换后,仍用相同参数模型进行训练和预测,测试结果如下:

可以看出,除了训练得分有一点提高外,模型的预测结果没有什么变化。

有点遗憾的是数据标准化后,并没有让模型在诊断方面表现更好。

2、改变模型参数C

前面提到过可以通过调整SVM模型的相关参数来影响其性能。接下来仅探讨惩罚因子C的取值变化对模型效果及拟合度的影响。

我们的目标在于降低模型误分率,并显著提升其召回率和精确度。为此, 基于C参数的意义, 建议增大C值, 并大幅增加对错分类案例的惩罚力度, 从而降低训练误差。代码如下

复制代码
    modle=svm.SVC(C=1.5, kernel='rbf')

上述代码仅将原C=1升级至1.5,并未更改核函数及其他参数;而C参数的变化前后的预测结果对比如图所示。

左边展示的是C=1时的预测交叉表,右边则是C=1.5时的预测交叉表。对比结果表明,在参数设置为适当较大的值(如1.5)的情况下,所有标记为B的样本均被正确识别,并且分类错误的情况有所缓解。然而需要注意的是,在某些特定类别(如标记为M)上这种提升并未得到体现。

大家可以用不同的C值或其它核函数来测试模型并观察是否能够实现更优的分类效果

更多精彩内容请持继关注本站!

全部评论 (0)

还没有任何评论哟~