R语言——决策树模型

R语言——决策树模型nbsp nbsp nbsp nbsp 决策树 TreeNodels 是一种创建树状模型的方法 它使用 基尼不纯度 GiniImpurity 或信息增益 InformationG 等标准对节点进行递归分割 以创建树状模型 决策树看起来像是以树状形式排列的一系列的 if else 语句 易于理解 执行速度快 并且 它能够很好地表现多个特征之间的相互作用 适用于多种数据类型 树状模型中 随机森林性能表现卓越

        决策树(Tree Nodels)是一种创建树状模型的方法,它使用‘基尼不纯度’(Gini Impurity)或信息增益(Information Gain)等标准对节点进行递归分割,以创建树状模型。决策树看起来像是以树状形式排列的一系列的if-else语句,易于理解,执行速度快。并且,它能够很好地表现多个特征之间的相互作用,适用于多种数据类型。(树状模型中,随机森林性能表现卓越)

        主要用到的包:rpart、party、randomForest

 

决策树模型   

         决策树算法中,会对数据特征不断提问,然后根据每次回答逐步对数据进行分类。

        节点(Node)的分类:节点分为根节点(Root Node)与叶节点(Leaf Node)。其中根节点位于决策树最顶部,它是分类的起始点,位于最底端且没有子节点的节点成为叶节点。

        在决策树中,对各节点提问题,并根据回答对节点进行分叉,从而实现分类数据的目的。‘不纯度’(impurity)用作评估数据分离程度的标准,将一个节点数据划分为2个子节点时,最好的提问能够使子节点的不纯度降至最低。

        节点中含有的分类越多,不纯度越高。反之,只有一个分类的时候,不纯度最低。

 

分类与回归树

        用于创建决策树的包有很多,此处使用rpart包,它实现了比较有名的分类与回归树(Classification and Regression Trees,CART)

        以下示例中,使用rpart()函数为鸢尾花数据创建决策树:

library(rpart) m<-rpart(Species~.,data=iris) 

查看m

R语言——决策树模型

结果中的n=150代表有150个数据。结果底部显示的就是决策树,缩进表示分支,*表示叶节点,loss表示误差数量。

从中可以得到结果:

鸢尾花数据中共有三个品种,各节点后括号里的数据代表了各个品种的比例

1节点为根节点

2节点的分类标准为Petal.Length<2.45,数量50,全是setosa品种

3节点的分类标准为Petal.Length>=2.45,数量100

6和 7节点都是由3节点划分的,标准为Petal.Width与1.75的关系

 

这种结果看起来不够直观,可以用plot()函数绘制决策树:

plot(m,compress=T,margin=0.2)#compress参数指定以更稠密的方式绘制决策树 text(m,cex=1.5)

R语言——决策树模型

这个图虽然可以很容易地知道决策树的含义,但没有具体的数量关系

利用rpart.plot包中的prp()函数可以很好地解决这个问题:

library(rpart.plot) prp(m,type=4,extra=2,digits=3)#此处type参数为0~5

R语言——决策树模型

从图中可以很清楚地看到分类和数量关系,其中品种下方的分数A/B表示B个数据中有A个属于该类(即上述loss误差)。

 

使用predict()函数可以用创建好的决策树模型对新数据进行预测。

 

条件推断决策树

        条件推断决策树(Conditional Inference Tree)用于解决CART(上述rpart实现的决策树算法)等决策树的两种问题:第一种是不判断统计的显著性,而在分割节点时产生的过度拟合问题;第二种是可分割为多种值得变量比其他变量更受偏爱的问题。

        条件推断决策树中,会根据条件分布(Conditional Distribution)测量变量与响应值(分类)之间的相关关系,选择分割节点中要使用的变量。此外,条件推断决策树中也会充分考虑决策树中重复分割节点时发生的多重假设检验(Multiple Testing)问题,并在适当的时间点停止节点分割。(多重比较问题(Multiple Testing Problem)指的是向多个对象同时统计推论时,置信区间不包含真值或错误否定零假设,这种现象发生的可能性变得很大。比如,为了判断是否分割节点,执行拥有95%置信度的假设检验。使用该检验分割3次节点时,置信度为95%*95%*95%=85.7%。因此,进行多重比较时,若不作适当修正,则置信度就会降低,置信区间与假设检验就不正确。)

        使用rpart因过度拟合而无法得到很好的性能时,使用条件推断决策树能够得到明显的改善。此外,与rpart相比,条件推断决策树提供了更易理解的图形功能。

下面的例子对鸢尾花数据应用ctree()函数,创建Species预测模型:

install.packages('party') library(party) m<-ctree(Species~.,data=iris)

查看m

R语言——决策树模型

结果中显示(第一行):这是一个有四个叶节点(terminal nodes)的条件推断决策树

1节点根据Petal.Length是否大于1.9分类

2节点是Petal.Length<=1.9的分类

3节点是Petal.Length>1.9的分类

在3节点下又根据Petal.Width是否大于1.7进行分类

 

使用plot()函数绘制决策树模型:

plot(m)

R语言——决策树模型

生成的图像可视化效果比较好,可以看到四个叶节点,但是这四个叶节点各有三个分类,图上只显示setosa一个,另外两个可以手动查看:

levels(iris$Species)

[1] "setosa"     "versicolor" "virginica" 

 

