基于R的C4.5决策树的建立

本文介绍了如何利用R语言实现C4.5决策树算法。在处理数据时,采用了对数频率转换,对于可能出现的log2(0)情况,特别设定为0。此外,文章还提及了决策树中叶子节点和根节点的特殊属性,如split.index、node.index和node.val的处理方式。
摘要由CSDN通过智能技术生成
下边的代码是一个简单的C4.5决策树创建过程,该决策树不含有剪枝的过程,并且针对的属性必须是标量(非连续属性值)
#计算类属性的熵,其中data是一个数据框,它代表着原始数据,class.index是一个类的索引值
entropy <- function(data,class.index){
  data[,class.index] = as.factor(data[,class.index])
  
  class.freq.frame = as.data.frame(table(data[,class.index]))
  
  class.freq.vec = class.freq.frame$Freq/sum(class.freq.frame$Freq)
  
  

  class.log.freq.vec = log2(class.freq.vec)

 #为了处理log2(0)的情况,人为设定log2(0)=0

  if(any(class.freq.vec == 0)){
    zero.index.vec <- which(0 == class.freq.vec)
    class.log.freq.vec[zero.index.vec] = 0;
  }
  
  entropy = -sum(class.freq.vec * class.log.freq.vec)
  return(entropy)
}




subGain <- function(x,data,attr.index,class.index){
  
  data.sub <- data[which(x == data[,attr.index]),]
  
  entropy.sub <- entropy(data.sub,class.index)
  
  return((dim(data.sub)[1]/dim(data)[1])*entropy.sub)
  
}



#计算单个属性的信息熵值
gain <- function(data, attr.index, class.index){
  
  attr.val.vec <- unique(data[,attr.index])
  attr.entropy.vec<-unlist(lapply(attr.val.vec, subGain,data = data, attr.index = attr.index, class.index = class.index))


  return(entropy(data,class.index)-sum(attr.entropy.vec))
}


#calculate split information


splitInfo <- function(data, attr.index, class.index){
attr.val.vec <- unique(data[,attr.index])
split.val.vec <- unlist(lapply(attr.val.vec, function(x,data,attr.index) {split.freq=length(which(x == data[,attr.index]))/dim(data)[1];return(split.freq * log2(split.freq))}, data=data, attr.index=attr.index))
return(-sum(split.val.vec))
}




# calculate gain ratio
gainRation <- function(x, data, class.index){
attr.index = x
splitInfo.attr = splitInfo(data, attr.index, class.index)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值