机器学习(三)——决策树构建

本文详细介绍了决策树的构建过程,包括信息增益、信息增益率和基尼指数三种方法。通过实例展示了如何计算和利用这些指标划分数据集,构建决策树。并对比了不同划分方式对决策树结构的影响。
摘要由CSDN通过智能技术生成

1.决策树解析

        决策树是一种描写对实例进行分类的树型结构。决策树由结点和有向边组成。结点有两种类型:内部结点和叶节点。内部结点表示一个特征或属性,叶节点表示一个类。决策树分类算法是一种基于实例的归纳学习方法,它能从给定的无序的训练样本中,提炼出树型的分类模型。树中的每个非叶子节点记录了使用哪个特征来进行类别的判断,每个叶子节点则代表了最后判断的类别。

        决策树的优点有:计算复杂度不高,输出结果容易理解,对中间值的缺失不敏感,可以处理不相关的特征数据。 其缺点就是容易产生过度匹配的问题,也就是过拟合问题。

2.决策树的简单构建

2.1信息增益构建决策树

       我们先按照书上的代码示例来构建一个简单的决策树,在此之前先了解一下信息增益的基本信息。 划分数据集的大原则是:将无序的数据变得更有序。在划分数据集之前之后信息发生的变化称为信息增益,我们可以计算每一个特征值划分数据集获得信息增益,获得信息增益最高的特征就是最好的选择。 信息熵的计算公式为

H=-\sum_{i=1}^{n}p(x_{i})log_{2}p(x_{i})

信息增益的计算方法为:

 

下面是计算给定数据集的香农熵的方法

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
    for key in labelCounts:
        prob = float(labelCounts[key])/numEntries
        shannonEnt -= prob*log(prob,2)
    return shannonEnt

现在按照书本上的简单例子来测试一下

def createDataSet():
    dataSet = [[1,1,'yes'],
               [1,1,'yes'],
               [1,0,'no'],
               [0,1,'no'],
               [0,1,'no']]
    labels = ['no surfacing','flippers']
    return dataSet,labels
 myDat,labels=createDataSet()
 print(myDat)
 print(calcShannonEnt(myDat))

结果展示:

 熵越高则混合的数据也越多,我们可以通过在数据集中添加更多的分类,观察熵是怎么变化的

 myDat[0][-1]='maybe'
    print(myDat)
    print(calcShannonEnt(myDat))

         分类算法除了需要测量信息熵,还需要划分数据集,度量划分数据集的熵,以便判断当前是否正确的划分了数据集。我们将对每个特征划分数据集的结果计算一次信息熵,判断哪一个特征是划分数据集是最后的划分方式。

划分数据集的代码如下,三个参数分别为待划分的数据集,划分数据集的特征,特征的返回值

def splitDataSet(dataSet,axis,value):
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值