决策树算法(六)——构建决策树

本文详细介绍了如何使用递归方法构建决策树。递归过程基于信息增益选择最佳属性划分数据集,直至所有特征已用尽或每个子集具有相同分类。在Python中,通过trees.py文件实现决策树代码,展示了如何处理数据集并建立嵌套字典表示决策树结构。最后,文章鼓励读者深入学习,做到最好。
摘要由CSDN通过智能技术生成

写在前面的话

我就是一俗人.我俗我开心.

递归构建决策树

之前我们已经学习了怎么根据信息论的方法,把一个数据集从杂乱无章的数据集中划分出来,我们使用信息论来构建决策树一级一级分类的方法就是一个递归的过程。

它的工作原理如下:

  • 得到原始数据集,然后基于最好的属性值划分数据集。每一次划分数据集,我们都要消耗一个特征,根据某个特征将某些性质相同的元素剥离出来
  • 划分数据的时候我们根据香农熵,计算信息增益之后找到最好的属性值进行数据的划分。
  • 由于特征值可能有多于两个的,因此可能存在大于两个分支的数据集划分
  • 第一次划分数据将向下传递到树分支的下一个节点,在这个节点上,我们可以再次划分数据集,因此我们可以采用递归的原则来处理数据集。

我们都知道递归必须要有一个终止条件,1)如果程序已经遍历完了所有的特征属性,2)或者每个分支下的所有实例都具有相同的分类,我们得到一个叶子节点或者终止块.这个就是我们递归的终止条件.

出现1这种情况的特殊情况就是我们之前在决策树算法(五)——处理一些特殊的分类 这篇文中已经详细的分析过了.当已经遍历完所有的特征属性但是任然还有一些类别灭有找出,那么我们就根据选举投票的方法来进行分类.

当然对于第一个结束条件算法可以终止,我们还可以设置算法可以划分的最大分组的数目.

创建决策树代码

下面我们来构建决策树的代码,使用递归来进行.
我们还是打开我们之前的文件trees.py, 在这个文件中添加如下的代码:


def createTree(dataSet,labels):
    classList = [example[-1] for example in dataSet]

    if classList.count(classList[0]) == len (classList):
        return classList[0]

    if len(dataSet[0]) == 1:
        return majorityCnt(classList)

    bestFeat = chooseBestFeatureToSplit(dataSet)
    bestFeatLabel = labels[bestFeat]

    myTree = {
   bestFeatLabel:{
   }}

    del(labels[bestFeatLabel])

    featValues = [example[bestFeat] for example in dataSet]

    uniqueVals = set(featValues)

    for value in uniqueVals:
        subLabels = labels[:]
        myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet,bestFeat,value),subLabels)


    return myTree


之后我们来分析一下这段代码:

还是用我们之前几章的那个数据集:
这里写图片描述
在这里任然需要注意我们的数据集是前面每一项都是特征值,最后一项是我们的类别信息.如下所示

dataSet = [[1,1,'yes'],
              [1,1,'yes'],
              [1,0,'no'],
              [0,1,'no'],
          
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值