热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python随机森林筛选变量_一种基于随机森林的改进特征筛选算法

刘云翔陈斌周子宜摘要:肝癌是一种我国高发的消化系统恶性肿瘤,患者死亡率高,威胁极大。而其预后情况通常只能通过医生的专业知识和经验积累来粗略

刘云翔 陈斌 周子宜

463909fd40cadf434a4069af5023ff41.png

93f91aff8059ffe52c4ca4c80d0ff200.png

de8a5d682c22c2c786e0d481741382ea.png

摘  要: 肝癌是一种我国高发的消化系统恶性肿瘤,患者死亡率高,威胁极大。而其预后情况通常只能通过医生的专业知识和经验积累来粗略判断,准确率较差。因此文中在分析随机森林算法的基本原理的基础上,提出一种改进的基于随机森林的特征筛选算法,并应用Python编程设计了一个能够预处理数据、调用这些算法、控制各参数并展现测试结果的系统,最终将该系统应用于肝癌预后预测,比较分析了不同的算法、参数、内部策略对预测精度和计算性能的影响。研究结果表明,随机森林相比剪枝过的决策树具备更好的泛化能力和训练速度,改进的特征筛选算法能够在保证预测精度的前提下显著缩小特征集。

关键词: 随机森林算法; 特征筛选; 肝癌预后预测; 决策树; 预测精度; 特征集

中图分类号: TN911?34; TP3?05; TP312          文献标识码: A                文章编号: 1004?373X(2019)12?0117?05

Abstract: Liver cancer is a malignant tumor of the digestive system highly occurred in China, which causes high mortality of patients and great threat to their lives, and its prognosis conditions are often roughly judged by doctors with their professional knowledge and experience accumulation, which has poor accuracy. Therefore, on the basis of analyzing the basic principle of the random forest algorithm, an improved feature selection algorithm based on the random forest is proposed in this paper. The Python programming design is applied to design a system that can preprocess data, recall the algorithms, control various parameters and display test results. The system is applied to the prognosis prediction of the liver cancer. The influences of different algorithms, parameters and internal strategies on the prediction accuracy and computing performance are compared and analyzed. The research results show that in comparison with the pruned decision tree, the random forest has a better generalization ability and training speed, and the improved feature selection algorithm can significantly reduce the feature set on the premise of guaranteeing the prediction accuracy.

Keywords: random forest algorithm; feature selection; liver cancer prognosis prediction; decision tree; prediction accuracy; feature set

0  引  言

肝癌是一种我国高发的消化系统恶性肿瘤,患者死亡率在恶性肿瘤中高居第三,威胁极大。该疾病的预后情况通常只能通过医生的专业知识和经验积累来粗略判断,准确率较差,对医生和患者都造成了不利影响。目前国内外对该方面进行预测的系统性研究甚少,大多局限于某些具体指标对预后产生的意义,更没有相应的模型或软件。但是国内尚无成熟的原发性肝癌数据库,这可能和肝癌数据分散,难以大批量获得有关。目前国内将数据挖掘应用于肝癌预后预测研究主要的尝试有申羽等人运用朴素贝叶斯算法[1]和于长春等人应用改进的神经网络算法[2]对原发性肝癌预后预测进行应用研究。随着医学上的数据采集设备不断更新换代,基于大样本的数据挖掘技术将逐步在医学应用中崭露头角,显现出了重要的实用价值和广阔的发展前景。

本文将随机森林算法应用于原发性肝癌的数据分析,以期在临床上能够借助计算机进行预后预测,帮助选择治疗方案。此外,还改进并验证了一种基于随机森林的特征筛选算法,以降低模型训练的开销和数据采集的难度。本文采用Python语言实现了上述算法的各个细节,组织系统界面,最终进行大量的测试,详细分析不同参数和内部策略对性能、输出造成的影响,对模型选择提供了建议。

