APP下载

基于Xgboost和Keras框架的多疾病风险预测

2020-03-18席欢欢

智能计算机与应用 2020年9期
关键词:神经元神经网络标签

黄 旭, 贺 松, 席欢欢, 张 硕, 张 慧

(1 贵州大学 大数据与信息工程学院, 贵阳 550025; 2 贵州大学 医学院, 贵阳 550025)

0 引 言

随着计算机技术广泛应用于医疗领域,医院信息化建设得到快速发展。医院信息系统中存储了大量的数据资源,运用数据挖掘技术可以有效的分析、整合和利用这些数据,以达到辅助诊疗的目的。利用数据挖掘技术对疾病风险预测,对疾病的管理、预防、干预等有着重要意义。

慢性病非传染性疾病通常具有发病潜伏期长、病因复杂、反复发作、难以彻底治愈的特点,导致的负担占总疾病负担的70%以上,成为制约健康预期,寿命提高的重要因素[1]。因此,在慢性病还没有显现时,就应当做好疾病的预测,提前发现,及时处理,将疾病的影响降到最低。利用数据挖掘技术,找出慢性病发生直接或者间接的危险因素,就能够通过监测这些因素,及时采取预防措施,从而降低发病率。

1 理论方法

1.1 分类算法

集成学习本质上是通过学习并结合多个弱分类器来获得比单一分类器优越的泛化性能[2]。RF、GBDT和Xgboost的弱学习器都是树模型,利用多棵决策树对样本数据训练、分类和预测。在对数据分类时,给出各特征的重要性得分,评价各特征在分类中的作用。

随机森林(Ramdom Forest,RF)是一种基于Bagging算法改进的模型,做分类时,各弱分类器之间无强依赖关系,相互独立,每一个弱分类器都有一个分类结果,最后根据森林内决策树投票,按照少数服从多数的原则,对最终结果进行判定。随机森林具有二个特点:数据随机和特征随机。数据随机指的是对训练集有放回的采样,这样不同的树用到的训练集就会有所差异;特征随机指的是每次从所有特征中随机选择特征子集进行划分,可以增强数据的适应能力,优化高维特征的训练速度。

梯度提升决策树(Gradient Boosting Decision TREE,GBDT)是一种将弱学习器限定为分类回归树(CART)模型的前向分布算法,是boosting算法中的一种,由多棵决策树组成,每一棵决策树模型的建立是为了不断学习之前树的结果,拟合残差,最后将所有决策树的预测值结合起来得到最终答案。GBDT可处理离散或连续型数据,进行少量参数调优,可以达到很好的预测效果,具有较快的运算速度和较强的泛化能力。

Xgboost(eXtreme Gradient Boosting)也称为极端梯度提升算法,是在GBDT基础上的改进,其特点是模型能自动利用 CPU 进行多线程并行计算,提高运算速度,并且对损失函数进行泰勒公式二阶展开,使得预测精度更高。在损失函数后面增加正则项,可以约束损失函数的下降和模型整体的复杂度[3]。Xgboost的目标函数Obj为式(1):

(1)

1.2 超参数优化

网格搜索参数寻优法是一种最基本的参数优化算法。其核心思想是利用穷举搜索,遍历设定参数范围内所有的值,并以验证系统中的评分结果作为指标,得到最优参数。该算法是对参数的每一组情况进行试算,因此,当网格划分的比较密集时,每多一个参数,计算量就会呈几何倍增张,网格搜索寻优法就会非常耗时。

随机搜索区别于网格搜索的暴力搜索方式,采用随机在参数空间中采样的方式,只要随机次数够多,总能找到最优或者近优参数,尽管每次随机结果不一致,但大大提高了高维参数的寻优速度。

1.3 神经网络

神经网络由输入层、隐藏层和输出层构成,如图1所示。隐藏层的层数是任意的,夹在输入层和输出层之间,每层由神经元组成,输入层由训练集的实例特征向量传入,数据集有几个特征输入层就有几个神经元,本文对3种疾病进行二分类,所以输出层是3个神经元。对于每一个神经元模型,当前神经元的输出yj都与上一层神经元xi有式(2)的关系:

(2)

其中,Wij为神经元j与上一层神经元i的权重;θj为神经元的偏向;f为激活函数,引入激活函数增强了神经网络的表达能力。

1.4 Keras框架

Keras是一个高层神经网络API,能够使用Tensorflow和Theano任一平台作为后端,快速完成深度学习的开发。用户的体验始终是Keras考虑的首要内容,具有易使用、可抽象、兼容性和灵活性的特点[4]。Keras具有许多模块,网络层、损失函数、优化器、参数初始化、激活函数、正则化方法都是独立的模块,可以使用这些模块来构建自己的模型,大大加快了建模速度[5]。

图1 神经网络

2 特征选择

本文基于训练模型分类性能为标准,以特征重要性排序为主的包裹式选取[6]。

使用前面介绍的3种分类算法(参数为默认值)对几种慢性病建模,对比得到一个准确率较高的算法,重新对几种慢性病建模(使用随机搜索进行参数调优),最后将每种慢性病排名前10的特征选择出来。

2.1 数据预处理

本研究采用的是UCI机器学习存储库:Chronic_Kidney_Disease数据集,选择其中高血压Htn、糖尿病Dm和冠状动脉疾病Cad三条属性做分类研究,将“?”做空值处理,将二分类属性做0和1处理,每条属性的均值填入空值处,删掉3种疾病属性中原含有空值的样本,得到一个397×25的数据集。

2.2 模型建立

采用Python语言建模,将数据集按照7:3的比例划分, 70%作为训练数据来训练模型;30%作为测试数据,用来检测模型的性能。使用机器学习库sklearn中的RF、GBDT和Xgboost3种分类算法,不对各算法调参下建模。

