关于《机器学习实战》中创建决策树的核心代码分析

本文详细分析了《机器学习实战》中创建决策树的核心代码,讲解了如何利用ID3算法和递归调用构建决策树。通过代码跟踪,解释了如何选择最优特征、划分数据集并构建嵌套字典结构的决策树。最后,展示了最终决策树的生成过程。
摘要由CSDN通过智能技术生成

               关于《机器学习实战》中创建决策树的核心代码分析

                SIAT  nyk          2017年10月21日星期六

一、源码内容

def createTree(dataSet,labels):

   classList = [example[-1] for example in dataSet]

    ifclassList.count(classList[0]) == len(classList):

       return classList[0]#stop splitting when all of the classes are equal

    iflen(dataSet[0]) == 1: #stop splitting when there are no more features indataSet

       return majorityCnt(classList)

   bestFeat = chooseBestFeatureToSplit(dataSet)

   bestFeatLabel = labels[bestFeat]

   myTree = {bestFeatLabel:{}}

   del(labels[bestFeat])

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

   uniqueVals = set(featValues)

    forvalue in uniqueVals:

       subLabels = labels[:] #copy all of labels, so trees don't mess upexisting 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'],

               [0, 1, 'no']]

labels = ['nosurfacing','flippers']

dataSet只有属性的值和类标签的值,不知道属性代表的含义,比较抽象,因此对每一个属性附加标签说明,那么有以下的训练集

(属性标签1no surfacing

(属性标签2flippers

  (类标签)  Fish(在决策树描述中用不上)

           1

       1

      yes

           1

       1

      yes

           1

       0

      no

           0

       1

      no

           0

       1

      no

 

 这本书最大的优点就是实践性非常强,书本所有的算法不管多高深都给用目前世界上在深度学习(机器学习)领域第一受欢迎的Python语言实现,最大的缺点就是很少讲算法背后的数学理论,比如要弄懂条件熵,就要懂,离散随机变量,随机事件,二维离散随机变量,离散随机变量的分布律,经典概率事件,条件概率的求法。数学的期望定义等等。书本中实际上采用ID3算法构建决策树,ID3算法就是一种通过信息伦里面的信息增益的方法来选择最佳特征然后划分训练集的递归过程(不懂的请参考:http://blog.csdn.net/xwd18280820053/article/details/70739368),需要注意以下公式的内含:

需要知道原始数据集的信息熵,然后每个特征属性所有取值对应的条件熵,原信息熵减去条件熵所得到的差值就是该特征值所对应的信息增益,计算完所有的属性特征的信息增益,选一个最大的,那么该特征属性就是最优的划分属性,然后以它为划分基准,该特征属性有多少种取值,就有多少种子数据集的划分,然后再划分的数据集当中,有些是非常纯的,有些是不纯的。在觉得构建决策树过程中,它是一个递归的过程,对于纯的子训练集,那么就把他归到叶子节点,对于不纯的子训练集,则继续按照上面的求最大信息增益法选择最优特征然后进一步划分。直到纯或者人为干涉停止为止(什么情况下需要人为干涉让其停止呢,简单来说,已经是针对最后一个特征划分了,但是类标签属性依然不纯,比如上面的鱼类这个,按

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值