首页 国际新闻正文

决策树最早源于人工智能的机器学习技能,因其具有的超卓的数据剖析才能和直观易懂的成果展现等特色,被归入数据发掘之中,在处理分类问题中,它能够用于辨认是否归于垃圾邮件,也能够用来辨认方针客户,猜测猜测顾客未来的消费,癌症分类等方面。

决策树的根本思想是对猜测变量进行二元别离,然后结构一棵可生殖器纹身用于猜测新样本单元所属类别的树。

本次将介绍两类决策树:

  • 经典树
  • 条件揣度树

1.数据预备

咱们将在Rstudio中运用这两类决策树对威斯康星州乳腺癌数据集进行分类。

威斯康星州乳腺癌数据来源于UCI机器学习数据库中。数据剖析的意图是依据细胞组织细针抽吸活检所反映的特征,来判别被检者是否患有乳腺癌(细胞组织样本单元由空心细针在皮下肿块中抽得)。

本数据集包含699个细针抽吸活检的样本单元,其间458个(65.5%)为良性样本单元,241个(34.5%)为恶性样本单元。数据会集共有11个变量。

榜首个变量ID不归入数据剖析,终究一个变量(类别)即输出变量(编码为良性=2,恶性=4)。关于每一个样本来说,别的九个变量是与判别恶性肿瘤相关的细胞特征,而且得到了记载。这些细胞特征得分为1(最接近良性)至10(最接近病变)之间的整数。任一变量都不能独自作为判别良性或恶性的规范,建模的意图是找到九个细胞兄弟抱一下,机器学习——经典决策树,刘璇特征的某种组合,然后完成对恶性肿瘤的精确猜测。

下面给出R中数据预备流程。数据从UCI数据库中抽取,并随机分出练习集和验证集,其间练习毒医横行会集包含499个样本单元(占70%),其间良性样本单元329个,恶性16檄组词0个;验证会集包含210个样本单元(占30%),其间良性129个,恶性81个。

#读入数据
breast<-read.csv("breast dataset.csv")
#设置class反派大哥的七秀弟弟为分类变量
df <- breast[-1]#删去榜首列id
df$class <- factor(df$class, levels=c(2,4),labels=c("benign", "malignant"))
#将数据集分为练习集和验证集
set.seed(1234)
train <- sample(nrow(df), 0.7*nrow(df))
df.train <- df[train,]
df.validat御天刀帝e <- df[-train,]
tab帅哥被扒le(df.train$class)
table(df.validate$class)

2.经典决策树

经典决策树以一个二元输出变量(对应威斯康星州乳腺癌数据会集的良性/恶性)和一组猜测变量(对应九个细胞特征)为根底。详细算法如下。

(1) 选定一个最佳猜测变量将悉数样本单元分为两类,完成两类中的纯度最大化(即一类中良性样本单元尽或许多,另一类中恶性样本单元尽或许多)。假如猜测变量接连,则选定一个切割点进行分类,使得两类纯度最大化;假如猜测变量为分类变量(本例中未表现),则对各类别进行兼并再分类。

(2) 对每一个子类别持续履行进程(1)。

(3) 重复进程(1)~(2),直到子类兄弟抱一下,机器学习——经典决策树,刘璇别中所含的样本单元数过少,或许没有分类法能将不纯度下降到一个给定阈值以下。终究会集的子类别即终端节点(terminal node)。依据每一个终端节点中样本单元的类别数众数来判别这一终端节点的所属类别。

(4) 对任一样本单元履行决策树,得到其终端节点,即可依据进程3得到模型猜测的所属类别。不过,上述算法通常会得到一棵过大的树,然后呈现过拟合现象。成果便是,关于练习集外单元的分类功能较差。为处理这一问题风吕敷结法,可采用10折穿插验证法挑选猜测差错最小的树。运城李明虎这一剪枝后的树即可用于猜测。

R中的rpart包支撑rpart()函数结构决策树,prune()函数对决策树进行剪枝。下面给出判别细胞为良性或恶性的决策树算法完成。

