Boosting算法及其在中医亚健康数据分类中
的应用
李霞/何丽云/刘超
【内容提要】
目的 应用boosting算法建模,对亚健康状态的人群进行分类并分析其临床特征,同时与通常使用的logistic统计方法进行比较研究。方法 使用不同损失函数下boosting算法对亚健康状态流行病学调查数据的健康和亚健康人群进行分类;同时,通过重要性度量分析得到亚健康状态的重要临床特征。结果 采用boosting算法对亚健康人群进行的分类得到了分类准确性及重要影响变量。结论 使用boosting算法对亚健康人群进行分类的方法比传统的两种logistic回归模型分类准确率要高,同时也可以得到影响亚健康状态的重要变量。 【关键 词】logistic回归/boosting/损失函数/重要性度量
统计学习是当前活跃在各个科研和应用领域中的一门学科,可以看作是新一代统计学
的重要分支,它同时将模型的可解释性和预测准确性考虑到对数据的建模当中,而其中的boosting方法由于其优良的预测准确性在近几年中最为引人注目,因此,本文考虑将其纳入本研究当中,并同传统的logistic回归判别模型进行比较。
亚健康状态是现代社会的新概念,其发生受社会竞争加剧,工作压力加大,心理负担加重及不良情绪干扰等因素的影响而日益增多,不仅影响人们的生活质量,也与多种慢性非传染性疾病的发生发展密切相关。但由于亚健康状态概念宏观模糊,与正常和疾病状态难以明确界定,给临床研究带来困难。本研究应用boosting分类建模方法,对亚健康状态的流行病学调查数据进行分析,建立了亚健康状态判断模型并对其临床特征进行了研究,现报道如下。
一、资料与方法 (一)资料来源
本组资料来源于2003年3月到10月对北京市不同行业的居民,发放亚健康状态中医基本证候流行病学调查[3]问卷4000份,回收问卷3676份,合格问卷3624份。 (二)研究标准
(1)被调查者纳入标准:①符合本课题的亚健康专家诊断标准[2];②年龄35~55岁;③愿接受调查者。
(2)合格问卷的判断标准:①一般信息中除地址和联系方式外的项目必须填写;②再次
排除有疾病诊断者;③全部问题条目的缺失和漏填不超过5%。 (3)问卷排除标准:①不符合纳入标准者;②患有心脑血管、糖尿病、肿瘤等重大疾病者;③患非重大疾病但需用药维持者;④不愿合作者。 (三)研究目的与方法 (1)研究目的 ①亚健康分类模型的建立,即从初步分类的数据集中抽象出一个分类模型,该模型能够很好地拟合当前分类结果并能解释其意义,对未知的人群分类具有指导作用,具有预测意义,这是通用的目的之一。 ②对亚健康临床特征进行分析,即从亚健康的56个症状变量中筛选出重要的因素,为亚健康诊断研究打下基础,这使得模型必须对实践具有指导和解释意义。 (2)研究的方法——基于boosting算法的模型 boosting算法是一种用来提高学习算法准确度的方法,这种方法通过构造一个预测函数系列,然后以一定的方式将它们组合成一个预测函数,达到把一弱学习算法提升为强学习算法的目的。1989年Schapire提出了第一个可证明的多项式时间boosting算法,对这个问题作出了肯定的回答。一年后,Freund设计了一个高效得多的通过重取样或过滤运作的boosting-by-majorty算法。这个算法尽管在某种意义上是优化的,但却有一些实践上的缺陷。1995年Freund和Schapire介绍了通过调整权重而运作的Ada-Boost算法AdaBoost,AdaBoost1M1,AdaBoost1M2,AdaBoost1R,解决了早期boosting算法很多实践上的困难。 boosting算法是一种基于其他机器学习算法之上的用来提高算法精度和性能的方法。当用于回归或分类分析时,不需要构造一个拟合精度高、预测能力好的算法,只要一个效果只比随机猜测略好的粗糙算法即可,称之为基算法。通过不断地调用这个基算法就可以获得一个拟合和预测误差都相当好的组合预测模型。boosting算法可以应用于任何的基础算法,无论是线性回归、决策树、神经网络、还是SVM方法,都可以有效地提高精度。因此,boosting可以被视为一种通用的增强基础算法性能的回归分类分析算法。 本文的模型训练过程:首先将全部样本2613例按7:3的比例随机分为训练集(1830例)和测试集(783例),在训练集上训练模型,在测试集上对模型准确性进行测试。 (3)研究辅助工具 所有建模过程均通过在R中编程实现。 二、过程及结果 参数,并同时得到相应的系数β: (2)将上一步求得的导数看作是伪因变量,用基函数去拟合这个因变量,得到基函数的 在该算法中,最终得到的实际上是多个基函数的线性组合,在此过程中除了需要考虑损失函数L(y,F)以外,通常还要选定基函数{h(x)}空间,由于决策树具有多种优点,因此在本文中我们考虑使用决策树作为基函数。同时,选择决策树作为基函数还可以得到预测变量的重要性度量。我们可以先从单个决策树入手,假设树的叶节点有J个,Breiman等人(1984)提出了对于单个决策树的变量重要性度量,当目标变量为区间型时,重要性度量为由节点到分裂后的节点间误差平方和的减少,即: 总之,在确定了损失函数、基函数、优化搜索策略后,就可以使用boosting算法对一个分类问题进行建模。在以下的讨论中损失函数我们主要集中在以上提到的两个损失函数,基函数采用决策树(深度为3)、最优迭代停止次数通过5折交叉验证来设定。 1.bernoulli分布的损失函数
当响应变量的取值为二分类变量时,首先我们考虑使用bernoulli对数似然函数作为损失函数,即:
L(y,F)=log(1+exp(-yF)) 在建模过程中我们使用5折交叉验证对最优迭代次数进行选择,结果表明当迭代次数=3857时,5折交叉验证的损失函数达到最小。迭代过程如图2右侧图中所示,竖线的横坐标即为最优交叉验证所在的迭代次数,同时得到变量的相对重要性度量图,如图2左图中所示。 图2 迭代过程及变量相对重要性 变量相对重要性的具体数值见表1(仅列出前10位的变量): 表1 变量重要性列表 变量 相对重要性B02 疲乏不易缓解
11.24615831C35 睡眠差而感觉疲劳 7.30508878B04 头脑昏沉 6.72979097B24 气短 5.29293047C48 大便酸腐气 4.85004553B25 胸闷 4.44894938C44 排便困难 4.10301871E67 工作效率下降 3.17515420B01 感觉疲劳 3.08082261D62 手脚打颤或身上忽冷忽热 3.04978211
同时当我们将从训练样本得到的模型应用到测试数据集上时,有关模型判别的判断矩阵如表2所示。
表2 使用基于贝努利分布损失函数的boosting模型判断
原结论 模型判断 亚健康 正常 总数亚健康 515 38 553正常 16 214 230总数 531 252 783
分类总正确率为;(515+214)/783=93.10%;误分率为:(38+16)/783=6.90%。 图3 迭代过程及变量相对重要性 2.指数分布的损失函数 loss function=exp(-ygF)
同样在建模中我们使用5折交叉验证对最优迭代次数进行选择,当迭代次数=2390时,5折交叉验证的损失函数达到最小。迭代过程如图3右侧所示,竖线所在的横坐标即为最优交叉验证所在的迭代次数为2390,同时得到变量的相对重要性度量图,见图3。 表3 变量重要性列表(仅列出位居前10位的变量)
变量 相对重要性B02 疲乏不易缓解
10.65816952B04 头脑昏沉 7.43205088C35 睡眠差而感觉疲劳 6.35083576B24 气短 4.83533831C48 大便酸腐气 4.79418747C44 排便困难 4.45340256B25 胸闷 4.35412420B01 感觉疲劳 3.63297387D62 手脚打颤或身上忽冷忽热 3.40385326E67 工作效率下降 3.22464787
应用到测试数据集上时,有关模型判别的判断结果矩阵见表4。 表4 使用基于指数损失函数的boosting模型判断
原结论 模型判断 亚健康 正常 总数亚健康 517 36 553正常 18 212 230总数 535 248 783
分类总正确率为;(517+212)/783=93.10%;误分率为:(36+18)/783=71/783=6.90%。 我们发现本测试集在采用不同的损失函数时,总正确率和误分率是相等的,稍有不同之处在表2和表3的判断矩阵表格中对应于原先是亚健康状态而判断出亚健康状态的人群以及原先是正常状态的人群而判断出是正常状态的人群计数稍有差异。
比较文献[1]中使用logistic回归得到的正确率而言,本文所讨论的模型判断准确率有