随机森林

        随机森林是一种使用集成学习(Ensemble Learning)技术的模型。集成学习中,先从给定数据学习多个模型,然后在预测时综合使用多个模型的预测结果,从而获得更高的准确度。

        随机森林使用两种方法创建多种决策树。第一种方法是在创建决策树时采用‘放回抽样’抽取一部分数据,然后只根据这些数据创建决策树,即在创建决策树时只使用一部分数据;第二种方法是指从节点数据中确定分割字节点的标准时,并不针对全体变量,而仅以部分变量为对象寻找分叉标准。

        预测新数据时,对多个决策树产生的预测结果采用投票(voting)方式决定最终结果。(比如,5个决策树中,预测为Y的有3个,预测为N的有2个,那么最终结果就确定为Y。)

        随机森林的性能通常都很优秀,它使用多个而非一个决策树进行预测,所以避免了过度拟合问题。

  • 使用随机森林建模

        仍使用鸢尾花数据:

library(randomForest) m<-randomForest(Species~.,data=iris)

查看m

R语言——决策树模型

如前所述,随机森林由多个决策树实现(创建500个决策树),每个决策树只使用一部分数据。输出随机森林模型时,使用未在模型训练中用到的数据而得到错误推断值,并显示到OOB estimate of error rate项目。鸢尾花模型中,OOB错误为4%,versicolor被预测为virginica的情形有3个,virginica被预测为versicolor的情形有三个,而setosa则没有错误出现。

可以使用predict()函数对其他数据进行预测

  • 通过直接指定X与Y快速建模

        随机森林创建500个决策树,建模时间会大大增加,数据量也会大幅增长。

        为了避免这种情况,可以使用快速建模方法。

        快速建模的方法有很多,其中一种是不使用公式,直接指定自变量X和因变量Y进行建模。虽然使用公式比较方便,但它比直接指定(X,Y)占用更多的内存,运行速度也比较慢。

        randomForest()等几个建模函数支持通过直接指定变量的方式(不使用公式)进行建模,但并非所有建模函数都支持这种方式。

        以iris为例,直接将Species指定为Y,将其他变量指定为X:

m<-randomForest(iris[,1:4],iris[,5])

 

  • 评估变量的重要性

        randomForest()函数的变量重要性由变量对准确度与阶段不纯度改善的贡献程度进行衡量。这样计算得到的变量重要性可以用于选择要在其他模型(比如线性回归)中使用的变量。

        调用randomForest()函数建模时,必须设置importance=T,才能获得变量的重要性。然后使用importance()、varImpPlot()函数显示结果。

        以iris数据集为例:

m<-randomForest(Species~.,data=iris,importance=T) importance(m)

R语言——决策树模型

结果中的MeanDecreaseAccuracy和MeanDecreaseGini分别代表准确度和节点不纯度的改善影响。由于要根据多个决策树评估变量对准确度与不纯度改善的贡献率,所以使用了平均值(Mean)。        

使用varImpPlot()函数绘制可视化图形:

varImpPlot(m)

R语言——决策树模型

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176352.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午10:08
下一篇 2026年3月26日 下午10:09


相关推荐

  • python学习–mac 下pycharm安装激活成功教程

    python学习–mac 下pycharm安装激活成功教程pycharm下载路径:http://www.https://www.jetbrains.com/pycharm/pycharm社区版:https://www.cr173.com/soft/752801.htmlpycharm激活成功教程:(1)hosts文件路径:sudovim/etc/hosts(2)将0.0.0.0account.jetbrains.com添加到hosts文件中…

    2022年8月28日
    4
  • load average 计算「建议收藏」

    load average 计算「建议收藏」平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均活跃进程数。对于Ubuntu获取cpu数和cpu核数more/proc/cpuinfo|grep”physicalid”|uniq|wc-l#=>1more/proc/cpuinfo|grep”physicalid”|grep”0″|wc-l#=>16则1*…

    2022年7月17日
    20
  • SQLldr_乔羽简介

    SQLldr_乔羽简介1.SQLLDR导入 1.1 简介 SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件(数据)迁移到ORACLE数据库中。SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)。 2.2 语法和参数语法:SQLLDRkeyword=value[,keyword=value,…];…

    2022年4月19日
    39
  • SQL server下载与安装教程

    SQL server下载与安装教程SQLserver 2019 版本 安装一 SQLserver 下载 1 SQLserver 不多说 直接进入主题 能在官网下载尽量在官网下载 一边安装 SQLserver 一边下载 SSMS 下载链接 SQLserver 官网 2 下载栏下 点击下载双击文件安装 3 我们需要安装的类型是选择 基本 B 3 别废话 接受就完了 不接受怎么娶你呢 4 选择你的安装路径 默认安装路径为 C 盘 更改路径 看情况而定 5 要经过漫长的等待 6 点击 安装 SSMS

    2026年3月26日
    3
  • CentOS7安装VMware Tools

    CentOS7安装VMware ToolsCentOS7安装VMwareTools的具体步骤如下:一、准备工作点击VMware菜单栏【虚拟机】,选择【安装VMwareTools】;如果安装了早期版本的VMwareTools,则菜单项为[更新VMwareTools]查看【虚拟机>设置>硬件>CD/DVD】是否已装载CD虚拟驱动器,如下图二、检查系统是否挂载成功在虚拟机中,以root身份登录客…

    2022年5月26日
    54
  • 用Python的networkx绘制精美网络图

    用Python的networkx绘制精美网络图最近因为数学建模 3 天速成 Python 然后做了一道网络的题 要画网络图 在网上找了一些 发现都是一些很基础的丑陋红点图 并且关于网络的一些算法也没有讲 于是自己进 http networkx github io 学习了一下 以下仅博主自己的总结 勿认真 有错误尽情指出 大家一起交流 需要用到的 modulemalplo pyplot 和 networkx 正文 一 malplotl

    2026年3月16日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号