1. 绪论
对于男性泌尿生殖系统而言,最常见的恶性肿瘤之一非前列腺癌莫属 [1]。伴随着生活方式的极大改变以及人口的老龄化,目前,前列腺癌是我国泌尿外科中发病率最高的一种,其平均发病率达到了男性恶性肿瘤的第六位。前列腺癌不仅给患者的生命和家人带来了一种不可磨灭的损失和伤害,也给社会和国家的发展带来了沉重的压力,它的平均死亡率和疾病发生数量都呈逐年递增的变化趋势,术前及时有效地进行诊断对于正确制订治疗计划以及进行预后评估具有非常好的意义 [2]。
王逸飞等人 [3] 选择了XGBoost机器学习算法对前列腺癌的预测模型进行构建,同时利用SHAP方法解释模型特征的实际意义 [4] [5] [6]。在实际生活中,MRI是临床诊断前列腺癌主要检查方式,同时T2WI、T1WI增强扫描能够清晰显示肿瘤组织血管,前列腺含有丰富的供血组织,一定程度上影响检出率 [7]。动态增强MRI (dynamic enhanced MRI, DCE-MRI)有助于评估血流灌注及血管通透性,利用薄层扫描技术实现局部病变数据动态采集,提高诊断准确率 [8]。法慧 [9] 使用结构方程模型对前列腺癌与前列腺增生进行鉴别诊断。
目前机器学习算法在数据分析中有很大优势,同时一些集成模型或者融合模型比一般的机器学习算法的性能更好,因此本文考虑将性能较好的算法用于前列腺患者数据中,根据前列腺疾病的一些特征,来预测患者患有前列腺疾病中的哪一种类型,从而给出精准的治疗措施。
2. 数据处理与统计方法
2.1. 数据采集与来源
本文采用的数据“前列腺肿瘤预警数据集”(来源于“国家人口健康科学数据中心数据仓储PHDA”)。数据集中共包含129例前列腺增生患者(标签为1)、46例前列腺癌患者(标签为2)及25例同时患有两种疾病的患者(标签为3)的真实临床信息。
2.2. 数据预处理
删除数据缺失比率大于90%的七个指标,保留指标24个。对于低密度脂蛋白胆固醇、钾、载脂蛋白A1、载脂蛋白B这四个指标,缺失比率大约为10%,使用默认值进行填补;对于其余指标,使用其平均值进行填补。经过预处理后,共保留特征24个,样本197例,其中前列腺增生患者127例,前列腺癌患者45例,同时患有两种疾病的患者25例。
对于提取的不同指标,指标变量之间的量纲和数值的量级不一样,在训练模型之前,将这些数据进行标准化,能够有效地加速指标权重参数的收敛,消除各个指标之间的误差。为减少数据量纲对模型的影响,本文选择了归一化方式进行了预处理。
2.3. 指标选取
通过随机森林、方差阈值过滤法和交互信息过滤法三种方法对数据进行指标提取,利用交集的方法,最后共选取了11个指标,即:PSA (游离)、PSA (总)、肌酸激酶同工酶、球蛋白、高密度脂蛋白胆固醇、甘油三酯、血清尿酸、钠、无机磷、钙和肌酸激酶。

Figure 1. The structure of Stacking classification model
图1. Stacking分类模型结构图
2.4. 统计方法
2.4.1. 机器学习模型
本文通过数据分析软件Python,采用了几种机器学习的方法对前列腺患者数据建立分类模型。最后根据每种机器学习的预测结果建立了Stacking分类模型。Stacking分类模型的结构如图1所示。
Stacking分类模型的效果取决于两个方面:一个是个体学习器的预测效果,通常个体分类器的预测效果越好,模型综合算法的预测效果越好;另一个是个体学习器之间需要有一定的差异性,因为每个模型的主要关注点不同,这样模型综合才能使每个个体学习器充分发挥其优点。
2.4.2. 模型优化及评价
在进行建立模型之前,将样本数据划分训练集、测试集和验证集,确定训练集、验证集和测试集的比例为6:2.5:1.5。在验证集中利用5折交叉验证和网格搜索法确定几种机器学习算法的参数并完成模型训练。利用测试集的混淆矩阵计算precision (精确率)、recall (召回率)和f1-Score3个指标,用于评价分类模型的性能。精确率指的是,对于预测结果而言,分类器判定为正的样本中含有多少对的样本;召回率指的是,对于样本而言,被预测正确的样本占正样本的比例;F1分数兼顾了两者,是对于模型的准确率和召回比例之间的一种等价调和平均。
每一类评价指标的计算公式如下:
(1)
(2)
(3)
3. 统计建模与分析
3.1. 描述性分析
通过对数据集进行预处理之后,先对该数据集中的年龄和患病类型两个字段做一个简单的统计,最小年龄为40岁,最大年龄为89岁,以十年为区间长度,一共分成五个区间。下面给出分年龄段患病人数的频数表,具体如果见表1所示。

Table 1. Frequency table of patients by age
表1. 分年龄段患病人数的频数表
从表1可以得知,前列腺患病的人数大多集中在70~80岁的年龄段,其次是在60~70岁年龄段,这两个两年龄段大约占了整个人数的86%。甚至可以发现:前列腺患病的年龄段是以60岁为分界线,60岁以上的人数占了95%。这说明人老了,人的身体机能逐步下降,这时应该更加的注重自身身体的健康情况,疾病早发现治愈的可能性就越高。
再对选取的11个指标按照患病类型进行描述性分析,分析各个指标的平均值、最小值和最大值。结果如表2所示(表中的1、2和3分别表示前列腺增生、前列腺癌和同时患有前列腺增生与前列腺癌三类患者)。

