mild-863

时间:2023-11-08 02:33:00 编辑:大鹏 来源:长期打折网

R语言学习之决策树,基于R语言的分类算法之决策树...

R语言学习之决策树
R语言学习之决策树
提示:

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.在预测分类目标字段时为类别指定先验概率。先验概率是对总体(从中可提取训练数据)中的每个目标分类的总相对频率的估计。换句话说,先验概率是对预测值有任何了解之前对每个可能的目标值的概率估计。确定决策树分支准则的时候会用到,具体内部算法,我暂时还没有查到。

基于R语言的分类算法之决策树
提示:

基于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太少了,优化都省了。

上一篇:acdsee 中文版
下一篇:没有了
相关文章
最新资讯
热门资讯