徐万佶 曾庆

摘 要:目的 比较R语言中rpart包与party包所构建决策树的不同。两个不同的包所构建的模型可推广应用于其他领域的决策树分类问题。实验过程中涉及的数据预处理、分类树建模、模型可视化、测试的思路与方法,也可借鉴应用于其他领域的分类树建模预测工作。方法 对R语言内置数据集iris应用分类回归树(classification and regression tree,CART)方法与条件推断决策树,并运用R语言实现并建立决策树模型。结果 rpart包所得决策树模型与party包所得决策树模型在预测iris测试集的准确率均为96.7%。结论 rpart包所得到的决策树与party包所得到的决策树在对iris测试集的预测效果上无差异。

关键词:分类决策 树R语言 rpart包 party包

中图分类号:C819 文献标识码:A 文章编号:1672-3791(2018)04(b)-0020-03

Abstract:Objective To compare the differences between the rpart and party packages in the R language. The model constructed by two different packages can be applied to decision tree classification in other fields. The data preprocessing, classification tree modeling, model visualization, and testing ideas and methods involved in the experiment process can also be used for modeling and prediction of classification trees applied to other fields. Methods The classification and regression tree (CART) method and conditional inference tree were applied to the built-in data set iris of the R language, and a decision tree model was implemented using R language. Results The accuracy rate of the iris test set was 96.7% for the decision tree model obtained from the rpart package and the decision tree model obtained from the party package. Conclusion There is no difference in the prediction effect of the iris test set between the decision tree obtained by the rpart package and the decision tree obtained by the party package.

Key Words:Classification;Decision tree;R language;Rpart package;Party package

1 问题的提出

数据挖掘是通过统计学与机器学习算法,在大量的历史数据中挖掘出隐藏在其中的、有预测性和指导性的信息的科学。在数据挖掘中的一个重要研究课题是如何对数据集进行分类。分类是这样的过程:使用类标签已知的样本建立一个分类函数或分类模型(也常常称作分类器),应用分类模型能把数据库中的类标签未知的数据进行归类分类在数据挖掘中是一项重要的任务。

决策树是构建人工智能系统的主要方法之一,随着数据挖掘技术在商业智能等方面的应用,决策树技术将在未来发挥越来越强大的作用[1]。在R语言中关于决策树建模,最为常用的有两个包:一个是rpart包;另一个是party包。因此,本文主要探讨这两个包在构建决策树时的不同。

2 研究方法

2.1 分类回归树(CART)模型

建立树模型可分为分类树和回归树两种。当数据集的因变量为连续性数值时,该树算法就是一个回归树;当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很好地解决分类问题。但需要注意的是,该算法是一个二叉树,即每一个非叶节点只能引伸出两个分支,所以当某个非叶节点是多水平(两个以上)的离散变量时,该变量就有可能被多次使用[2]。我们从理论上概述决策树的构建过程,这一过程包括如下两个步骤。

第一,决策树的生成。这一过程将初始的包含大量信息的数据集,创建分类树递归过程中,CART每次都选择当前数据集中具有最小Gini信息增益的特征作为结点划分决策树。

第二,生成树的剪枝。由于以上过程是没有停止条件的,所得到的生成树可能会非常大,对训练集很可能存在过拟合,即对训练数据有非常高的分类准确率,但是对于新数据的分类准确率较差。因此,为了保证生成树的推广能力,需要通过剪枝过程对复杂树的节点进行删减,控制树的复杂度,并由树的叶节点数来衡量复杂度[3]。具体的,先找出固定叶节点数下拟合效果最优的树,即局部最优模型;再比较各个叶节点数下的局部最优模型,最终选择出全局最优模型。

2.2 条件推断决策树

它根据统计检验来确定自变量和分割点的选择。先假设所有自变量与因变量均独立。再对他们进行卡方独立检验,检验P值小于阈值的自变量加入模型,相关性最强的自变量作为第一次分割的自变量,自变量选择好后,用置换检验来选择分割点。条件推断决策所构建的决策树不需要剪枝,阈值就决定了模型的复杂程度。如何决定阈值参数是非常重要的。较为流行的做法是取不同的参数值进行交叉检验,选择误差最小的模型参数。

