IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 从案例中学习决策树。 -> 正文阅读

[数据结构与算法]从案例中学习决策树。

决策分类树

一、决策树的介绍

分类型决策树在叶子节点上的决策规则是少数服从多数
在一个叶子节点上,如果某一类标签所占的比例较大,那所有进入这个叶子节点的样本都回被认为是这一类别。

如果叶子节点的样本有90%都是类别0(叶子比较纯),那新进入叶子节点的测试样本的类别也很有可能是0。但是,如果51%的样本是0,49%的样本是1(极端情况),叶子节点还是会被认为是0类叶子节点,但此时此刻进入这个叶子的测试样本点几乎有一半的可能性应该是类别1。从数学上来说,类分布为(0,100%)的结点具有零不纯性,而均衡分布(50%,50%)的结点具有最高的不纯性。如果叶子本身不纯,那测试样本判断错误的概率就很大,相对的叶子越纯,那判断出错的概率就越小。

二、ID3算法构建决策树

2.1 评价指标

ID3算法的评价指标是:信息增益(Information Gain)
信息增益的计算方法可用Entropy推导,即最为人熟知的信息熵,又叫做香农熵,其计算公式如下:
在这里插入图片描述

其中 c 表示叶子节点上标签类别的个数,c-1 表示标签的索引。注意在这里,是从第0类标签开始计算,所以最后的标签类别应该是总共c个标签,c-1为最后一个标签的索引。在计算Entropy时设定 在这里插入图片描述

2.2 案例说明

假设现在有如下数据集,是一个消费者个人属性和信用评分数据,标签是”是否会发生购买电脑行为“,这显然是个二分类问题。
在这里插入图片描述
首先对于根节点而言,信息熵可用 I(s1,s2) 来表示,其中s下标1和2代表两个分类水平, 和则代表分类水平下的对应样本个数,其计算公式如下所示:
在这里插入图片描述
即在不进行任何切分前,总信息熵为0.940。
然后我们依次选取各特征来尝试进行切分,并计算切分完成后的子节点信息熵是多少。
首先选取age列进行切分,age是三分类的离散变量,因此若用age对根节点进行切分,将有三个分支,每个分支分别对应一个age的取值,分支所指向的子节点为对应的切分后的数据集:

在这里插入图片描述
然后我们计算子节点的信息熵:
在这里插入图片描述
属性年龄的信息熵为:在这里插入图片描述

即对于age属性而言,在根节点上切分一次之后子节点的信息熵为0.694,由此我们可计算age的信息增益,即局部最优化判别指标:
在这里插入图片描述
以此类推,我们还能计算其他几个特征的信息增益,最终计算结果如下Gain(income) = 0.029,Gain(student) = 0.15,Gain(credit_rating) = 0.048,很明显,第一次切分过程将采用age字段进行切分,第一次切分完成后,分成了三个数据集,其中age=“31…40"分类指标所指向的数据集纯度为1,因此不用再进行切分,而其他两个数据集则需要进一步进行切分。

age="<=30"数据集

在这里插入图片描述
age=">40"数据集
在这里插入图片描述
第一次切分完成后,分成了三个数据集,其中age=“31…40"分类指标所指向的数据集纯度为1,因此不用再进行切分,而其他两个数据集则需要进一步进行切分。
以age="<=30"的数据集为例:
I(s1,s2) = I(3,2) = -(3/5)log2(3/5) -(2/5)log2(2/5) = 0.971
在不进行任何切分前,总信息熵为0.971。

计算子节点的信息熵:
Entropy(high) = -(2/2)log2(2/2) = 0
Entropy(medium) = -(1/2)log2(1/2) - (1/2)log2(1/2)= 1
Entropy(low) = -1log2(1) = 0
计算income属性的信息熵:
Entropy(income) = (2/5)*Entropy(high)+(2/5)*Entropy(medium)+(1/5)Entropy(low) = 0.4
计算income属性的信息增益:
Gain(income) = I(s1,s2) - Entropy(income) =0.971 - 0.4= 0.571

同理,求出Entropy(Student) = 0,Entropy(credit_rating) = 0.951
得到:Gain(Student)= 0.971,Gain(credit_rating)= 0.02
所以age="<=30"的数据集 继续以Student 属性划分下去。

同理,age=">40"的数据集则采用credit_rating字段进行切分。
最终ID3决策树模型如下所示:
在这里插入图片描述

2.3 ID3的局限性

不能直接处理连续型变量,若要使用ID3处理连续型变量,则首先需要对连续变量进行离散化;
对缺失值较为敏感,使用ID3之前需要提前对缺失值进行处理;
没有剪枝的设置,容易导致过拟合,即在训练集上表现很好,测试集上表现很差。
所以想在主流的决策树是由C4.5算法 & CART算法构建的。

三、C4.5算法构建决策树

3.1 评价指标

算法的评价指标是:之前的信息增益除以分支度作为选取切分字段的参考指标,该指标被称作Gain Ratio(获利比例,或增益率),计算公式如下:在这里插入图片描述
其中 IV:Information Value(在《数据挖掘导论》一书中被称为划分信息度)的概念,来对信息增益的计算方法进行修正。
在这里插入图片描述