运用rpart()函数创立兄弟抱一下,机器学习——经典决策树,刘璇分类决策树

  • rpart格局如下:rpart(输出变量~输入变量,data=数据框名,method=方法名,parms=list(split=异质性测度目标),control=参数对象名)
  • control用于设定预修剪与后修剪等参数,其默许参数保存在rpart.control函数中,根本书写格局为

R软件代码如下:

#生成树
dtree <- rpart(class ~ ., data=df.train, method="class">dtree$cptable

plotcp(dtree)
dtree.pruned <- prune(dtree, cp=.0125)
install.packages("rpart.plot")
library(rpart.plot)
prp(dtree.pruned, type = 2, extra = 104,fallen.leaves = TRUE, main="Decision Tree")
dtree.pred <- predict(dtree.pruned, df.validate, type="class">dtree.perf <- table(df.validate$class, dtree.pred,dnn=c("Actual", "predicted"))
dtree.perf

注:

(1) rpart可用于生成决策树

(2) dtree$cptable:rpart()回来的cptable值中包含不降服女领导同巨细的树对应的猜测差错,因而可用于辅佐设定终究的树的巨细。其兄弟抱一下,机器学习——经典决策树,刘璇中,复杂度参数(cp)用于赏罚过大的树;树的巨细即分支数(nsplit),有n个分支的树将有n+1个终端节点;rel error栏即练习会集各种树对应的差错;穿插验证差错(xerror)即依据练习样本所得的10折穿插验证差错;兄弟抱一下,机器学习——经典决策树,刘璇xstd栏为穿插验证差错的规范差。

(3) print(dtree)和summary(dtree)可用于观测所得模型,此刻所得的树或许hnd169过大,需求剪枝。

(4) 人老不以筋骨为能plotcp()函数可画出穿插验证差错与复杂度参数的联系图(如下图所示)。对太孙悍妻于一切穿插验证差错在最小穿插验证差错一个规范差范围内的树,落魄万梓良现在出场费最小的树即最优的树。

(5) 该图是复杂度参数与穿插验证差错。虚线是依据一个规范差原则得到的上限(0.18+稻田丽森10.032录像片6=0.21)。从图画来看,应挑选虚线下最左边cp值对应的树。韩国仁川气候

(6) 本例中,最小的穿插验证差错为0.18,规范差错为0.0326,则最优的树为穿插验证差错在0.180.0326(0.15和0.21)之间的树。由代码清单17-3的cptable表可知,四个终端节点(即三次切割)的树满意要求(穿插验证差错为0.206 25);依据图上图也能够选得最优树,即三次切割(四个节点)对应的树。

(7) 在完好树的根底上,prune()函数依据复杂度参数剪掉最不重要的枝,然后将树的巨细控制在抱负范围内。从代码cptable中能够看到,三次切割对应的复杂度参数为0.0125,然后prune(dtree, cp=0.0125)可得到一个抱负巨细的树4080新。

(8) rpart.plot包中的prp()函数可用于兄弟抱一下,机器学习——经典决策树,刘璇画出终究的决策树,如图下图所示。prp()函数中有许多可供挑选的参数(详见?prp),如type=2可画出每个节点下切割的标签,extra=104可画出每一类的概率以及每个节点处的样本占比,fallen.leaves=TRUE可在图的底端显现终端节点。对观测点分类时,从树的顶端开端,若满意条件则从左枝往下,否则从右枝往下,重复这个进程直到碰到一个终端节点停止。该终端节点即为这一观测点的所属类别。

(9) 用剪男人摸枝后的传统决策树猜测癌症状况。从树的顶端开端,假如条件建立则从左枝往下,否则从右枝往下。当观测点抵达终端节点时,分类完毕。每一个节点处都有对应类别的概率以及样本单元的占比

(10) 终究,predict()函数用来对验证会集的观目土土测点分类。成果给出了实践类别与猜测类别的穿插表。全体来看,验证会集的精确率达到了96%。与逻辑回归不兄弟抱一下,机器学习——经典决策树,刘璇同的是,验证会集的210个样本单元都可由终究树来分类。值得注意的是,关于水平数许多或缺失值许多的猜测变量,决策树或许会有偏。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。