决策树

作者: 南衍儿 | 来源:发表于2019-04-18 04:24 被阅读0次

决策树


3.1决策树的构造

决策树

优点:计算复杂度较低,输出易于理解,对中间值的缺失不敏感,可以处理不相关数据
缺点:可能会产生过度匹配的问题
适用数据类型:数值型和标称型

构造决策树的第一个问题,找出当前数据集上对数据划分取决定性因素的特征,这时原始数据被划分成几个数据子集.这些子集分布在各个节点上,如果该节点的数据都是同类型,则结束,如果不是同一类型,继续进行决策树.


3.1.1信息增益

在划分数据集之后信息发生的变化称为信息增益.获得信息增益最高的特征就是最好的选择

信息熵概念:一个系统越有序,信息熵就越低,反之一个系统越是胡乱,信息熵就越高.信息熵被认为是信息有序化程度的一个度量.

信息量的定义:如果一个消息x出现的概率为p,则这一个消息所含的信息量是
l(x) = log_2(\frac{1}{p(x)}) = -log_2p(x)

信息熵:
H = \sum_{i=1}^n p(x_i)l(x_i) = -\sum_{i=1}^n p(x_i)log_2p(x_i)
计算给定数据的信息熵:

from math import log
def calcShannonEnt(dataSet):
    numEntries = len(dataSet)
    labelCounts = {}
    #以下五行为所有可能分类创建字典
    for featVec in dataSet:
        currentLabel = featVec[-1]
        if currentLabel not in labelCounts.keys():
            labelCounts[currentLabel] = 0
        labelCounts[currentLabel] += 1
    shannonEnt = 0.0
    for key in labelCounts:
        prob = float(labelCounts[key])/numEntries
        shannonEnt -= prob*log(prob,2)
    return shannoEnt


3.1.2划分数据集

基本思路:
遍历列表,将特征值符合value的值提出来,并将对应特征值抽掉,得到抽取后的数据子集,计算该数据子集的信息熵

def spiltDataSet(dataSet,axis,value):
    #创建新的list对象,Python传入的是引用,如果直接使用dataSet会造成全局的dataSet改变
    retDataSet = []
    for featVec in dataSet:
        if featVec[axis] == value:
            #以下三行抽取
            reduceFeatVec = featVec[: axis]
            reduceFeatVec.extend(featVec[axis+1:])   #分辨extend函数和append函数的区别
            retDataSet.append(reduceFeatVec)
    return retDataSet

整理得到一个给定数据集,求出最好当前数据集最好的划分特征的算法

def chooseBestFeatureToSplit(dataSet):
    numFeatures = len(dataSet[0]) -1
    baseEntropy = calcShannonEnt(dataSet)  #基础的熵
    bestInfoGain = 0.0   #信息增益
    bestFeature = -1
    for i in range(numFeatures):
        #(以下两行) 创建唯一的分类标签列表
        featList = [example[i] for example in dataSet]
        uniqueVals = set(featList)   #取set
        newEntropy = 0.0
        #(以下五行) 计算每种划分方式的信息熵
        for value in uniqueVals:
            subDataSet = spiltDataSet(dataSet,i,value)
            prob = len(subDataSet)/float(len(dataSet))
            newEntropy += prob*calcShannonEnt(subDataSet)
        infoGain = baseEntropy - newEntropy
        if(infoGain > bestInfoGain):
            # 计算最好的信息增益
            bestInfoGain = infoGain
            bestFeature = i
    return bestFeature

3.1.3递归构建决策树

原理:得到原始数据集,然后基于最好的属性值划分数据集,由于特征值可能多于两个,因此可能存在大于两个分支的数据集划分.第一次划分之后,数据将被向下传递到树分支的下一个节点,在这个节点上,我们可以再次划分数据.因此我们可以采用递归的原则来处理数据集
递归结束的条件是:程序遍历完所有划分数据集的属性,或者每个分支下的所有实例都具有相同的分类.如果所有实例具有相同的分类,则得到一个叶子节点或者终止块,任何到达叶子节点的数据必然属于叶子节点的分类

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

以上代码:使用分类名称的列表,创建classList中唯一值的数据字典,字典对象存储了classList中每个类的名称和标签出现的次数,返回出现最多次的标签名称和次数

相关文章

  • 机器学习6-决策树

    一. 决策树概述 1.1 什么是决策树 决策树输入: 测试集决策树输出: 分类规则(决策树) 1.2 决策树算法概...

  • 决策树

    1、决策树 决策树学习通常包括3个步骤: 特征选择。 决策树生成。 决策树剪枝。 决策树的学习目标是:根据给定的训...

  • 决策树

    决策树 决策树模型与学习 特征选择 决策树的生成 决策树的剪枝 CART 算法 决策树模型呈树形结构,在分类问题中...

  • 决策树算法总结

    目录 一、决策树算法思想 二、决策树学习本质 三、总结 一、决策树(decision tree)算法思想: 决策树...

  • 机器学习 - 决策树算法[一]

    1 决策树模型与学习 1.1 决策树模型 决策树定义: 分类决策树模型是一种描述对实例进行分类的树形结构。决策树由...

  • 机器学习系列(三十六)——回归决策树与决策树总结

    本篇主要内容:回归决策树原理、回归树学习曲线、决策树总结 回归决策树原理 回归决策树树是用于回归的决策树模型,回归...

  • [机器学习]决策树

    决策树 @(技术博客)[机器学习, 决策树, python] 学习决策树首先要搞清楚决策树是什么(what),在弄...

  • 经典机器学习系列之【决策树详解】

      这节我们来讲说一下决策树。介绍一下决策树的基础知识、决策树的基本算法、决策树中的问题以及决策树的理解和解释。 ...

  • 第5章 决策树

    内容 一、决策树内容简介 二、决策树的模型与学习 三、特征选择 四、决策树生成 五、决策树剪枝 六、CART算法 ...

  • 决策树与随机森林

    PART I 决策树 (Decision Tree) 决策树基本知识 决策树何时停止生长:(I) all leaf...

网友评论

      本文标题:决策树

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