机器学习——决策树

      定义         

        分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点和有向边组成。结点有两种类型:内部结点和叶节点。内部结点表示一个特征或属性,叶节点表示一个类。

        算法结构 

        决策树在逻辑上以树的形式存在,包含根节点、内部结点和叶节点。
        根节点:包含数据集中的所有数据的集合
        内部节点:每个内部节点为一个判断条件,并且包含数据集中满足从根节点到该节点所有条件的数据的集合。根据内部结点的判断条件测试结果,对应的数据的集合将分到两个或多个子节点中。
        叶节点:最终的类别。

         

        一般流程 

  1. 通过任意方法收集数据
  2. 数据离散化
  3. 检查完成后的构造树是否符合预期
  4. 构成树的数据结构
  5. 使用经验书计算错误率
  6. 使用算法

         信息增益

        在建立决策树之前,我们需要先学习一个非常重要的概念,那就是信息熵。

       一条信息的信息量大小和它的不确定性有直接的关系,要搞清楚一件非常非常不确定的事情,或者是我们一无所知的事情,需要了解大量信息==>信息量的度量就等于不确定性的多少。

        熵定义为信息的期望值,如果待分类的事物可能划分在多个类之中,则符号xi的信息定义为:

                               ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        l(x_{i})=-log_{2}p(x_{i})

                                                                        p(x_{i})为选择该分类的概率

        为了计算熵,需要计算所有类别的可能值包含的信息期望值,通过以下公式得到

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

                                        n为分类数目,随机数目的不确定性随熵增大而增大

        代码实现

from math import log

def createDataSet():
    dataSet = [[1, 1, 'yes'],
               [1, 1, 'yes'],
               [1, 0, 'no'],
               [0, 1, 'no'],
               [0, 1, 'no']]
    labels = ['no surfacing','flippers']
    #change to discrete values
    return dataSet, labels

def calcShannonEnt(dataSet):
    numEntries = len(dataSet)
    labelCounts = {}
    for featVec in dataSet: #the the number of unique elements and their occurance
        currentLabel = featVec[-1]
        if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] = 0
        labelCounts[currentLabel] += 1
    shannonEnt = 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值