热门标签 | 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]。



推荐阅读
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 在 Flutter 开发过程中,开发者经常会遇到 Widget 构造函数中的可选参数 Key。对于初学者来说,理解 Key 的作用和使用场景可能是一个挑战。本文将详细探讨 Key 的概念及其应用场景,并通过实例帮助你更好地掌握这一重要工具。 ... [详细]
  • 非公版RTX 3080显卡的革新与亮点
    本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 在 Windows 10 中,F1 至 F12 键默认设置为快捷功能键。本文将介绍几种有效方法来禁用这些快捷键,并恢复其标准功能键的作用。请注意,部分笔记本电脑的快捷键可能无法完全关闭。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • #点球小游戏fromrandomimportchoiceimporttimescore[0,0]direction[left,center,right]defkick() ... [详细]
  • 本文详细介绍了如何通过RPM包在Linux系统(如CentOS)上安装MySQL 5.6。涵盖了检查现有安装、下载和安装RPM包、配置MySQL以及设置远程访问和开机自启动等步骤。 ... [详细]
  • 本教程详细介绍了如何使用 TensorFlow 2.0 构建和训练多层感知机(MLP)网络,涵盖回归和分类任务。通过具体示例和代码实现,帮助初学者快速掌握 TensorFlow 的核心概念和操作。 ... [详细]
  • 社交网络中的级联行为 ... [详细]
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社区 版权所有