使用R完成决策树分类

简介:

关于决策树理论方面的介绍,李航的《统计机器学习》第五章有很好的讲解。

传统的ID3和C4.5一般用于分类问题,其中ID3使用信息增益进行特征选择,即递归的选择分类能力最强的特征对数据进行分割,C4.5唯一不同的是使用信息增益比进行特征选择。

特征A对训练数据D的信息增益g(D, A) = 集合D的经验熵H(D) – 特征A给定情况下D的经验条件熵H(D|A)

特征A对训练数据D的信息增益比r(D, A) = g(D, A) / H(D)

而CART(分类与回归)模型既可以用于分类、也可以用于回归,对于回归树(最小二乘回归树生成算法),需要寻找最优切分变量和最优切分点,对于分类树(CART生成算法),使用基尼指数选择最优特征。

参考自博客,一个使用rpart完成决策树分类的例子如下:

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片

  1. library(rpart);  
  2.   
  3. ## rpart.control对树进行一些设置  
  4. ## xval是10折交叉验证  
  5. ## minsplit是最小分支节点数,这里指大于等于20,那么该节点会继续分划下去,否则停止  
  6. ## minbucket:叶子节点最小样本数  
  7. ## maxdepth:树的深度  
  8. ## cp全称为complexity parameter,指某个点的复杂度,对每一步拆分,模型的拟合优度必须提高的程度  
  9. ct <- rpart.control(xval=10, minsplit=20, cp=0.1)  
  10.   
  11. ## kyphosis是rpart这个包自带的数据集  
  12. ## na.action:缺失数据的处理办法,默认为删除因变量缺失的观测而保留自变量缺失的观测。           
  13. ## method:树的末端数据类型选择相应的变量分割方法:  
  14. ## 连续性method=“anova”,离散型method=“class”,计数型method=“poisson”,生存分析型method=“exp”  
  15. ## parms用来设置三个参数:先验概率、损失矩阵、分类纯度的度量方法(gini和information)  
  16. ## cost我觉得是损失矩阵,在剪枝的时候,叶子节点的加权误差与父节点的误差进行比较,考虑损失矩阵的时候,从将“减少-误差”调整为“减少-损失”  
  17. fit <- rpart(Kyphosis~Age + Number + Start,  
  18.     data=kyphosis, method=”class”,control=ct,  
  19.     parms = list(prior = c(0.65,0.35), split = “information”));  
  20.   
  21. ## 第一种  
  22. par(mfrow=c(1,3));  
  23. plot(fit);  
  24. text(fit,use.n=T,all=T,cex=0.9);  
  25.   
  26. ## 第二种,这种会更漂亮一些  
  27. library(rpart.plot);  
  28. rpart.plot(fit, branch=1, branch.type=2, type=1, extra=102,  
  29.            shadow.col=”gray”, box.col=”green”,  
  30.            border.col=”blue”, split.col=”red”,  
  31.            split.cex=1.2, main=”Kyphosis决策树”);  
  32.   
  33. ## rpart包提供了复杂度损失修剪的修剪方法,printcp会告诉分裂到每一层,cp是多少,平均相对误差是多少  
  34. ## 交叉验证的估计误差(“xerror”列),以及标准误差(“xstd”列),平均相对误差=xerror±xstd  
  35. printcp(fit);  
  36.   
  37. ## 通过上面的分析来确定cp的值  
  38. ## 我们可以用下面的办法选择具有最小xerror的cp的办法:  
  39. ## prune(fit, cp= fit$cptable[which.min(fit$cptable[,"xerror"]),”CP”])  
  40.   
  41. fit2 <- prune(fit, cp=0.01);  
  42. rpart.plot(fit2, branch=1, branch.type=2, type=1, extra=102,  
  43.            shadow.col=”gray”, box.col=”green”,  
  44.            border.col=”blue”, split.col=”red”,  
  45.            split.cex=1.2, main=”Kyphosis决策树”);  


效果图如下:


这是一篇相关的论文。

目录
相关文章
|
5月前
|
固态存储 IDE 开发工具
手把手教你安装Keil MDK5:官方网盘资源+芯片支持包配置详解(附调试实战)
Keil是一款专为嵌入式系统开发设计的集成开发环境(IDE),由德国Keil Software公司开发,后被ARM收购整合为MDK-ARM工具链的一部分。本文详细介绍Keil MDK541的安装步骤、系统要求、运行环境配置及首次使用指南,包括许可证管理、芯片支持包安装和工程模板设置等。同时提供新建STM32工程、编写测试代码的具体操作,并解答常见问题,如缺少DLL文件、语言设置及编译错误处理。附延伸学习资源与版权声明,帮助用户高效上手Keil开发环境。
2649 8
|
机器学习/深度学习 人工智能 NoSQL
数据库与人工智能的关系
随着AI技术的飞速发展,数据库与人工智能的联系日益紧密。数据成为AI的关键部分,预计到2023年全球数据量将达到33ZB。AI通过机器学习和神经网络等方式处理数据,优化企业运营,预测模式并创造机会。数据库利用AI进行复杂数据分析,如机器学习识别销售趋势,深度学习处理和分类客户数据。悦数图数据库作为高性能图数据库,为AI提供实时、准确的数据支持,尤其在金融风控、实时推荐和知识图谱等领域展现出强大效能,推动AI在各行业的应用和发展。
|
JSON API 开发工具
如何使用Postman 设计和测试一个API?
如何使用Postman 设计和测试一个API?
221 0
如何使用Postman 设计和测试一个API?
|
11月前
|
存储 缓存 监控
如何提高服务器CPU性能?
如何提高服务器CPU性能?
1131 3
|
11月前
|
机器学习/深度学习 人工智能 算法框架/工具
使用Python实现深度学习模型:智能身份验证与防伪
使用Python实现深度学习模型:智能身份验证与防伪
475 1
|
机器学习/深度学习 定位技术 Python
深入理解线性回归模型的评估与优化方法
深入理解线性回归模型的评估与优化方法
|
图形学 Android开发 开发者
U3D游戏开发实战:有效策略缩小包体大小,提升加载速度
【7月更文第12天】随着移动设备的普及,Unity 3D(简称U3D)作为一款强大的跨平台游戏开发引擎,成为了众多独立开发者和游戏工作室的首选。然而,面对日益增长的用户需求与有限的设备存储空间,如何在保证游戏质量的同时,有效缩减游戏包体大小,成为了开发者面临的一大挑战。本文将探讨一系列实用技巧和最佳实践,帮助你在U3D开发小游戏时显著减小包体尺寸,从而提升玩家的下载体验与启动速度。
413 12
|
Shell
ZooKeeper【基础 02】zookeeper-3.6.0 常用Shell命令(节点增删改查+监听器+四字指令)
【4月更文挑战第9天】ZooKeeper【基础 02】zookeeper-3.6.0 常用Shell命令(节点增删改查+监听器+四字指令)
267 2
|
关系型数据库 MySQL 中间件
MySQL分库分表动态扩容缩容
MySQL分库分表动态扩容缩容
344 0

热门文章

最新文章