【机器学习导引】ch4-决策树

news/2024/11/6 21:20:59/

基本流程

两个需要解决的问题

  1. 属性顺序:
    • 问题:哪些属性在前面,哪些属性在后面?
    • 这个问题指的是在处理数据或进行排序时,需要确定属性的排列顺序,以便更好地进行数据处理或分析。
  2. 属性选择:
    • 问题:哪些属性使用,哪些属性不用?
    • 这里强调了选择属性的必要性,即在分析数据时,应该根据需求选择有用的属性,并剔除不必要的属性。

两种方法:

  • 划分选择:这与属性顺序相关,可能是指如何合理地划分不同的属性并安排顺序。
  • 剪枝处理:与属性选择相关,指的是如何精简数据或过程,去掉不必要的属性或步骤,以优化系统或算法的性能。

决策树的一些关键概念和流程

  1. 决策树的基本概念:
    • 决策树基于“树”结构进行决策。
    • 每个“内部结点”对应于某个属性上的“测试”(test)
    • 每个分支对应于该测试的一个可能结果(即属性的某个取值)
    • 每个“叶结点”对应于一个**“预测结果”**
  2. 学习过程:
    • 通过对训练样本的分析来确定“划分属性”(即内部结点所对应的属性)
  3. 预测过程:
    • 在预测时,将测试示例从根结点开始,沿着划分属性所构成的“判定测试序列”下行,直到叶结点得出预测结果。

决策树算法的原理

  1. 决策树策略:分而治之
    • 决策树使用“分而治之”策略,通过递归过程从根结点到叶结点不断进行划分。
    • 在每个中间结点,寻找一个合适的“划分”属性(split or test),根据这个属性来对样本进行分类。
  2. 三种停止条件:
    • 当前结点包含的样本全属于同一类别,无需再划分。
    • 当前属性集为空,或者所有样本在所有属性上的取值相同,无法继续划分。
    • 当前结点包含的样本集合为空,不能再划分。

划分选择

信息增益和信息熵[entropy]

  1. 信息熵(entropy):
    • 信息熵是衡量样本集合**“纯度”**的常用指标。

    • 假设当前样本集合 D D D 中第 k k k 类样本所占的比例为 p k p_k pk,则 D D D信息熵定义为:

      E n t ( D ) = − ∑ k = 1 ∣ Y ∣ p k log ⁡ 2 p k Ent(D) = - \sum_{k=1}^{|Y|} p_k \log_2 p_k Ent(D)=k=1Ypklog2pk

      其中, ∣ Y ∣ |Y| Y 是样本类别的总数。

    • 信息熵的值越,表示 D D D纯度越高。即如果所有样本都属于同一类,则信息熵为 0 0 0

    • 信息熵的最小值为 0 0 0(样本完全纯净),最大值为 log ⁡ 2 ∣ Y ∣ \log_2 |Y| log2Y(样本完全混乱)。

  2. 信息增益:
    • 信息增益是以信息熵为基础,计算当前划分对信息熵所造成的变化。通过信息增益可以判断某个属性是否适合作为决策树的划分依据。

信息熵的公式表示样本集合的无序程度,信息增益则衡量某个属性的划分能够降低多少无序程度。通常在决策树的构建中,会选择信息增益最大的属性进行划分。

何量化一个信息的含量

提出了衡量信息量 I ( x ) I(x) I(x) 需要满足的三个条件:

  1. 非负性: 信息量 I ( x ) I(x) I(x) 应该是非负的,即 I ( x ) ≥ 0 I(x) \geq 0 I(x)0。这意味着信息量不能为负值。
  2. 可相加性: 信息量具有可相加性,即当两个独立事件 x x x y y y 同时发生时,其信息量可以相加,满足 I ( x y ) = I ( x ) + I ( y ) I(xy) = I(x) + I(y) I(xy)=I(x)+I(y)
  3. 与事件概率 p ( x ) p(x) p(x) 的关系: 信息量与事件发生的概率成反比。也就是说,事件发生的概率越大,提供的信息量越小;概率越小,信息量越大。

I ( x ) = − log ⁡ 2 p ( x ) I(x) = -\log_2 p(x) I(x)=log2p(x)

解释如下:

  • 公式解释: 信息量 I ( x ) I(x) I(x) 与事件的概率 p ( x ) p(x) p(x) 成反比。通过对概率 p ( x ) p(x) p(x) 取以 2 2 2 为底的对数,再取负号,就可以得到该事件的信息量。这个公式能够满足之前提到的三条性质。

验证信息量的可相加性(第二条性质):

I ( x y ) = − log ⁡ 2 ( p ( x ) p ( y ) ) = − log ⁡ 2 p ( x ) + ( − log ⁡ 2 p ( y ) ) = I ( x ) + I ( y ) I(xy) = -\log_2 (p(x) p(y)) = -\log_2 p(x) + (-\log_2 p(y)) = I(x) + I(y) I(xy)=log2(p(x)p(y))=log2p(x)+(log2p(y))=I(x)+I(y)

这一步推导证明了如果两个事件 x x x y y y 独立发生,它们的联合概率可以表示为各自概率的乘积,因此对应的总信息量就是各自信息量的和。这验证了信息量公式满足相加性条件。

