决策树是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果。如下图所示:

划分选择

决策树如何选择最优划分属性?一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的"纯度" (purity) 越来越高。

基于信息增益(information gain)的ID3决策树

  • 信息熵(information gain)
    衡量样本纯度的一个指标,信息熵越小,则纯度越高,并且信息熵也是度量随机变量不确定性的指标,信息熵越大,随机变量越不确定。其公式定义如下:
    E n t ( D ) = − ∑ k = 1 ∣ y ∣ p k log ⁡ 2 p k Ent(D)=-\sum\limits_{k=1}^{\mid y \mid}p_{k}\log_{2}{p_{k}} Ent(D)=−k=1∑∣y∣​pk​log2​pk​
    其中, p k p_{k} pk​为第 k k k类样本的概率, ∣ y ∣ \mid y \mid ∣y∣表示类别的个数,实际上,信息熵是自信息的期望。
  • 条件熵
    Y的信息熵关于概率分布X的期望 H ( Y ∣ X ) = ∑ x p ( x ) H ( Y ∣ X = x ) H(Y\mid X)=\sum\limits_xp(x) H(Y\mid X=x) H(Y∣X)=x∑​p(x)H(Y∣X=x)
  • 信息增益
    信息增益=信息熵-条件熵
    信息增益越大,则意味着使用该属性来进行划分所获得的纯度提升越大,ID3决策树学习算法就是以信息增益为准则来划分属性。

基于增益率的C4.5决策树

基于信息增益(information gain)的ID3决策树存在一个缺陷,就是对可取值数目较多的属性有所偏好。例如一个属性具有17个取值,每个取值包含一个样本,则划分的节点仅包括一个样本,显然此时纯度最大,但是这样划分会使模型缺乏泛化能力。因此使用增益率来选择最优划分属性。增益率定义为:
信息增益 = 增益率 / 属性 a 的固有值 信息增益=增益率/属性a的固有值 信息增益=增益率/属性a的固有值
属性a的固有值定义为:

当属性a可取值较多时,属性a的固有值通常会较大
注意:增益率准则对可取值数目较少的属性有所偏好,因此 C4.5 算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式算法。
启发式算法: 找出信息增益高于平均水平的属性,然后从中,筛掉属性可取值多的属性,即选择增益率高的。

基于基尼指数的CART决策树

CART决策树是Classification And Regression Tree的简称,分类和回归树,顾名思义可用于分类和回归任务中。CART决策树是使用基尼指数最小的属性作为最优划分属性。数据集中可用基尼值来度量纯度,基尼值公式定义如下:

基尼值反映了从数据集中随机抽取两个样本,其类别标记不一致的概率.因此, 基尼值越小,则数据集的纯度越高
基尼指数


需要注意的是,实际情况中,通常把属性值的取值分为两部分进行算基尼指数,最后在选择最小的基尼指数所对应的属性及范围确定为最优划分属性点。

使用基尼指数和熵的鸢尾花数据分类案例

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

接下来定义加载鸢尾花数据函数,需要注意的是这里使用了分词抽样,因为官网提供的标签数据中,前50个样本为类别0,中间50个样本为类别1,后面50个样本为类别2。

def test_DecisionTreeClassifier(*data):X_train,X_test,Y_train,Y_test=dataclf=DecisionTreeClassifier()clf.fit(X_train,Y_train)print("训练得分:%f"%(clf.score(X_train,Y_train)))print("测试得分:%f"%(clf.score(X_test,Y_test)))
X_train,X_test,Y_train,Y_test=load_data()
test_DecisionTreeClassifier(X_train,X_test,Y_train,Y_test)

运行结果:

DecisionTreeClassifier函数默认使用基尼指数评分准则,接下来考察不同的平均准则criterion对应分类性能的影响。

def test_DecisionTreeClassifier_criterion(*data):X_train,X_test,Y_train,Y_test=datacriterions=['gini','entropy']for criterion in criterions:clf=DecisionTreeClassifier(criterion=criterion)clf.fit(X_train,Y_train)print("评分准则:%s"%criterion)print("训练得分:%f"%(clf.score(X_train,Y_train)))print("测试得分:%f"%(clf.score(X_test,Y_test)))
X_train,X_test,Y_train,Y_test=load_data()
test_DecisionTreeClassifier_criterion(X_train,X_test,Y_train,Y_test)

运行结果:

针对这里,两耳对于训练集的拟合都非常好,对于测试集中,Gini系数的策略预测性能比使用熵的预测性能高。