增益比例是我们决定对哪一列进行分枝的标准,我们分枝的是数字最大的那一列,本质是信息增益最大,分支度又较小的列(也就是纯度提升很快,但又不是靠着把类别分特别细来提升的那些特征)。IV越大,即某一列的分类水平越多,Gain ratio实现的惩罚比例越大。当然,我们还是希望GR越大越好。

3.2 案例说明

例如上个案例中,以年龄的属性来进行划分:
在这里插入图片描述
由于根据age字段切分后,3个分支分别有5个、4个和5个样例数据,因此age的IV指标计算过程如下:
在这里插入图片描述
进而可计算age列的GR:
在这里插入图片描述
然后可进一步计算其他各字段的GR值,并选取GR值最大的字段进行切分。

四、CART算法构建决策树

4.1 评价指标

CART算法的评价指标是 Gini?增量, 选择Gini?增量最大的属性来划分。
在这里插入图片描述

Gini(基尼)指数,主要用于CART决策树的不纯度判定,其计算公式如下:在这里插入图片描述

4.2 案例说明

使用同一例子:
在这里插入图片描述
首先对于根节点而言,分裂前的基尼指数:可用 Gini(s1,s2) 来表示,其中s下标1和2代表两个分类水平, 和则代表分类水平下的对应样本个数,其计算公式如下所示:
Gini(s1,s2)= Gini(9,5)= 1-(9/14)^2 -(5/14)^2 = 0.4592

首先选取age列进行切分,age是三分类的离散变量:
当age<=30时:Gini(s11) = 1-(3/5)^2 -(2/5)^2 = 0.48;
当30<age<=40时:Gini(s12) = 1-(1)^2 = 0;
当age>40"时:Gini(s13) = 1-(3/5)^2 -(2/5)^2 = 0.48;
所以
Gini(Age) =5/14Gini(s11)+4/14Gini(s12)+5/14*Gini(s13)=0.3429

增量 = Gini(s1,s2)-Gini(Age)=0.4592-0.3429=0.1163
再分别计算出 :
Gini(s1,s2)-Gini(income);
Gini(s1,s2)-Gini(student);
Gini(s1,s2)-Gini(credit_rating)

的增量,选择增量的属性进行划分。

决策回归树

五、案例说明

下表为训练数据集,特征向量只有一维,根据此数据表建立回归决策树。
在这里插入图片描述

  1. 首先将属性的数据从小到大依此进行排列
  2. 然后计算俩俩相邻的数据的均值
  3. 按均值所在的点,对连续性变量进行二分(变成数字形式的,第一类是>均值,第二类是<均值)
  4. 计算指标的值,选择最佳的指标
  5. 选择最佳的切点进行划分

六、CART算法构建回归树

6.1 原理

在每一次划分完之后,计算均方误差MSE的值,选择误差最小的点进行划分。
MSE是真实值与预测值的差值的平方然后求和平均。
在这里插入图片描述

6.2 过程

  1. 首先将属性的数据从小到大依此进行排列,数据本身就是有序的。
  2. 然后计算俩俩相邻的数据的均值,一共9个切分点
    { 1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5}
  3. 当s=1.5时,两个子区域 R_1={ 1 },
    R_2={ 2,3,4,5,6,7,8,9,10 },
    在这里插入图片描述
    同理,得到其他各切分点的子区域输出值,列表如下:
    在这里插入图片描述
  4. 计算损失函数值,找到最优切分点
    在这里插入图片描述
    同理,计算得到其他各切分点的损失函数值,列表如下:
    在这里插入图片描述
    易知,取s=6.5时,损失函数值最小。因此,第一个划分点为s=6.5
    划分的结果为:
    在这里插入图片描述
    对于R_1,取切分点{ 1.5,2.5,3.5,4.5,5.5 },计算得到单元输出值为:
    在这里插入图片描述
    损失函数值为:
    在这里插入图片描述
    L(3.5)最小,取s=3.5为划分点。

后面同理。

七、C4.5算法构建回归树

7.1 原理

在这里插入图片描述

7.2 过程

除了判断标准为 Gain Ratio,其余过程与CART算法构建回归树相同。

总结

每次划分逐一考察当前集合中所有特征的所有取值,根据平方误差最小化准则选择其中最优的一个作为切分点。
这种切分方法,每次切分之后,并没有消费掉一列,只消费掉了一个备选点。在我们分类树的切分方法中,ID3每次切分就会消费掉一整个列,但实际上,我们可以只关注每次分类的时候,对信息熵的减少贡献最多的那个分类。按分类树例子来说,我们在分类age的时候,最关注的是31~40岁的那一个分类,我们完全可以实现,
31~40一类,其他算一类,然后我们再对“其他”这个类别进行相似的二分类。

参考

CSDN.决策树—回归
菜菜的机器学习

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-18 17:38:08  更:2021-10-18 17:39:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:30:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码