信息熵

  1. 信息熵(Shannon Entropy):

    • 信息熵 H ( x ) H(x) H(x)消息的平均信息量,也称为香农熵。

    • 公式为:

      H ( x ) = ∑ i = 1 n I ( x i ) p ( x i ) = − ∑ i = 1 n p ( x i ) log ⁡ 2 p ( x i ) H(x) = \sum_{i=1}^{n} I(x_i) p(x_i) = - \sum_{i=1}^{n} p(x_i) \log_2 p(x_i) H(x)=i=1nI(xi)p(xi)=i=1np(xi)log2p(xi)

      其中, p ( x i ) p(x_i) p(xi) 表示第 i i i 种结果发生的概率, I ( x i ) I(x_i) I(xi) 是该结果的信息量。

  2. 含义:

    • 信息熵衡量了在一组可能结果中,平均每个结果带来的不确定性。
      • 结果的概率越均匀,熵值越
      • 如果某个结果特别确定,熵值就会较

信息增益

  1. 属性取值:
    • 假设离散属性 a a a 的取值为 { a 1 , a 2 , … , a V } \{a^1, a^2, \dots, a^V\} {a1,a2,,aV},表示属性 a a a V V V 个可能的取值。
    • 定义 D v D^v Dv 为数据集中属性 a a a 的取值为 a v a^v av 的样本集合。
  2. 信息增益公式:
    • 信息增益 G a i n ( D , a ) Gain(D, a) Gain(D,a) 表示对数据集 D D D 按照属性 a a a 进行划分所带来的信息增益。

    • 公式为:

      G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D, a) = Ent(D) - \sum_{v=1}^{V} \frac{|D^v|}{|D|} Ent(D^v) Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)

    • 解释公式:

      • E n t ( D ) Ent(D) Ent(D)划分前的数据集 D D D 的信息熵。
      • ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) \sum_{v=1}^{V} \frac{|D^v|}{|D|} Ent(D^v) v=1VDDvEnt(Dv)划分后各子集的加权信息熵
      • ∣ D v ∣ ∣ D ∣ \frac{|D^v|}{|D|} DDv v v v 个子集的权重,表示该子集在总体中的占比,样本越多的子集越重要。

总的来说,信息增益用来衡量某个属性对数据集划分的有效性,信息增益越大,表示该属性能够更好地将数据分类,是决策树算法中选择最佳划分属性的依据。

样例

在这里插入图片描述

计算:

  1. G a i n ( D , 色泽 ) = ? Gain(D,色泽)=? Gain(D,色泽)=?
  2. G a i n ( D , 纹理 ) = ? Gain(D,纹理)=? Gain(D,纹理)=?

回答:

  1. 计算划分前的数据集 D D D 的信息熵:

    1. 数据:是否是好瓜
      1. n u m ( “是” ) = 2 , D 1 = { 1 , 2 } num(“是”)=2,D_1=\{1,2\} num()=2D1={1,2}
      2. n u m ( “否” ) = 2 , D 1 = { 3 , 4 } num(“否”)=2,D_1=\{3,4\} num()=2D1={3,4}
    2. 信息熵计算:

    E n t ( D ) = − ∑ k = 1 ∣ Y ∣ p k log ⁡ 2 p k = − ( 2 4 l o g 2 2 4 + 2 4 l o g 2 2 4 ) = 1 Ent(D) = - \sum_{k=1}^{|Y|} p_k \log_2 p_k = -(\frac{2}{4}log_2^{\frac{2}{4}} + \frac{2}{4}log_2^{\frac{2}{4}}) = 1 Ent(D)=k=1Ypklog2pk=(42log242+42log242)=1

  2. G a i n ( D , 色泽 ) = ? Gain(D,色泽)=? Gain(D,色泽)=?

    1. 数据:是否是乌黑

      1. n u m ( “乌黑” ) = 2 , D 1 = { 1 , 2 } num(“乌黑”)=2,D_1=\{1,2\} num(乌黑)=2D1={1,2}
      2. n u m ( “浅白” ) = 2 , D 1 = { 3 , 4 } num(“浅白”)=2,D_1=\{3,4\} num(浅白)=2D1={3,4}
    2. 划分后的信息熵:

      1. E n t ( D 1 ) = − ( 1 × l o g 2 1 + 1 × l o g 2 1 ) = 0 Ent(D^1) = -(1\times log_2^1 + 1 \times log_2^1) = 0 Ent(D1)=(1×log21+1×log21)=0
      2. E n t ( D 2 ) = − ( 1 × l o g 2 1 + 1 × l o g 2 1 ) = 0 Ent(D^2) = -(1\times log_2^1 + 1 \times log_2^1) = 0 Ent(D2)=(1×log21+1×log21)=0
    3. 划分后的加权信息熵

      ∑ v = 1 2 ∣ D v ∣ ∣ D ∣ E n t ( D v ) = 1 2 × 0 + 1 2 × 0 = 0 \sum_{v=1}^{2} \frac{|D^v|}{|D|} Ent(D^v) = \frac{1}{2} \times 0 + \frac{1}{2} \times 0 = 0 v=12DDvEnt(Dv)=21×0+21×0=0

    4. 信息增益

    G a i n ( D , 色泽 ) = 1 − 0 = 1 Gain(D,色泽)= 1 - 0 = 1 Gain(D,色泽)=10=1

  3. G a i n ( D , 纹理 ) = ? Gain(D,纹理)=? Gain(D,纹理)=?

    1. 数据:是否是清晰

      1. n u m ( “清晰” ) = 2 , D 1 = { 1 , 3 } num(“清晰”)=2,D_1=\{1,3\} num(清晰)=2D1={1,3}
      2. n u m ( “模糊” ) = 2 , D 1 = { 2 , 4 } num(“模糊”)=2,D_1=\{2,4\} num(模糊)=2D1={2,4}
    2. 划分后的信息熵:

      1. E n t ( D 1 ) = − ( 1 2 × l o g 2 1 + 1 2 × l o g 2 1 ) = 1 Ent(D^1) = -(\frac{1}{2} \times log_2^1 + \frac{1}{2} \times log_2^1) = 1 Ent(D1)=(21×log21+21×log21)=1
      2. E n t ( D 2 ) = − ( 1 2 × l o g 2 1 + 1 2 × l o g 2 1 ) = 1 Ent(D^2) = -(\frac{1}{2}\times log_2^1 + \frac{1}{2} \times log_2^1) = 1 Ent(D2)=(21×log21+21×log21)=1
    3. 划分后的加权信息熵:

      ∑ v = 1 2 ∣ D v ∣ ∣ D ∣ E n t ( D v ) = 1 2 × 1 + 1 2 × 1 = 1 \sum_{v=1}^{2} \frac{|D^v|}{|D|} Ent(D^v) = \frac{1}{2} \times 1 + \frac{1}{2} \times 1 = 1 v=12DDvEnt(Dv)=21×1+21×1=1

    4. 信息增益

    G a i n ( D , 色泽 ) = 1 − 1 = 0 Gain(D,色泽)= 1 - 1 = 0 Gain(D,色泽)=11=0