使用准确率、精确率(查准率)、召回率(查全率)、F1值作为评价标准对分类器模型进行性能评价,由表1~表3可知,Xgboost在3种疾病上的预测准确率最高,并降低了误诊率和漏诊率。

2.3 超参数优化

GridSearchCV(网格搜索)和Random-izedSearchCV(随机搜索)都是sklearn包中自动调参的方法,系统地遍历多种参数组合,通过交叉验证确定最佳效果参数。这里选择寻优速度更好的随机搜索法。

Xgboost中有6项主要参数,不同参数有不同的功能,这些参数设定是否合理,对于模型的好坏有重要影响[7]。选择的6项参数以及搜索范围如表4所示,以“F1”为准确度评价标准,随机搜索次数n_iter设为1000。由于随机搜索的特性,记录10次调参结果,取最优的结果,见表4、表5。

表1 Htn各分类器性能比较

表2 Dm各分类器性能比较

表3 Cad各分类器性能比较

表4 Xgboost最佳参数及调参范围

表5 Xgboost调参性能

2.4 特征重要性

使用xgboost模块中plot_importance函数对特征进行重要性排序,使用特征在所有树中被用作分割样本的特征的次数“weight”作为特征重要程度的判断指标,留下排名前10的特征。得到3种慢性疾病的主要危险因素,如图2~图4所示。

图2 Htn特征重要性

图3 Dm特征重要性

图4 Dm特征重要性

对3种慢性疾病的主要危险因素做并集处理,得到Bu血液尿素、Bgr血糖、Age年龄、Pcv红细胞压积、Sc血清肌酐、Bp血压、Rbcc红细胞计数、Sod钠、Hemo血红蛋白、Wbcc白细胞计数、Su糖、Pot钾、Appet胃口,共13种主要危险因素,其中6项3种疾病共同拥有;5项2种疾病共同拥有,只有两项是单独拥有,因此慢性病在预测时不好判断,将医生多年的诊断经验模型化,利用限特征进行疾病预测。

3 多疾病风险预测

一种疾病危险因素可能是多种疾病的判断标准。因此,采用相同危险因素对多种疾病同时进行风险预测,用问题转化的方法将多疾病风险预测问题转化为多标签分类问题。

3.1 多疾病标签转换

问题转化方法中Binary Relevance(BR)和Label-Powerset(LP)是两种具有代表性的方法[8]。BR方法是将多标签转化为多个相互独立的单标签二分类问题;LP方法是将多个标签转化为多分类单标签问题,3个标签就有23个类。本文选择神经网络作为基础算法,利用深度学习框架Keras建立神经网络模型,选择损失函数binary cross entropy和categorical cross entropy分别对应问题转化中的BR和LP方法。

3.2 构建神经网络模型

神经网络采用序贯模型。输入层有13个神经元;经过多次试验,隐藏层设置为4,神经元都为10,后面3层引入Dropout和L2正则化来防止模型过拟合,激活函数选择使用非线性函数ReLU函数。ReLU函数是分段线性函数,在梯度下降算法运算中拥有较好的性能;输出层,BR方法神经元设置为3,配合使用sigmoid函数作为激活函数,LP方法神经元设置为8,配合使用softmax函数作为激活函数。对于已有数据集标签,BR方法可直接使用;对于LP方法,需要对3个标签组合,再将二进制数转化为10进制数,最后进行onehot编码。

3.3 训练模型

将数据按8:2划分,80%用于网络训练,20%用于精度测试,将数据归一化处理,避免数值量级差异引起权值过大或过小,并提升了运算速度。优化方法选择了一种自适应梯度下降方法Adam,与其他优化算法相比,其收敛速度较快,学习效果更为有效;二种方法都以acc作为度量标准。经过多次实验,模型训练的轮数epochs设置为100,指定权重更新的每个批次所使用实例的个数为3。

3.4 结果分析

使用evaluation函数来评估模型的准确率,由训练返回值history作acc-loss曲线,如图5所示。得到LP方法的acc为67.50%,loss为0.93;BR方法的acc为86.25%,loss为0.33,可以看出BR方法的准确度更高,损失值更趋近于0,预测效果更好。但是这种方法不考虑疾病间的关联性,模型简单,需要进一步优化增加标签之间关联性才能用于多疾病预测;LP方法考虑了标签与标签之间的关联,增加了复杂度,使得准确率降低,使用此方法对某一样本预测时,输出端8个值的和为1,其中最大值对应索引即为预测结果,最大值就是预测概率。

图5 acc-loss曲线

4 结束语

本文阐述了随机森林、GBDT和Xgboost3种集成学习算法的原理及特点,基于3种慢性病,使用寻优速度较好的随机搜索法对其中分类效果最好的Xgboost进行超参数优化,分别得到3种慢性病特征重要性排名前10的危险因素。使用keras框架构建神经网络模型,对这些危险因素进行多疾病风险预测,对比分析了BR和LP两种问题转化方式得到的结果。在今后的研究中,要进一步丰富数据,采用更好的数据处理方法,构建更为复杂的神经网络;对损失函数进行研究,在BR方法的基础上考虑标签之间的关联性。

猜你喜欢

神经元神经网络标签
基于神经网络的船舶电力系统故障诊断方法
MIV-PSO-BP神经网络用户热负荷预测
基于改进Hopfield神经网络的对地攻击型无人机自主能力评价
AI讲座:神经网络的空间对应
仿生芯片可再现生物神经元行为
不害怕撕掉标签的人,都活出了真正的漂亮
这个神经元负责改变我们的习惯
三次样条和二次删除相辅助的WASD神经网络与日本人口预测
研究人员精确定位控制饮酒的神经元
让衣柜摆脱“杂乱无章”的标签