《机器学习实战》学习笔记(2)—— 使用ID3算法构造决策树

1 决策树算法概述

工作原理:

得到原始数据集,然后基于最好的属性值划分数据集,由于特征值可能多余两个,因此可能存在大于两个分支的数据集划分。第一次划分后,数据将被向下传递到树分支的下一个节点,在这个节点上,我们可以再次划分数据。

递归结束的条件

程序遍历完所有划分数据集的属性,或者每个分支下的所有实例都具有相同的分类。如果所有实例具有相同的分类, 则得到一个叶子节点或终止块。任何到达叶子结点的数据必然属于叶子节点的分类。


2 创建分支 createBranch() 的伪代码

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

3 Wiki——奥卡姆剃刀原理、ID3算法、信息熵与信息增益

(1)奥卡姆剃刀原理

奥卡姆剃刀(英语:Occam’s Razor, Ockham’s Razor),意思是简约之法则。他在《箴言书注》2卷15题说

切勿浪费较多东西,去做‘用较少的东西,同样可以做好的事情’。

换一种说法,如果关于同一个问题有许多种理论,每一种都能作出同样准确的预言,那么应该挑选其中使用假定最少的。尽管越复杂的方法通常能作出越好的预言,但是在不考虑预言能力(即结果大致相同)的情况下,假设越少越好。

(2)ID3算法介绍

ID3算法是决策树的一种,它是基于奥卡姆剃刀原理的,即用尽量用较少的东西做更多的事。ID3算法,即Iterative Dichotomiser 3,迭代二叉树3代,是Ross Quinlan发明的一种决策树算法,这个算法的基础就是上面提到的奥卡姆剃刀原理,越是小型的决策树越优于大的决策树,尽管如此,也不总是生成最小的树型结构,而是一个启发式算法。

信息论中,期望信息越小,那么信息增益就越大,从而纯度就越高。ID3算法的核心思想就是以信息增益度量属性的选择,选择分裂后信息增益最大的属性进行分裂。该算法采用自顶向下的贪婪搜索遍历可能的决策空间。

(3)信息熵(Information entropy)

在信息论中,熵是接收的每条消息中包含的信息的平均量,又被称为香农熵、信息熵、信源熵、平均自信息量。这里,“消息”代表来自分布或数据流中的事件、样本或特征。(熵最好理解为不确定性的量度而不是确定性的量度,因为越随机的信源的熵越大。)

熵越高,混合的信息越多

   假如一个随机变量的取值为,每一种取到的概率分别是,那么

   的熵定义为

 

             

 

   意思是一个变量的变化情况可能越多,那么它携带的信息量就越大。

 

   对于分类系统来说,类别是变量,它的取值是,而每一个类别出现的概率分别是

 

             

 

   而这里的就是类别的总数,此时分类系统的熵就可以表示为

 

             

(4)信息增益(Information Gain)

   信息增益是针对一个一个特征而言的,就是看一个特征,系统有它和没有它时的信息量各是多少,两者

的差值就是这个特征给系统带来的信息量,即信息增益

   接下来以天气预报的例子来说明。下面是描述天气数据表,学习目标是play或者not play

 

   

 

   可以看出,一共14个样例,包括9个正例和5个负例。那么当前信息的熵计算如下

 

   

 

   在决策树分类问题中,信息增益就是决策树在进行属性选择划分前和划分后信息的差值。假设利用

   属性Outlook来分类,那么如下图

 

   

 

      划分后,数据被分为三部分了,那么各个分支的信息熵计算如下

 

       

 

       那么划分后的信息熵为

 

        

 

        代表在特征属性的条件下样本的条件熵。那么最终得到特征属性带来的信息增益为

 

        

 

   信息增益的计算公式如下

 

   

 

   其中为全部样本集合,是属性所有取值的集合,的其中一个属性值,中属性

   值为的样例集合,中所含样例数。

 

   在决策树的每一个非叶子结点划分之前,先计算每一个属性所带来的信息增益,选择最大信息增益的属性来划分,因为信息增益越大,区分样本的能力就越强,越具有代表性,很显然这是一种自顶向下的贪心策略。以上就是ID3算法的核心思想。

(5)关于信息增益的深入理解

:表示随机变量的不确定性。

条件熵:在一个条件下,随机变量的不确定性。

信息增益:熵 - 条件熵在一个条件下,信息不确定性减少的程度!

通俗地讲,X(明天下雨)是一个随机变量,X的熵可以算出来, Y(明天阴天)也是随机变量,在阴天情况下下雨的信息熵我们如果也知道的话(此处需要知道其联合概率分布或是通过数据估计)即是条件熵。两者相减就是信息增益

原来明天下雨例如信息熵是2,条件熵是0.01(因为如果是阴天就下雨的概率很大,信息就少了),这样相减后为1.99,在获得阴天这个信息后,下雨信息不确定性减少了1.99!是很多的!所以信息增益大!

也就是说,阴天这个信息对下雨来说是很重要的!所以在特征选择的时候常常用信息增益,如果IG(信息增益大)的话那么这个特征对于分类来说很关键~~ 决策树就是这样来找特征的!


4 决策树的优点与缺点

(1)优点

计算复杂度不高,输出易于理解的结果,对于中间值的缺失不敏感,可以处理不相关特征数据

(2)缺点

可能会产生过度匹配问题


5 Python代码实现

(1)计算香农熵

# 划分数据集的大原则是: 将无序的数据变得更加有序(尽量使信息熵降低)
# 信息增益(information gain): 在划分数据集前后信息熵发生的变化
# 获得 信息增益 最高 的特征就是最好的选择
# 集合信息 的 度量方式称为 香农熵(ShannonEntropy) 或 熵(entropy)