2.3 建模工具

R语言中的rpart包与party包。

在R语言中有许多扩展包可以增强其功能。rpart包[2]的功能就是运用cart算法实现递归分割和树模型构建。其中主要的两个函数分别是用来生成树模型的rpart函数和进行剪枝的prune函数。函数rpart()的基本格式为 :rpart(formula, data , weights , subset, na.actionna.rpart , method, model=FALSE,x=FALSE,Y =TRUE, parms , control, cost, ...)。

Party包做出来的决策树则为条件推断决策树,其主要的语句为ctree语句,ctree的基本格式为ctree(formula, data, subset = NULL,weights = NULL, controls = ctree_control(), xtrafo = ptrafo, ytrafo = ptrafo, scores = NULL)其中前3个参数与rpart包含义无差别[4]。

2.4 数据来源

用来做实例的数据来自R语言内置数据集,此数据集是一个在实验中以真实存在的鸢尾花数据为对象,收集了鸢尾花的萼片、花瓣尺寸等数据,通过这些数据将对鸢尾花的种类进行分类预测。数据集包含150个数据,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa、Versicolour、Virginica)3个种类中的哪一类。

3 数据分析

3.1 rpart包分析步骤

第一,使用分层抽样函数Strata,在三类型鸢尾花数据中各抽取80%作为训练集,保存在变量TrainingSet中;余下的20%作为测试集,保存在变量TestSet中。在三类数据中,求出每类抽取的样本数,以Species变量作为分层变量,分层抽取训练样本,每层 nPerLevel个。过程如下所示:

结果中每一行结果代表一个结点,而首行的n=120说明了数据的总例数为120例,紧接的两行node), split, n,loss, yval, (yprob) * denotes terminal node 两行指示了余下的结果阅读方法和结果值的含义。也就是余下的行显示顺序为编号), 分裂测试属性和其值,分裂时该区(类)的例数,损失函数值(本例是错分例数),目标变量的取值(也就是预测类,各个分类的概率值),如果该行带有 * 号则说明该行是终结点。由某结点(结点编号 n) 分裂而成的结点编号为2n和2n+1。比如:2)Petal.Length< 2.45 40 0 setosa(1.00000000 0.00000000 0.00000000) * 说明该结点编号是2,分裂测试属性是Petal.Length< 2.45,该区分裂前40例,目标变量的值是setosa,分类结果的概率是(1.00000000 0.00000000 0.00000000),也就是其中100% 分类正确。因为其编号为2,所以其父结点编号为1。

由计算得知,rpart包和party包预测测试集的正确率均为96.67%。

5 讨论

本文所描述的实验,研究了基于R语言rpart包与party包进行分类树建模的方法。实验中对一组真实存在的鸢尾花数据进行了数据预处理、划分出训练集与测试集,并进行了分类树建模、模型可视化与测试研究。所建立的分类树模型可借鉴应用于具体的植物种类判别工作。实验中涉及的建模流程与方法,也可以借鉴应用到其他领域的分类树建模与测试工作。在今后的研究工作中,关于R语言的rpart包与party包分类树方法,我们会重点关注两个方面:一是将分类树方法用于其他领域的数据建模中,总结积累建模经验;二是对于不同的数据使用哪种程序包会取得更好的预测效果。

参考文献

[1] Jiawei Han,Michelme Kamber,着.数据挖掘:概念与技术[M].范明,孟小峰,译.北京:机械工业出版社,2001.

[2] 赵北庚.基于R语言rpart包的分类树建模研究[J].信息与电脑,2015(1):87-88.

[3] 谢益辉.基于R软件rpart包的分类与回归树应用[J].统计与信息论坛,2007,22(5):67-70.

[4] 黄文,王正林.数据挖掘:R语言实战[M].北京:电子工业出版社,2014.