美文网首页
机器学习实战-决策树

机器学习实战-决策树

作者: z3r0me | 来源:发表于2017-10-23 17:29 被阅读24次

决策树

决策树是一个选择的过程,以树的结构来展示,其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出。
如找对象决策树

1_3.png

构造决策树

构造决策树的问题在于哪个特征在划分数据分类中起到决定性作用,为此要去评估起决定作用的特征值。
这里介绍两种方法信息增益和基尼不纯度

信息增益

信息增益是划分数据集之前之后的变化。信息增益最高的特征就是最好的选择。
集合信息的度量方式称之为熵或香农熵 ,其信息的熵计算公式为

pi为选择该类的概率
限制把数据集D 分成D1,D2,D3.... ,则划分后的信息熵为


那么信息增益则为:

实现代码

def chooseBestFeatureToSplit(dataSet):
    numFeatures = len(dataSet[0]) - 1      #the last column is used for the labels
    baseEntropy = calcShannonEnt(dataSet)
    bestInfoGain = 0.0; bestFeature = -1
    for i in range(numFeatures):        #iterate over all the features
        featList = [example[i] for example in dataSet]#create a list of all the examples of this feature
        uniqueVals = set(featList)       #get a set of unique values
        newEntropy = 0.0
        for value in uniqueVals:
            subDataSet = splitDataSet(dataSet, i, value)
            prob = len(subDataSet)/float(len(dataSet))
            newEntropy += prob * calcShannonEnt(subDataSet)     
        infoGain = baseEntropy - newEntropy     #calculate the info gain; ie reduction in entropy
        if (infoGain > bestInfoGain):       #compare this to the best gain so far
            bestInfoGain = infoGain         #if better than current best, set to best
            bestFeature = i
    return bestFeature                      #returns an integer

基尼不纯度

同样的可以通过基尼不纯度来划分数据集
基尼不纯度的定义:

在划分k个子集后数据集的不纯度的公式为

前后的变化:

递归构建决策树

这里使用信息增益的方法来选择特征,通过递归来构造决策树

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  

可视化决策树

创建的决策树以字典的新式返回,使用graphviz来绘制
以下是隐形眼镜决策树

1.jpg

相关文章

  • python决策树(二叉树、树)的可视化

    问题描述 在我学习机器学习实战-决策树部分,欲可视化决策树结构。最终可视化结果: 解决方案 决策树由嵌套字典组成,...

  • 机器学习实战Py3.x填坑记—决策树

    在输入完程序清单3-5之后运行命令: 遇到问题搜索如下参考:[机器学习&数据挖掘]机器学习实战决策树plotTre...

  • 2018文章集合

    2018年公众号文章集合,过年在家系统学习下。 机器学习实战 该系列讲解了经典机器学习算法的原理(KNN,决策树,...

  • 《机器学习实战》决策树构建学习

    概要记录 Decision Tree基本学习,学习自《机器学习实战》P32 - P42 (基于信息增益的决策树构建...

  • 【机器学习】决策树(构造篇)

    下一篇为:【机器学习】决策树(Matplotlib可视化+项目实战) 最经常使用的机器学习算法k近邻法最大缺点是无...

  • 机器学习实战教程(三):决策树实战篇(a)

    一、前言 上篇文章机器学习实战教程(二):决策树基础篇[https://www.mlxs.top/portal.p...

  • 《机器学习实战》

    有道笔记原文 机器学习实战 Github代码 第一章 机器学习基础 2007年选出的十大数据挖掘算法C4.5决策树...

  • Python pickle模块踩坑

    跟着机器学习实战写代码,决策树这里有一段是保存决策树,使用pickle模块保存,原书是基于2.7的,在3.6上有坑...

  • 机器学习实战-决策树

    1、背景 以上就是之前见过的树状模型,但这里它代表着决策树直观的表达形式。其特殊意义在于,没个叶节点,代表着要划分...

  • 【机器学习实战】决策树

    算法思路 在构造决策树时,第一个需要解决的问题就是,如何确定出哪个特征在划分数据分类是起决定性作用,或者说使用哪个...

网友评论

      本文标题:机器学习实战-决策树

      本文链接:https://www.haomeiwen.com/subject/yltnuxtx.html