def calcShannonEnt(dataSet):
    """
    计算给定数据集的 香农熵
    :param dataSet:
    :return:
    """
    # 计算输入数据集的 样本 总数
    numEntries = len(dataSet)

    # 创建一个用于统计 标签 出现次数的 dict
    labelCounts = {}

    # 遍历数据集中的 样本
    for featVec in dataSet:
        # 当前 样本 的 标签 为 featVec[-1]
        currentLabel = featVec[-1]

        # 记录标签的出现次数
        if currentLabel not in labelCounts.keys():
            labelCounts[currentLabel] = 0
        labelCounts[currentLabel] += 1

    # 香农熵 初始化
    shannonEnt = 0.0

    # 遍历字典 labelCounts 的 key
    for key in labelCounts:

        # 计算 标签 出现的 频率
        prob = float(labelCounts[key])/numEntries

        # 计算 香农熵
        shannonEnt -= prob * log(prob, 2)
    return shannonEnt

# # 熵越高,则混合的数据越多
# print(calcShannonEnt(myDat))

(2)创建数据集

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()

(3)按照给定特征划分数据集

def splitDataSet(dataSet, axis, value):
    """
    按照给定的特征划分数据集
    遍历数据集中的每一个元素,一旦发现符合要求的值,则将其添加到新创建的列表中
    :param dataSet: 待划分
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《机器学习学习笔记.pdf》是一本机器学习学习笔记的电子书,其内容涵盖了机器学习的基本概念、算法原理和实践应用等方面。 该电子书的主要内容包括但不限于以下几个方面: 1. 机器学习基础:介绍了机器学习的基本概念、发展历史和核心原理,帮助读者建立起对机器学习的整体认识和理解。 2. 机器学习算法:详细介绍了常见的机器学习算法,包括监督学习算法(如线性回归、逻辑回归、决策树、支持向量机等)、无监督学习算法(如聚类算法、降维算法等)和强化学习算法等,使读者能够了解和掌握不同类型的机器学习算法及其应用场景。 3. 机器学习实践:讲解了机器学习的实践方法和流程,涵盖了数据预处理、特征工程、模型选择和评估等方面的内容,帮助读者掌握如何在实际问题中应用机器学习技术。 4. 应用案例:通过实际案例的介绍和分析,展示了机器学习在自然语言处理、计算机视觉、推荐系统等领域的应用,激发读者对机器学习在实际问题中的应用的兴趣和思考能力。 通过阅读《机器学习学习笔记.pdf》,读者可以系统地学习机器学习的基础知识和算法原理,了解机器学习的应用场景和实践方法,并通过实际案例的分析加深对机器学习技术的理解。这本电子书可以作为机器学习初学者的入门学习资料,也适合有一定机器学习基础的读者作为参考和进一步学习的资料。希望通过这本电子书的阅读,读者能够理解和掌握机器学习的相知识,为未来在机器学习领域的学习和研究打下坚实的基础。 ### 回答2: 《机器学习学习笔记.pdf》是一本介绍机器学习学习资料。机器学习是一种通过利用数据来训练计算机算法的方法,使其能够自动地从数据学习和提高性能。这本学习笔记涵盖了机器学习的基本概念、原理和方法,适合初学者和对机器学习感兴趣的读者。 首先,学习笔记机器学习的基本概念入手,包括机器学习的定义、应用领域以及机器学习的三个主要任务:监督学习、无监督学习和强化学习。然后,详细介绍了机器学习的基本原理,如训练集、测试集、特征选择和模型评估等。此外,学习笔记还介绍了几种常见的机器学习算法,如决策树、支持向量机和深度学习等。 除了理论知识,学习笔记还提供了实践案例和代码示例,帮助读者更好地理解和应用机器学习算法。读者可以通过实践案例来掌握机器学习算法的具体应用,并且可以利用代码示例进行实际编程实践。同时,学习笔记还讨论了机器学习的一些挑战和未来的发展方向,如数据质量、模型解释性和自动化机器学习等。 总的来说,《机器学习学习笔记.pdf》是一本全面介绍机器学习学习资料。它结合理论和实践,旨在帮助读者建立对机器学习的基本理解,并具备在实际问题中应用机器学习算法的能力。无论是初学者还是有一定机器学习基础的读者,都可以从中获得有益的知识和经验。 ### 回答3: 《机器学习学习笔记.pdf》是一本机器学习学习笔记文档。机器学习是人工智能领域的重要分支,它研究如何使计算机系统自动从数据学习和改进,以完成特定任务。这本学习笔记以简洁明了的方式介绍了机器学习的基本概念、算法和实践应用。 笔记中首先介绍了机器学习的基础知识,包括监督学习、无监督学习和强化学习等不同的学习类型。然后详细讲解了常用的机器学习算法,如线性回归、逻辑回归、决策树、支持向量机等。每种算法都给出了清晰的定义和示例,并详细解释了算法的原理和应用场景。 此外,《机器学习学习笔记.pdf》还包括了机器学习的实践应用和案例分析。它介绍了如何通过Python等编程语言和机器学习库进行实际的机器学习项目开发,包括数据预处理、特征工程、模型训练和评估等环节。对于初学者来说,这部分内容非常有价值,可以帮助他们快速进入实际应用的阶段。 总结来说,《机器学习学习笔记.pdf》是一本很好的机器学习入门教材,它详细介绍了机器学习的基本概念和常用算法,并提供了实际项目的实践指导。无论是对于想要了解机器学习基础知识的初学者,还是对于已经有一定机器学习经验的开发者来说,这本学习笔记都是一本值得阅读和参考的资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值