使用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决策树”);  


效果图如下:


这是一篇相关的论文。

目录
相关文章
|
6月前
|
机器学习/深度学习 算法 前端开发
决策树与随机森林算法在分类问题中的应用
本文探讨了决策树和随机森林两种监督学习算法,它们在分类任务中表现出强大的解释性和预测能力。决策树通过特征测试进行分类,构建涉及特征选择、树生成和剪枝。随机森林是集成学习方法,通过构建多棵决策树并汇总预测结果,防止过拟合。文中提供了Python代码示例,展示如何使用sklearn构建和应用这些模型,并讨论了参数调优和模型评估方法,如交叉验证和混淆矩阵。最后,强调了在实际问题中灵活选择和调整模型参数的重要性。
184 4
|
7月前
|
数据采集 存储
回归决策树的构建
如何构建回归决策树
67 1
|
7月前
|
机器学习/深度学习
R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测
R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测
|
机器学习/深度学习 算法 索引
逻辑回归与多项式特征:解密分类问题的强大工具
逻辑回归与多项式特征:解密分类问题的强大工具
|
机器学习/深度学习 算法
连载|GBDT如何进行回归和分类
连载|GBDT如何进行回归和分类
|
机器学习/深度学习 数据挖掘 Python
六、分类问题和逻辑回归
六、分类问题和逻辑回归
六、分类问题和逻辑回归
|
存储 算法
决策树分类算法(包含隐形眼镜分类的代码)
一个有监督学习算法 、属于判别模型 、非线性分类
158 0
决策树分类算法(包含隐形眼镜分类的代码)
|
算法
基于朴素贝叶斯算法对肿瘤类别分类
基于朴素贝叶斯算法对肿瘤类别分类
196 0
基于朴素贝叶斯算法对肿瘤类别分类
|
机器学习/深度学习 算法 计算机视觉
【预测模型-随机森林分类】基于随机森林算法实现数据分类附matlab代码
【预测模型-随机森林分类】基于随机森林算法实现数据分类附matlab代码
|
机器学习/深度学习 SQL 移动开发
有监督学习分类
一、Classification problems 二、Notation 三、Logistic regression 四、Try logistic regression @Parameter Server 五、Fun Time
有监督学习分类