数据挖掘算法-ID3决策树

ID3决策树R实现

##设置工作空间

#先用setwd设置工作空间,如D盘,并将相关数据拷贝到该目录下
setwd("D:/ID3")
#读入数据
data=read.csv("D:/ID3/data")
#数据命名
colnames(data)<-c("x1","x2","x3","result")
#计算一列数据的信息熵
calculateEntropy <- function(data){
  t <- table(data)    
  sum <- sum(t)       
  t <- t[t!=0]        
  entropy <- -sum(log2(t/sum)*(t/sum))
  return(entropy)
}
#计算两列数据的信息熵
calculateEntropy2 <- function(data){
  var <- table(data[1])
  p <- var/sum(var)
  varnames <- names(var)
  array <- c()
  for(name in varnames){
    array <- append(array,calculateEntropy(subset(data,data[1]==name,select=2)))
  }
  return(sum(array*p))
}
buildTree <- function(data){
  if(length(unique(data$result)) == 1){
    cat(data$result[1])
    return()
  }
  if(length(names(data)) == 1){
    cat("...")
    return()
  }
  entropy <- calculateEntropy(data$result)  
  labels <- names(data)
  label <- ""
  temp <- Inf
  subentropy <- c()
  for(i in 1:(length(data)-1)){
    temp2 <- calculateEntropy2(data[c(i,length(labels))])
    if(temp2 < temp){         
      temp <- temp2          
      label <- labels[i]      
    }
    subentropy <- append(subentropy,temp2)  
  }
  cat(label)
  cat("[")
  nextLabels <- labels[labels != label]
  for(value in unlist(unique(data[label]))){
    cat(value,":")
    buildTree(subset(data,data[label]==value,select=nextLabels))
    cat(";")
  }
  cat("]")
}
#构建分类树
buildTree(data)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值