【西瓜书+南瓜书】学习笔记3相关推荐

  1. 机器学习【西瓜书/南瓜书】--- 第1章绪论(学习笔记+公式推导)

    目录 前言 主要符号表 1.1 引言 1.2 基本术语 1.3 假设空间 1.4 归纳偏好 前言 本博客为博主在学习 机器学习[西瓜书 / 南瓜书]过程中的学习笔记,每一章都是对<西瓜书> ...

  2. 机器学习【西瓜书/南瓜书】--- 第2章模型评估与选择(上)(学习笔记+公式推导)

    目录 前言 2.1 经验误差与过拟合 2.2 评估方法 2.2.1 留出法(hode−outhode-outhode−out) 2.2.2 交叉验证法(crossvalidationcross val ...

  3. 【组队学习】【35期】吃瓜教程——西瓜书+南瓜书

    吃瓜教程--西瓜书+南瓜书 航路开辟者:谢文睿.秦州 领航员:凌亮 航海士:谢文睿.秦州 基本信息 开源内容:https://github.com/datawhalechina/pumpkin-boo ...

  4. 【组队学习】【33期】吃瓜教程——西瓜书+南瓜书

    吃瓜教程--西瓜书+南瓜书 航路开辟者:谢文睿.秦州 领航员:潘磊 航海士:谢文睿.秦州 基本信息 开源内容:https://github.com/datawhalechina/pumpkin-boo ...

  5. 【组队学习】【32期】吃瓜教程——西瓜书+南瓜书

    吃瓜教程--西瓜书+南瓜书 航路开辟者:谢文睿.秦州 领航员:陈伟峰 航海士:谢文睿.秦州 基本信息 开源内容:https://github.com/datawhalechina/pumpkin-bo ...

  6. 秦州:西瓜书 + 南瓜书 吃瓜系列 14. 降维与度量学习(下)

    吃瓜教程--西瓜书+南瓜书 Datawhale南瓜书是经典机器学习教材<机器学习>(西瓜书)的公式推导解析指南,旨在让在学习西瓜书的过程中,再也没有难推的公式,学好机器学习. 内容属性:机 ...

  7. 秦州:西瓜书 + 南瓜书 吃瓜系列 13. 降维与度量学习(上)

    吃瓜教程--西瓜书+南瓜书 Datawhale南瓜书是经典机器学习教材<机器学习>(西瓜书)的公式推导解析指南,旨在让在学习西瓜书的过程中,再也没有难推的公式,学好机器学习. 内容属性:机 ...

  8. 【组队学习】【31期】 吃瓜教程——西瓜书+南瓜书

    吃瓜教程--西瓜书+南瓜书 航路开辟者:谢文睿.秦州 领航员:张海腾 航海士:谢文睿.秦州 基本信息 开源内容:https://github.com/datawhalechina/pumpkin-bo ...

  9. 【组队学习】【30期】吃瓜教程——西瓜书+南瓜书

    吃瓜教程--西瓜书+南瓜书 航路开辟者:谢文睿.秦州 领航员:邱振波 航海士:谢文睿.秦州 基本信息 开源内容:https://github.com/datawhalechina/pumpkin-bo ...

  10. 【组队学习】【29期】4. 吃瓜教程——西瓜书+南瓜书

    4. 吃瓜教程--西瓜书+南瓜书 航路开辟者:谢文睿.秦州 领航员:刘琳 航海士:谢文睿.秦州 基本信息 开源内容:https://github.com/datawhalechina/pumpkin- ...

最新文章

  1. [NOI2002] 银河英雄传说(带权并查集好题)
  2. jQuery控制表格垂直滚动条
  3. react 封装表格组件_React--封装的表单组件
  4. 做折线图坐标轴数字_你做的柱状图太丑了,这些美化技巧教给你(收藏)
  5. php loop 语法,Loop - SegmentFault 思否
  6. 通过XmlSerializer 实现XML的序列化与反序列化
  7. npm link run npm script
  8. 指定输出路径_新版Creo输入输出配置不用愁,果断收藏本文就对了
  9. Java开发入门教程!java垃圾回收机制描述正确
  10. 深入理解jvm运行时区域
  11. Hive分区(静态分区+动态分区)
  12. 今日力推: Android 厨客APP / Android 趣刻App
  13. copula函数(高斯copula函数)
  14. Funcode学习笔记:完成Run、Jump、Idle等动作【后续更新Roll、Attack动作的实现】【By Myself】
  15. CRMPM如何帮助企业创造最优销售绩效
  16. Kafka的消息可靠性(防止消息丢失)
  17. 巨头的联盟链选择 | 直播实录
  18. html语言制作折线图,html5绘制折线图
  19. android免费离线讯飞语音合成
  20. 十六进制字符串转中文

热门文章

  1. 2022年起重机司机(限桥式起重机)理论题库及答案
  2. 作为研发如何使用Github Api?
  3. 设计c语言程序能否订火车票,C语言-购买火车票原理
  4. 上百本中文书籍中对《人月神话》的引用(8)
  5. ios手机访问服务器文件共享,iOS/iPhone访问Windows/Mac的共享文件(网上邻居)
  6. 如何避免资源管理陷阱
  7. 单片机c语言数码管显示子程序,单片机C语言之两位数码管动态显示
  8. 一个事物两个方面的对比举例_对比:把两种相反的事物或一种事物相对立的两个方面作比较. 作用:鲜明地突出了主要事物或事物的主要方面的××特征....
  9. 济宁市计算机技能大赛,济宁市教育局 文件公告 关于举办济宁市第十届中小学电脑机器人竞赛活动的通知...
  10. 软件需求管理用例方法 pdf_一卡通管理软件功能需求