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

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

效果图如下:

这是一篇相关的论文。

使用R完成决策树分类相关推荐

  1. c++实现决策树分类汽车评估数据集_R有监督机器学习-分类方法

    当我们说机器学习的的时候,我们在说什么? 来源于mlr3包的作者:https://mlr3book.mlr-org.com/basics.html 上图解释了完整的机器学习流程,包括构建任务.准备训练 ...

  2. Kaggle数据集之电信客户流失数据分析(三)之决策树分类

    一.导入数据 import pandas as pd df=pd.read_csv(r"D:\PycharmProjects\ku_pandas\WA_Fn-UseC_-Telco-Cust ...

  3. 数据分享|PYTHON用决策树分类预测糖尿病和可视化实例

    全文下载链接:http://tecdat.cn/?p=23848 在本文中,决策树是对例子进行分类的一种简单表示.它是一种有监督的机器学习技术,数据根据某个参数被连续分割.决策树分析可以帮助解决分类和 ...

  4. 决策树分类原理(一)26

    1.决策树概述 决策树是属于有监督机器学习的一种,起源非常早,符合直觉并且非常直观,模仿人类做决策的过程,早期人工智能模型中有很多应用,现在更多的是使用基于决策树的一些集成学习的算法.这一章我们把决策 ...

  5. 机器学习 | 关于决策树分类模型,你学得怎么样了?

    这是一篇关于决策树分类模型的详解,身边的朋友看完的都说:这回透彻了! 目录 0 写在前面 1 决策树分类模型 1.1 信息熵 1.2 基尼系数 2 决策树分类模型的建立 3 总结一下 0 写在前面 机 ...

  6. 数据挖掘系列(6)决策树分类算法

    从这篇开始,我将介绍分类问题,主要介绍决策树算法.朴素贝叶斯.支持向量机.BP神经网络.懒惰学习算法.随机森林与自适应增强算法.分类模型选择和结果评价.总共7篇,欢迎关注和交流. 这篇先介绍分类问题的 ...

  7. 机器学习之决策树分类算法

    决策树和随机森林:决策树和随机森林都是非线性有监督的分类模型. 决策树是一种树形结构,树内部每个节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶子节点代表一个分类类别.通过训练数据构建决策树 ...

  8. 决策树(分类树、回归树)

    决策树 前言:第一篇博客,最近看完决策树,想着归纳一下,也方便自己以后回顾.写的会比较全面一些,可能会有很多不太正确的地方,欢迎大家交流指正 : ) 决策树模型: 决策树模型是运用于分类以及回归的一种 ...

  9. 机器学习(9)决策树(决策树分类鸢尾花)

    目录 一.基础理论 二.决策树分类鸢尾花 API 1.读取数据 2.划分数据集 3.创建决策树预估器,训练 4.模型评估 方法一:比对法 方法二:计算错误率 代码 一.基础理论 决策树思想: 程序设计 ...

最新文章

  1. 设计模式-装饰模式(08)
  2. mac安装brew和zsh
  3. 4.8 代价函数-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  4. 直播报名 | 基金业数字化运营指标体系建设
  5. 红帽linux iso镜像,红帽 Red Hat Linux相关产品iso镜像下载
  6. Pandas学习导图
  7. 【面试题】Java三大特性封装继承多态总结
  8. 前端代码审查工具_前端代码审查中应检查的内容
  9. Zemax 全新 22.1 版本产品现已发布
  10. 孙子兵法始计篇读后感&心得(上)
  11. Flutter 淡入淡出与逐渐出现动画
  12. php中表格标记是,HTML标记语言——表格标记_HTML/Xhtml_网页制作
  13. sharding-jdbc 分库分表的 4种分片策略
  14. docker run --privileged参数(容器权限全开,不利于宿主机安全,宿主机容易重启)(与/usr/sbin/init共用)
  15. matlab绘图修改字体大小,matlab绘图中设置字体及图片大小
  16. Adobe Acrabat PDF更新后要收费了?三款在线PDF工具解决你的燃眉之急!
  17. 计算机跨考地信研究生,过来人解答关于跨考地信后续的几个复习问题
  18. 自我管理数据缓冲区内存
  19. 小米手机、华为手机、一加手机、小米手环NFC刷门禁卡教程!
  20. 鱼c论坛 python课后题_python课后习题

热门文章

  1. 安装sql server 2000
  2. NCRE四级网络工程师考题详解----三级索引结构
  3. jQuery教程03-jQuery 元素、id、.class和*全选择器
  4. Postgresql 填充所有的时间点
  5. HBase 配置详解
  6. mysql连接超时timeout问题
  7. ubuntu 查找qt是否安装_Ubuntu Qt 安装教程--快速下载连接(网盘)
  8. java previous_java – 在枚举类型上实现`next`和`previous`的最好方法是什么?
  9. 执行一次怎么会写入两次数据_浅谈 Redis 数据持久化之 AOF 模式
  10. javascript中内置对象简介、Array