r语言决策树算法
1. 决策树算法原理是什么
决策树构造的输入是一组带有类别标记的例子,构造的结果是一棵二叉树或多叉树。二叉树的 内部节点(非 叶子节点)一般表示为一个逻辑判断,如形式为a=aj的逻辑判断,其中a是属性,aj是该属性的所有取值:树的边是逻辑判断的分支结果。
多叉树(ID3)的内部结点是属性,边是该属性的所有取值,有几个 属性值就有几条边。树的叶子节点都是类别标记。
由于数据表示不当、有噪声或者由于决策树生成时产生重复的子树等原因,都会造成产生的决策树过大。
因此,简化决策树是一个不可缺少的环节。寻找一棵最优决策树,主要应解决以下3个最优化问题:①生成最少数目的叶子节点;②生成的每个叶子节点的深度最小;③生成的决策树叶子节点最少且每个叶子节点的深度最小。
(1)r语言决策树算法扩展阅读:
决策树算法的优点如下:
(1)分类精度高;
(2)生成的模式简单;
(3)对噪声数据有很好的健壮性。
因而是目前应用最为广泛的归纳推理算法之一,在 数据挖掘中受到研究者的广泛关注。
2. r语言 随机森林样本训练时间
r语言是一门计算机编程语言。
随机森林算法涉及对样本单元和变量进行抽样,从而生成大量决策树。
假设训练集中共有N个样本,M个变量,则随机森林算法如下:(1)从训练集中随机有放回地抽取N个样本单元,生成大量决策树;(2)在每一个节点随机抽取m<M个变量,将其作为分割该节点的候选变量。每一个节点处的变量数应一致;(3)完整生成所有决策树,无需剪枝(最小节点为1);(4)终端节点的所属类别由节点对应的众数类别决定;(5)对于新的观测点,用所有的树对其分类,其类别由多数原则生成。
3. 机器学习有哪些算法
1. 线性回归
在统计学和机器学习领域,线性回归可能是最广为人知也最易理解的算法之一。
2. Logistic 回归
Logistic 回归是机器学习从统计学领域借鉴过来的另一种技术。它是二分类问题的首选方法。
3. 线性判别分析
Logistic 回归是一种传统的分类算法,它的使用场景仅限于二分类问题。如果你有两个以上的类,那么线性判别分析算法(LDA)是首选的线性分类技术。
4.分类和回归树
决策树是一类重要的机器学习预测建模算法。
5. 朴素贝叶斯
朴素贝叶斯是一种简单而强大的预测建模算法。
6. K 最近邻算法
K 最近邻(KNN)算法是非常简单而有效的。KNN 的模型表示就是整个训练数据集。
7. 学习向量量化
KNN 算法的一个缺点是,你需要处理整个训练数据集。
8. 支持向量机
支持向量机(SVM)可能是目前最流行、被讨论地最多的机器学习算法之一。
9. 袋装法和随机森林
随机森林是最流行也最强大的机器学习算法之一,它是一种集成机器学习算法。
想要学习了解更多机器学习的知识,推荐CDA数据分析师课程。CDA(Certified Data Analyst),即“CDA 数据分析师”,是在数字经济大背景和人工智能时代趋势下,面向全行业的专业权威国际资格认证,旨在提升全民数字技能,助力企业数字化转型,推动行业数字化发展。点击预约免费试听课。
4. R语言CART算法想生成决策树用什么函数
tree。。。
5. r语言 决策树 rpart怎么画决策树
如果使用rpart()构造的决策树,可以用plot画决策树 ,用text添加标注
参见帮助文档:
library(rpart)
fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)
plot(fit)
text(fit, use.n = TRUE)
6. 使用R完成决策树分类
使用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
library(rpart);
## rpart.control对树进行一些设置
## xval是10折交叉验证
## minsplit是最小分支节点数,这里指大于等于20,那么该节点会继续分划下去,否则停止
## minbucket:叶子节点最小样本数
## maxdepth:树的深度
## cp全称为complexity parameter,指某个点的复杂度,对每一步拆分,模型的拟合优度必须提高的程度
ct <- rpart.control(xval=10, minsplit=20, cp=0.1)
## kyphosis是rpart这个包自带的数据集
## na.action:缺失数据的处理办法,默认为删除因变量缺失的观测而保留自变量缺失的观测。
## method:树的末端数据类型选择相应的变量分割方法:
## 连续性method=“anova”,离散型method=“class”,计数型method=“poisson”,生存分析型method=“exp”
## parms用来设置三个参数:先验概率、损失矩阵、分类纯度的度量方法(gini和information)
## cost我觉得是损失矩阵,在剪枝的时候,叶子节点的加权误差与父节点的误差进行比较,考虑损失矩阵的时候,从将“减少-误差”调整为“减少-损失”
fit <- rpart(Kyphosis~Age + Number + Start,
data=kyphosis, method="class",control=ct,
parms = list(prior = c(0.65,0.35), split = "information"));
## 第一种
par(mfrow=c(1,3));
plot(fit);
text(fit,use.n=T,all=T,cex=0.9);
## 第二种,这种会更漂亮一些
library(rpart.plot);
rpart.plot(fit, branch=1, branch.type=2, type=1, extra=102,
shadow.col="gray", box.col="green",
border.col="blue", split.col="red",
split.cex=1.2, main="Kyphosis决策树");
## rpart包提供了复杂度损失修剪的修剪方法,printcp会告诉分裂到每一层,cp是多少,平均相对误差是多少
## 交叉验证的估计误差(“xerror”列),以及标准误差(“xstd”列),平均相对误差=xerror±xstd
printcp(fit);
## 通过上面的分析来确定cp的值
## 我们可以用下面的办法选择具有最小xerror的cp的办法:
## prune(fit, cp= fit$cptable[which.min(fit$cptable[,"xerror"]),"CP"])
fit2 <- prune(fit, cp=0.01);
rpart.plot(fit2, branch=1, branch.type=2, type=1, extra=102,
shadow.col="gray", box.col="green",
border.col="blue", split.col="red",
split.cex=1.2, main="Kyphosis决策树");
效果图如下:
7. R语言学习之决策树
R语言学习之决策树
决策树最重要的2个问题:决策树的生长问题,决策树的剪枝问题。 生长问题又包括了2个子问题:从分组变量的众多取值中选择一个最佳分割点和从众多输入变量中选择当前最佳分组变量; 剪枝问题包括2个子问题:预修剪(事先指定树的最大深度,叶子的最小样本量等)和后修剪(先让树充分生长,然后边修剪边检验)。
在R中,实现决策树需要加载包library(rpart),如果想把分类图画的漂亮点,还可以加载这个包:library(rpart.plot)## rpart.control对树进行一些设置## xval是10折交叉验证## minsplit是最小分支节点数,这里指大于等于20,那么该节点会继续分划下去,否则停止## minbucket:叶子节点最小样本数## maxdepth:树的深度## cp全称为complexity parameter,指某个点的复杂度,对每一步拆分,模型的拟合优度必须提高的程度,用来节省剪枝浪费的不必要的时间,R内部是怎么计算的还真不知道唉ct <- rpart.control(xval=10, minsplit=20, cp=0.1)## kyphosis是rpart这个包自带的数据集## na.action:缺失数据的处理办法,默认为删除因变量缺失的观测而保留自变量缺失的观测。 ## method:树的末端数据类型选择相应的变量分割方法:## 连续性method=“anova”,离散型method=“class”,计数型method=“poisson”,生存分析型method=“exp”## parms用来设置三个参数:先验概率、损失矩阵、分类纯度的度量方法(gini和information)## cost我觉得是损失矩阵,在剪枝的时候,叶子节点的加权误差与父节点的误差进行比较,考虑损失矩阵的时候,从将“减少-误差”调整为“减少-损失”fit <- rpart(Kyphosis~Age + Number + Start, data=kyphosis, method="class",control=ct, parms = list(prior = c(0.65,0.35), split = "information"));## 作图有2种方法## 第一种:par(mfrow=c(1,3));plot(fit); text(fit,use.n=T,all=T,cex=0.9)## 第二种,这种会更漂亮一些:rpart.plot(fit, branch=1, branch.type=2, type=1, extra=102, shadow.col="gray", box.col="green", border.col="blue", split.col="red", split.cex=1.2, main="Kyphosis决策树");## rpart包提供了复杂度损失修剪的修剪方法,printcp会告诉分裂到每一层,cp是多少,平均相对误差是多少## 交叉验证的估计误差(“xerror”列),以及标准误差(“xstd”列),平均相对误差=xerror±xstdprintcp(fit)## 通过上面的分析来确定cp的值## 我们可以用下面的办法选择具有最小xerror的cp的办法:## prune(fit, cp= fit$cptable[which.min(fit$cptable[,"xerror"]),"CP"])fit2 <- prune(fit, cp=0.01)待续。。。。。。
注:1.在预测分类目标字段时为类别指定先验概率。先验概率是对总体(从中可提取训练数据)中的每个目标分类的总相对频率的估计。换句话说,先验概率是对预测值有任何了解之前对每个可能的目标值的概率估计。确定决策树分支准则的时候会用到,具体内部算法,我暂时还没有查到。
8. 基于R语言的分类算法之决策树
基于R语言的分类算法之决策树
ID3 《= 最大信息熵增益,只能处理离散型数据
C4.5 《= 信息增益率,可处理连续性和离散型数据,相比ID3,减少了因变量过多导致的过拟合
C5.0 《= 信息增益率,运算性能比C4.5更强大
CART 《= 基尼指数最小原则,连续性和离散型数据均可
信息熵体现的是数据的杂乱程度,信息越杂乱,信息熵越大,反之越小。 例如:拥有四种连续型变量的特征变量的信息熵一定比拥有三种的要大。
特征变量的N种可能性,每种可能性的概率相同,N越大,信息熵越大。
每种可能性的概率不同,越偏态,信息熵越小。
所有特征变量中,信息增益率的,就是根节点(root leaf),根节点一般是选择N越大的特征变量,因为N越大,信息熵越大。
信息增益率是在信息熵的基础上作惩罚计算,避免特征变量可能性多导致的高信息增益。
代码相关
library(C50)
C5.0(x,y, trials = 1, rules=FALSE,weights=NULL,control=C5.0Control(),costs=NULL)
x为特征变量,y为应变量
trials 为迭代次数(这个值根据不同数据而不同,并非越大越好,一般介于5-15之间,可以用遍历来寻找最高准确率的模型,对模型准确率的提升效果中等)
cost 为损失矩阵,R中应该传入一个矩阵(据说是对准确率矩阵约束猜测错误的项,但是并没特别明显的规律,可以使用遍历来寻找最好的cost,准确率提升效果小)
costs <- matrix(c(1,2,1,2),
ncol = 2, byrow = TRUE,
dimnames = list(c("yes","no"), c("yes","no")))
control 设置C5.0模型的其他参数,比如置信水平和节点最小样本等(水很深,参数很多,可以自行查阅R的帮助文档,我只设置了一个CF,准确率提升效果小)
control = C5.0Control(CF = 0.25)
library(C50)
#对iris随机划分训练集和测试集
set.seed(1234)
index <- sample(1:nrow(iris), size = 0.75*nrow(iris))
train <- iris[index,]
test <- iris[-index,]
#查看训练集和测试集分布是否合理
prop.table(table(train$Species))
prop.table(table(test$Species))
#不设置任何参数
fit1 <- C5.0(x = train[,1:4], y = train[,5])
pred1 <- predict(fit1, newdata = test[,-5])
freq1 <- table(pred1, test[,5])
accuracy <- sum(diag(freq1))/sum(freq1)
pred1 setosa versicolor virginica
setosa 16 0 0
versicolor 0 13 1
virginica 0 0 8
准确率为0.9736842,只有一个错误。。。显然150个iris太少了,优化都省了。