本文數据来自第二军医大学东方肝胆医院,共有588个病例和3个类别,在专业人员的帮助下去除了很多无关指标,每例剩余39个可用指标。

1  随机森林算法原理

随机森林是以决策树为基学习器的集成学习方法,它包含多棵随机产生的决策树并将它们的预测结合输出[3?4]。随机森林采取了Bagging思想和特征子空间思想,比单一决策树有更好的抗噪性,并且不易过拟合,可以显著提高泛化能力[3]。随机森林在Bagging思想的样本扰动基础上,又加入了属性扰动,即特征子空间思想:在各决策树的每个节点上选取最佳划分特征时,候选特征集都是从该节点的特征集中随机抽取的一个子集,而不再是该处的整个特征集。特征子集的大小k决定了随机程度,通常取[k=M]或[k=log2M+1],其中M是当前节点的特征总数。特别地,当[k=1]时,每个特征都是随机选取的;而当[k=M]时,建立的是普通决策树。

由于每棵决策树的训练集和节点上的特征子集都是独立抽取,所以它们的预测结果也是相互独立的。根据Bagging思想,随机森林在分类时用简单投票法取各决策树的多数预测结果。随机森林构造的是多棵“随机”的决策树,其中单棵的泛化能力通常低于在同样训练集上构造的普通决策树,然而在集成后整体的性能往往会好于只用Bagging方法建立的随机森林,因为各基学习器之间有更大的差异性,可得随机森林中每一棵“随机”决策树的构建算法如下:

初始化每个节点抽取的特征子集大小m

由于各决策树构建过程的随机性,随机森林被证明不会过拟合[4],故每棵树都尽可能地生长而不需要剪枝。与此同时,各分类器同质且相互独立,因此随机森林的建立可以方便地并行完成,速度较快。图1为随机森林的基本流程。

图1  随机森林的基本流程

463909fd40cadf434a4069af5023ff41.png

2  基于袋外误差的特征选择

对于高维数据,一般要进行降维或特征选择,目的是降低模型学习的难度[5?8]。而冗余特征的存在使得特征选择更有必要性,去除这些不相关的特征不但能降低学习的开销,还能给数据采集提供便利。常见的特征选择方式有三类:过滤式、包裹式和嵌入式。过滤式方法在建立学习器之前就对数据集进行特征选择,再用筛选后的特征训练学习器;包裹式方法在候选特征子集上训练学习器,用学习器的性能来评价所选的特征集;而嵌入式方法在训练学习器的同时就能完成特征选择。本节中随机森林的特征选择算法是一种基于袋外误差的包裹式方法。

2.1  特征重要性

随机森林定义了特征的重要性度量,计算某特征X重要性的步骤如下:

1) 对于随机森林中的决策树[Ti],计算它在自己袋外数据上的分类错误数[Ei]。

2) 在该决策树的袋外数据中对X的取值进行随机扰动,重新计算其分类错误数[EXi]。

3) 令[i=1,2,…,n],重复以上两步,其中n是随机森林包含的决策树个数。

4) 特征X的重要性定义为:

这样定义的依据是:如果对某个特征加入噪声后模型的袋外误差显著提升,则说明该特征对预测结果的影响较大,从而有较高的重要性。

2.2  改进的特征选择算法

2010年Genuer R等人和2014年姚登举等人曾提出用随机森林进行特征选择的基本方法[5?6],本文在此基础上设计一种更加快捷的特征选择算法,根据各轮筛选造成的误差增量(相对筛选前)来判断是否要继续筛选,一旦它超过指定阈值就退出迭代,并将上一轮筛选所得的特征集作为结果。這样做的依据是,对于在不断缩减的特征集上训练出的模型,它们的泛化性能一般呈降低趋势,而其降低程度可以作为特征集的评价标准。该策略的实质是在给定误差范围内优先选择最小的特征子集,而不是测试精度最高的,从而能够尽早停止筛选,节省大量时间。不将误差增量阈值简单置为0的原因是,除了剔除不相关特征之外还希望去除一些弱相关特征,而且这样也能容许每次测试的微小偏差。试验结果表明,筛选后的特征集其实并不会产生像阈值那样大的误差增量,在其上的测试精度可以与筛选前持平甚至更高。

