数据挖掘之决策树介绍

决策树引入:

        决策树是建立在信息论基础之上,对数据进行分类挖掘的一种方法。其思想是,通过一批已知的训练数据建立一棵决策树,然后利用建好的决策树,对数据进行预测。决策树的建立过程可以看成是数据规则的生成过程。由于基于决策树的分类方法结构简单,本身就是人们能够理解的规则。其次,决策树方法计算复杂度不大,分类效率高,能够处理大数据量的训练集;最后,决策树方法的分类精度较高,对噪声数据有较好的健壮性,符合一般系统的要求。说了这么多,可能还不是太了解决策树,用一个例子来说明吧。

套用俗语,决策树分类的思想类似于找对象。现想象一个女孩的母亲要给这个女孩介绍男朋友,于是有了下面的对话:

      女儿:多大年纪了?
      母亲:26。
      女儿:长的帅不帅?
      母亲:挺帅的。
      女儿:收入高不?
      母亲:不算很高,中等情况。
      女儿:是公务员不?
      母亲:是,在税务局上班呢。
      女儿:那好,我去见见。

      这个女孩的决策过程就是典型的分类树决策。相当于通过年龄、长相、收入和是否公务员对将男人分为两个类别:见和不见。假设这个女孩对男人的要求是:30岁以下、长相中等以上并且是高收入者或中等以上收入的公务员,那么这个可以用下图表示女孩的决策逻辑:


对未知的选项都可以归类到已知的选项分类类别中

 决策树的描述:

         在决策树构造中,如何选取一个条件属性作为形成决策树的节点是建树的核心。一般情况下,选取的属性能最大程度反映训练样本集的分类特征。ID3算法作为决策构造中的经典算法,引入了信息论的方法,应用信息论中的熵的概念,采用信息增益作为选择属性的标准来对训练样本集进行划分,选取信息增益最大的属性作为当前节点。计算信息增益还要涉及三个概念:信息熵、信息增益和信息条件熵。

#计算给定数据集的香农熵
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 shannonEnt


信息熵

    信息熵也称为香农熵,是随机变量的期望。度量信息的不确定程度。信息的熵越大,信息就越不容易搞清楚。处理信息就是为了把信息搞清楚,就是熵减少的过程。


信息条件熵

    


信息增益

用于度量属性A降低样本集合X熵的贡献大小。信息增益越大,越适于对X分类。

ID3算法

ID3的思想便是:

  1. 自顶向下的贪婪搜索遍历可能的决策树空间构造决策树(此方法是ID3算法和C4.5算法的基础);
  2. 从“哪一个属性将在树的根节点被测试”开始;
  3. 使用统计测试来确定每一个实例属性单独分类训练样例的能力,分类能力最好的属性作为树的根结点测试(如何定义或者评判一个属性是分类能力最好的呢?这便是下文将要介绍的信息增益,or 信息增益率)。
  4. 然后为根结点属性的每个可能值产生一个分支,并把训练样例排列到适当的分支(也就是说,样例的该属性值对应的分支)之下。
  5. 重复这个过程,用每个分支结点关联的训练样例来选取在该点被测试的最佳属性。

这形成了对合格决策树的贪婪搜索,也就是算法从不回溯重新考虑以前的选择。



发布了7 篇原创文章 · 获赞 8 · 访问量 8075

猜你喜欢

转载自blog.csdn.net/m0_38086244/article/details/71438838
今日推荐