机器学习python实战——决策树

决策树的构造


决策树定义


决策树算法是一种逼近离散函数值的方法
通过把实例从根节点排列到某个叶子结点来对实例分类。叶子结点即为实例所属的分类。树上的每一个结点指定了对实例的某个属性的测试,并且该结点的每一个后继分支对应于该属性的一个可能值。分类实例的方法是从这棵树的根节点开始,测试这个结点的属性,然后按照给定实例的属性值对应的树枝向下移动。然后这个过程在以新结点的根的子树上重复。


决策树优缺点


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


伪代码createBranch()

构造决策树的时候,第一个需要解决的问题是:当前数据集上哪个特征在划分数据分类时起决定性作用。
为了找到决定性的特征,划分出最好的结果,我们必须评估每个特征。完成测试之后,原始数据集就被划分为几个数据子集。这些数据子集会分布在第一个决策点的所有分支上。如果某个分支下的数据属于同一类型,则当前已经正确划分数据类型如果数据不属于同一类型,则需要重复划分数据子集的过程。
如何划分数据子集的算法和划分原始数据集的方法相同,直到所有具有相同类型的数据均在一个数据子集内。

createBranch():

    检测数据集中的每个子项是否属于同一分类:
        if so return 类标签;
        else
            寻找划分数据集的最好特征
            划分数据集
            创建分支节点
                for 每个划分的子集
                    调用函数createBranch并增加返回结果到分支节点中
            return 分支节点

决策树的一般流程

  1. 收集数据
  2. 准备数据:树构造算法只适用于标称型数据,因此数值型数据必须离散化。
  3. 分析数据:可以使用任何方法,构造树完成之后,我们应该检查图形是否符合预期。
  4. 训练算法:使用经验树计算错误率
  5. 测试算法:使用经验树计算错误率。
  6. 使用算法

ID3算法划分数据集

信息增益(information gain)

划分数据的最大原则是:将无序的数据变得更加有序。
在划分数据集之前之后信息发生的变化称为信息增益,计算每个特征值划分数据集获得的信息增益,活的信息增益最高的特征就是最好的选择。


如何计算信息增益?我们利用来度量(还有一种叫做基尼不纯度Gini impurity)
集合信息的度量方式称为熵定义为信息的期望值
那么信息的定义:
如果待分类的事务可能划分在多个分类之中,则符号xi的信息定义:
l(xi)=-log2p(xi) 其中p(xi) 是选择该分类的概率

计算熵的公式 H=-p(xi)log2p(xi)(从i=1到n求和)

python实现:计算给定数据集的熵

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 shannonEnt

划分数据集

展开阅读全文

没有更多推荐了,返回首页