剪枝处理

通过主动去掉一些分支来降低过拟合的风险。过拟合是由于分类训练样本的分支过多导致模型在训练集上表现很好,但在实际应用中表现较差的现象。

  1. 预剪枝(pre-pruning):在生成决策树时,提前终止某些分支的生成。
  2. 后剪枝(post-pruning):先生成一棵完整的树,然后再回头进行剪枝,去掉不必要的分支。

http://www.ppmy.cn/news/1544881.html

相关文章

C++中,如何找到一个vector中最大的元素

动态规划中,经常需要找到一个线性表中最大的元素,C 最常用的是vector,而不是 C 中的数组,虽然结构更加复杂,但是用起来更方便。就连 C 创始人 Bjarne Stroustrup 都推荐使用vector,如下是《A Tour of C Thi…

什么是分布式光伏发电?设备构成、应用形式讲解

分布式光伏发电系统,又称分散式发电或分布式供能,是指在用户现场或靠近用电现场配置较小的光伏发电供电系统,以满足特定用户的需求,支持现存配电网的经济运行,或者同时满足这两个方面的要求。 分布式光伏发电由哪些设备…

python-21-理解python切片这一概念

python-21-理解python切片这一概念 一.简介 在python基础系列还有一个概念,python切片,切片这一使用频率特别多,大量python实例、真实项目中也是频繁出现,所以把这一概念单独整理出来,以便大家学习和复习&#xff01…

golang 中map使用的一些坑

golang 中map使用的一些坑 1、使用map[string]interface{},类型断言[]int失败 接收下游的数据是用json转为map[string]any go a : "{\"a\":\"1\",\"b\":[123]}" var marshal map[string]any json.Unmarshal([]byte(a), &…

Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)

案例背景 虽然在效果上,传统的逻辑回归模型通常不如现代的机器学习模型,但在风控领域,解释性至关重要。逻辑回归的解释性是这些“黑箱”模型所无法比拟的,因此,研究传统的评分卡模型依然是有意义的。 传统的评分卡模型…

uni-app 封装图表功能

文章目录 需求分析1. 秋云 uchars2. Echarts 需求 在 uni-app 中使用图表功能,两种推荐的图表工具 分析 在 Dcloud市场 搜索Echarts关键词,会出现几款图表工具,通过大家的下载量,可以看到秋云这个库是比较受欢迎的,其…

el-tree展开子节点后宽度没有撑开,溢出内容隐藏了,不显示横向滚动条

html结构如下 <div class"tree-div"><el-tree><template #default"{ node, data }"><div class"node-item">...</div></template></el-tree></div> css代码(scss) .tree-div {width: 300px;…

Netty原来就是这样啊(二)

前言: Netty其实最大的特点就是在于对于对NIO进行了进一步的封装,除此以外Netty的特点就是在于其的高性能 高可用性,下面就会一一进行说明。 高性能: 我在Netty原来就是这样啊(一)-CSDN博客 解释了其中的零拷贝的技术除此以外还有Reactor线程模型,这个Reactor线程模型的思想…