决策树 旧城等待, 2022-05-25 05:39 363阅读 0赞 决策树是基于树结构来进行决策,这恰是人类在面临决策问题时一种很自然的处理机制。例如,我们要对“这是好瓜吗?”这样的问题进行决策时,通常会进行一系列的判断或“子决策”:我们先看“它是什么颜色?”,如果是“青绿色”,则我们再看“它的根蒂是什么形态?”,如果是“蜷缩”,我们再判断“它敲起来是什么声音?”,最后我们得出决策:这是一个好瓜。这个决策如图所示: ![1076028-20161226212509195-1211785985.png][] * # 决策树能做什么 # 决策树能实现对数据的探索,能对数据轮廓进行描述,能进行预测和分类,了解哪些变量最重要 * # 决策树基本流程 # ![1076028-20161226214649711-822462501.png][] * ## 几种分列准则 ## 一 信息增益 ![1076028-20161226215528398-523457282.png][] 二 增益率 ![1076028-20161226215731554-603323636.png][] 三 基尼系数 ![1076028-20161226220118273-1701951693.png][] * ## 停止条件 ## 1.如果节点中所有观测属于一类。 2.如果该节点中所有观测的属性取值一致。 3.如果树的深度达到设定的阈值。 4.如果该节点所含观测值小于设定的父节点应含观测数的阈值。 5.如果该节点的子节点所含观测数将小于设定的阈值。 6.如果没有属性能满足设定的分裂准则的阈值。 ![20180516215114592][] * # C4.5,对连续属性的处理 # 在C4.5中,对连续属性的处理如下: 1. 对特征的取值进行升序排序 2. 两个特征取值之间的中点作为可能的分裂点,将数据集分成两部分,计算每个可能的分裂点的信息增益(InforGain)。优化算法就是只计算分类属性发生改变的那些特征取值。 3. 选择修正后信息增益(InforGain)最大的分裂点作为该特征的最佳分裂点 4. 计算最佳分裂点的信息增益率(Gain Ratio)作为特征的Gain Ratio。注意,此处需对最佳分裂点的信息增益进行修正:减去log2(N-1)/|D|(N是连续特征的取值个数,D是训练数据数目,此修正的原因在于:当离散属性和连续属性并存时,C4.5算法倾向于选择连续特征做最佳树分裂点) * # R代码实现(C5.0) # 一.导入数据集,把目标变量转为因子 ![复制代码][copycode.gif] setwd("D:\\R_edu\\data") rm(list=ls()) accepts<-read.csv("accepts.csv") str(accepts) accepts$bad_ind<-as.factor(accepts$bad_ind) names(accepts) accepts=accepts[,c(3,7:24)] ![复制代码][copycode.gif] 根据业务理解生成更有意义的衍生变量,不过这些变量都是临时的,因为没有经过数据清洗,此处仅作一个示例 二.将数据分为训练集和测试集 set.seed(10) select<-sample(1:nrow(accepts),length(accepts$bad_ind)*0.7) train=accepts[select,] test=accepts[-select,] summary(train$bad_ind) 三.运行C50算法建模 train<-na.omit(train) library(C50) ls('package:C50') tc<-C5.0Control(subset =F,CF=0.25,winnow=F,noGlobalPruning=F,minCases =20) model <- C5.0(bad_ind ~.,data=train,rules=F,control =tc) summary( model ) 四.图形展示 plot(model) C5imp(model) 五.生成规则 rule<- C5.0(bad_ind ~.,data=train,rules=T,control =tc) summary( rule ) * # CRAT算法处理离散型变量 # 1. 记m为样本T中该属性取值的种类数 2. 穷举将m种取值分为两类的划分 3. 对上述所有划分计算GINI系数 * # R代码实现CART算法 # rpart包中有针对CART决策树算法提供的函数,比如rpart函数 以及用于剪枝的prune函数 rpart函数的基本形式:rpart(formula,data,subset,na.action=na.rpart,method.parms,control,...) # # 一.设置向前剪枝的条件 tc <- rpart.control(minsplit=20,minbucket=20,maxdepth=10,xval=5,cp=0.005) rpart.control对树进行一些设置 minsplit是最小分支节点数,这里指大于等于20,那么该节点会继续分划下去,否则停止 minbucket:树中叶节点包含的最小样本数 maxdepth:决策树最大深度 xval:交叉验证的次数 cp全称为complexity parameter,指某个点的复杂度,对每一步拆分,模型的拟合优度必须提高的程度 二.建模 ![复制代码][copycode.gif] rpart.mod=rpart(bad_ind ~.,data=train,method="class", parms = list(prior = c(0.65,0.35), split = "gini"), control=tc) summary(rpart.mod) #1.3看变量重要性 rpart.mod$variable.importance #cp是每次分割对应的复杂度系数 rpart.mod$cp plotcp(rpart.mod) ![复制代码][copycode.gif] 三.画树图 library(rpart.plot) rpart.plot(rpart.mod,branch=1, extra=106, under=TRUE, faclen=0, cex=0.8, main="决策树") 四.CART剪枝 prune函数可以实现最小代价复杂度剪枝法,对于CART的结果,每个节点均输出一个对应的cp prune函数通过设置cp参数来对决策树进行修剪,cp为复杂度系数 我们可以用下面的办法选择具有最小xerror的cp的办法: rpart.mod.pru<-prune(rpart.mod, cp= rpart.mod$cptable[which.min(rpart.mod$cptable[,"xerror"]),"CP"]) rpart.mod.pru$cp 五.绘制剪枝后的树状图 library(rpart.plot) rpart.plot(rpart.mod.pru,branch=1, extra=106, under=TRUE, faclen=0, cex=0.8, main="决策树") 六.CART预测 * 使用模型对测试集进行预测使用模型进行预测 * 使用模型进行预测 rpart.pred<-predict(rpart.mod.pru,test) 可以看到,rpart.pred的结果有两列,第一列是为0的概率,第二列是为1的概率 通过设定阀值,得到预测分类 pre<-ifelse(rpart.pred[,2]>0.5,1,0) [1076028-20161226212509195-1211785985.png]: /images/20220525/6f7101308bbb48dc8753db4492e1852a.png [1076028-20161226214649711-822462501.png]: /images/20220525/b8dfd064dd9a4eefad59e69fdf620c1a.png [1076028-20161226215528398-523457282.png]: /images/20220525/173540dc27a34b87b76fc5d2ec1e57be.png [1076028-20161226215731554-603323636.png]: /images/20220525/9f02ab00a7f146c282c923169f997ef8.png [1076028-20161226220118273-1701951693.png]: /images/20220525/1bfffc6364e14f1b9f4cba52c267102e.png [20180516215114592]: /images/20220525/2d1755f77f4649f5a12fa2b1402612fb.png [copycode.gif]: /images/20220525/a4dab6b71e264681ac77d9578c2d1b7e.png
相关 决策树 [https://www.cnblogs.com/lovephysics/p/7231294.html][https_www.cnblogs.com_lovephysics_p 今天药忘吃喽~/ 2022年12月20日 02:22/ 0 赞/ 28 阅读
相关 决策树 1 决策树学习是以实例为基础的归纳学习算法,是应用最广泛的逻辑方法。 2 典型的决策树学习系统采用自顶向下的方法,在部分搜索空间中搜索解决方案。它可以确保求出一个简单的决策树 桃扇骨/ 2022年06月14日 04:27/ 0 赞/ 293 阅读
相关 决策树 决策树是基于树结构来进行决策,这恰是人类在面临决策问题时一种很自然的处理机制。例如,我们要对“这是好瓜吗?”这样的问题进行决策时,通常会进行一系列的判断或“子决策”:我们先看“ 旧城等待,/ 2022年05月25日 05:39/ 0 赞/ 364 阅读
相关 决策树 一、 决策树简介 决策树是一种特殊的树形结构,一般由节点和有向边组成。其中,节点表示特征、属性或者一个类。而有向边包含有判断条件。如图所示,决策树从根节点开始延伸,经过不 骑猪看日落/ 2022年05月17日 00:55/ 0 赞/ 324 阅读
相关 决策树 决策树:决策树是一个树形结构,每个非叶节点表示一个特征树形的测试,每个分支代表这个特征属性在某个值域上的输出,而叶节点存放一个类别。 使用决策树进行决策的原理就是: 从根 淩亂°似流年/ 2022年05月13日 08:50/ 0 赞/ 265 阅读
相关 决策树 1 认识决策树 如何高效的进行决策? 特征的先后顺序(哪个特征先看,哪个特征后看) 2 决策树分类原理详解(看哪个特征能筛掉更多的数据,尽可能通过少 小咪咪/ 2022年04月23日 01:16/ 0 赞/ 253 阅读
相关 决策树 决策树 声明 本文是来自网络文档和书本(周老师)的结合。 概述 决策树(Decision Tree)是在已知各种情况发生概率的[基础][Link 1]上,通 青旅半醒/ 2022年01月30日 06:49/ 0 赞/ 496 阅读
相关 决策树 决策树对实例进行分类的树形结构,由节点和有向边组成。其实很像平时画的流程图。 学习决策树之前要搞懂几个概念: 熵:表示随机变量不确定性的度量,定义:H(p)=-![1409 冷不防/ 2021年09月30日 04:16/ 0 赞/ 525 阅读
相关 决策树 熵的定义 ![5057999-5702853710d12e87.png][] 计算给定数据集的熵 def calcShannonEnt(dataSet): 客官°小女子只卖身不卖艺/ 2021年09月15日 06:34/ 0 赞/ 475 阅读
还没有评论,来说两句吧...