由于交叉验证的过程中会产生多个随机森林,故选择其中测试精度最高的一个来计算当前轮次的特征重要性顺序。计算特征重要性的流程图如图2所示。

图2  计算特征重要性的流程图

93f91aff8059ffe52c4ca4c80d0ff200.png

3  在肝癌数据上的应用和分析

3.1  数据概览和预处理

训练和测试数据为肝癌病例588例,由第二军医大学东方肝胆医院提供,在专业人士的帮助下去除了许多无关指标,并将所有记录数值化。每个病例剩余39个匿名指标,类标签有3种:

1) 恶性肿瘤,包含246例(41.8%);

2) 正常,包含193例(32.8%);

3) 良性病变,包含149例(25.3%)。

由于隐私保护、记录丢失等客观原因,样本集缺失值较多,共693处,缺失值超过5个的样本被程序自动丢弃,剩余519例。此外,每个样本包含6个离散型指标,下标分别为:0,16,17,18,19,20。

本文测试过程中的操作平台的配置为i7?3930k、16 GB内存,开发和测试环境为WIN7 64 bit、Anaconda 5.1.0,其中Python解释器版本3.6.5(64 bit),预处理数据结果如图3所示。

3.2  模型评估方法

由于是分类问题,故模型的损失函数为0?1损失,而模型的测试误差是其在测试集上的平均损失[9?11]。设模型f的输入是X,Y是对应X的真实值,测试样本容量为N,则损失函数L、测试误差e和测试精度r的形式化定义如下:

图3  读取的文件

de8a5d682c22c2c786e0d481741382ea.png

模型的复杂度可以直接由代码段在同1台计算机上的运行时间衡量,也可以通过决策树的叶节点个数来比较。记录的运行时间由Python计时器获得[9]。



推荐阅读
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • 网络流24题——试题库问题
    题目描述:假设一个试题库中有n道试题。每道试题都标明了所属类别。同一道题可能有多个类别属性。现要从题库中抽取m道题组成试卷。并要求试卷包含指定类型的试题。试设计一个满足要求的组卷算 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文详细介绍了 Redis 中的主要数据类型,包括 String、Hash、List、Set、ZSet、Geo 和 HyperLogLog,并提供了每种类型的基本操作命令和应用场景。 ... [详细]
  • 本文介绍了如何利用OpenCV库进行图像的边缘检测,并通过Canny算法提取图像中的边缘。随后,文章详细说明了如何识别图像中的特定形状(如矩形),并应用四点变换技术对目标区域进行透视校正。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
  • 本文探讨了Python类型注解使用率低下的原因,主要归结于历史背景和投资回报率(ROI)的考量。文章不仅分析了类型注解的实际效用,还回顾了Python类型注解的发展历程。 ... [详细]
  • 吴石访谈:腾讯安全科恩实验室如何引领物联网安全研究
    腾讯安全科恩实验室曾两次成功破解特斯拉自动驾驶系统,并远程控制汽车,展示了其在汽车安全领域的强大实力。近日,该实验室负责人吴石接受了InfoQ的专访,详细介绍了团队未来的重点方向——物联网安全。 ... [详细]
  • 在测试软件或进行系统维护时,有时会遇到电脑蓝屏的情况,即便使用了沙盒环境也无法完全避免。本文将详细介绍常见的蓝屏错误代码及其解决方案,帮助用户快速定位并解决问题。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 本文探讨了如何将个人经历,特别是非传统的职业路径,转化为职业生涯中的优势。通过作者的亲身经历,展示了舞蹈生涯对商业思维的影响。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
author-avatar
iar2984165
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有