python 决策树简单实现(2)

决策树简单实现(1)

如何构建决策树?

我们知道树的构建过程是递归,递归最终要的就是找到边界条件,决策树的递归结束条件是:

1、程序遍历玩所有划分的数据集的属性;

2、每个分支下的所有势力都具有相同的分类;

def createTree(dataSet,labels):
    classList = [example[-1] for example in dataSet]
    if classList.count(classList[0]) == len(classList): 
          return classList[0]#stop splitting when all of the classes are equal
    if len(dataSet[0]) == 1: #stop splitting when there are no more features in dataSet
          return majorityCnt(classList)
    bestFeat = chooseBestFeatureToSplit(dataSet)
    bestFeatLabel = labels[bestFeat]
    myTree = {bestFeatLabel:{}}
    del(labels[bestFeat])
    featValues = [example[bestFeat] for example in dataSet]
    uniqueVals = set(featValues)
    for value in uniqueVals:
          subLabels = labels[:]       #copy all of labels, so trees don't mess up existing labels
          myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet, bestFeat, value),subLabels)
    return myTree         

代码解析:构建的input有两个,一个是数据集中所有的特征的标签,另一个是数据集;标签列表包含了数据集中所有的特征的标签,算法本身不需要此输入,但为了给胡数据的明确定义,将他作为一个参考;首先代码先构建一个classList列表变量,包含了数据集中的所有标签。停止条件一:所有的标签完全相同,则直接返回该类标签;停止条件二:使用完了所有特征,由于呢,第二个条件无法简单的返回唯一的类标签(也就是说在这个条件下有可能出现多个类标签)---这里使用majorrityCnt挑选出现次数最多的类别作为返回值。

def majorityCnt(classList):
      classCount={}
      for vote in classList:
            if vote not in classCount.keys(): classCount[vote] = 0
            classCount[vote] += 1
      sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
      return sortedClassCount[0][0]


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值