Table 2. Descriptive statistical analysis of indicators
表2. 指标描述性统计分析
从表2中,PSA (游离)和PSA (总)这两个指标在第二类别(前列腺癌)表现出较大的差异,平均值和最大值都是第二类别最大,这三个类别的最小值差别不大。球蛋白和高密度脂蛋白胆固醇两个指标,它们的均值在三类别中相差不大;球蛋白的最小值在第一类别(前列腺增生)是低于第二类别和第三类别(前列腺增生与前列腺癌同时患者),最大值则差不多;高密度脂蛋白胆固醇的最小值差不多,但第二类别的最大值要低于其余两个类别。对于肌酸激酶同工酶指标,第三类别的平均值高于前面两个类别;最小值也各不相同,各具特点;第一个类别的最大值远远大于其余两个类别。对于无机磷、钙、甘油三酯和钠四个指标,在平均值、最小值和最大值上,三个类别的值都只有较小的差距,差距不大。肌酸激酶和血清尿酸在最大值上,三个类别的差距有点大,第一类别大于第二类别,第三类别的值最小;而在最小值上,第二类别的血清尿酸的值大于其余两个类别,第三个类别的肌酸激酶的值远大于其余两个类别。对于其余变量,三个类别的值都只有一点差别。
3.2. 分类模型建立与分析
3.2.1. 机器学习模型建模分析
本文分别利用随机森林、Adaboost、GradientBoosting、XGBoost、LightGBM模型在训练集上进行建模并进行比较分析。首先,用验证集对于各个模型进行参数调优,结果如表3所示。

Table 3. The results of parameter adjustment of each model
表3. 各个模型调参结果
其次,对各个模型参数调优前后模型进行评价,采用了三个指标即precision(精确率)、recall(召回率)和f1_score对模型调优结果进行比较评价。
结果如表4所示(表中的1、2和3分别表示前列腺增生、前列腺癌和同时患有前列腺增生与前列腺癌三类患者)。

Table 4. Comparison of evaluation indicators before and after adjusting parameters of each model
表4. 各个模型调参前后评价指标对比
从表4中的precision (精确率)、recall (召回率)和f1_score三个指标来看,随机森林进行调优之后的效果还不如参数使用默认值,不调优的模型效果比决策树调优之后的效果要好一些,但都有一个同样的问题,对于第三类,模型不能友好地识别。Adaboost调参之后的准确率、召回率和f1_score有略微提升,对第三类别也能够识别了,但是整体来看,准确率并不高。GradientBoosting调参之后的准确率、召回率和f1_score没有调参之前的效果好,而且调参之前对于第三类别能够识别,调参之后却不能够识别。XGBoost进行参数调优之后,准确率、召回率和f1_score有略微提升,说明模型效果比较好,但对第三类的识别还是比较困难。LightGBM模型进行参数调优之后,对于第一类别的准确率、召回率和f1_score有略微提升。
根据以上对于各个分类模型的评价结果分析来看,几乎每个模型对于第二类和第三类的识别度都很低,但每个模型的侧重点不一样,因此,接下来考虑将使用stacking模型,来尝试进行重新分类,stacking模型里的基础模型根据以上的分析结果来选择。
3.2.2. Stacking融合模型建模分析
不难发现随机森林、Adaboost、XGBoost、LightGBM这四种模型的预测效果好于其他模型。本文为了提高模型的准确率与泛化能力,将上述四种模型进行综合,即利用这几个学习器去预测前列腺患者类型,得到的结果为新的训练集,将其输入XGBoost,然后去训练一个新的模型,得到最终的预测模型。
经过对第二层的机器学习模型的参数调整后,将个体学习器和Stacking模型在测试集上进行预测,把得到的预测结果进行对比,结果如表5所示。

Table 5. Comparison of single learners and Stacking model
表5. 个体学习器与Stacking模型对比
由表5可见,个体学习器和Stacking模型在测试集上的预测准确率有一定的差距,使用Stacking模型对于第二类和第三类都能非常好的识别,准确率达到了96%,高于所有个体分类器。Stacking模型算法综合了各个体分类器的优点,并充分发挥了集成模型的性能,因此具有更强的泛化能力和更好的预测效果。
4. 结论
本文对数据进行了处理之后,利用随机森林、方差阈值过滤法和互信息过滤法,从22个指标值中,选取了11个指标作为构建模型的最终指标,这11个指标分别为:PSA (游离)、PSA (总)、肌酸激酶同工酶、球蛋白、高密度脂蛋白胆固醇、甘油三酯、血清尿酸、钠、无机磷、钙和肌酸激酶,在三类患者间的差异有统计学意义。
分别对三类患者的11个指标进行了描述性统计分析,发现PSA (游离)和PSA (总)这两个指标在三类患者身上表现出较大的差异,平均值和最大值都是前列腺癌患者最大。对于球蛋白和高密度脂蛋白胆固醇两个指标,前列腺增生患者的球蛋白的最小值低于前列腺癌患者与同时患有前列腺增生和前列腺癌的患者;前列腺癌患者的高密度脂蛋白胆固醇的最大值要低于其余两类患者。
利用机器学习算法对前列腺增生、前列腺癌以及同时患有前列腺增生和前列腺癌的患者构建分类模型,结果表明随机森林、Adaboost、XGBoost和LightGBM四个模型效果较好,最后构建以XGBoost为最终学习器的Stacking模型,对三类患者进行了有效分类和预测,最终,Stacking模型的准确率达到了96%。