我是靠谱客的博主 踏实雨,最近开发中收集的这篇文章主要介绍【机器学习】决策树(一)----学习步骤和常用算法ID3以及C4.5,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

决策树分开两部分,是因为CART算法还是有些麻烦的,对于回归树我还是存在一些问题,希望后面整理的时候能够理清楚。

【学习思想】

决策树的学习思想还是很通俗易懂的。一般我们去买东西,我们会对这个东西的一些特征做一个衡量来决定是否购买,比如我们可能会看这个东西的大小是否合适,如果合适,我们可能会看这个东西的材质是否满意,满意的话我们会继续在意它的价格是否合理。这样一步一步下来,我们就能构造出一个树形模型。不过我们在构造树的时候,第一个选择什么特征作为我们的衡量标准,下一个选择什么特征来衡量,这是一个问题,因此我们要做出特征选择。当我们要买一个新东西(同功用)的时候,我们就可以根据以前生成的树形模型,来判断我们是否会购买。这里买与不买是一个二分类问题,多分类问题与其思想也是一样的,决策树模型可读性很高,且分类速度很快。

【学习步骤】

①特征选择:特征选择即我们用哪个特征来划分空间。我们常用信息增益、信息增益比或基尼系数来作为划分依据。
②决策树的生成:常用算法有ID3,C4.5,CART
②决策树的剪枝:常用方法有极小化决策树整体的损失函数、CART剪枝算法

【①特征选择】

选择最佳划分的度量通常是根据划分后子女节点不纯性的程度。不纯的程度越低,类分布就越倾斜。不纯性度量有熵、基尼、classification error。由于在ID3和C4.5中我们分别是用信息增益和信息增益比,在CART的分类树上是用基尼系数来做特征选择。因此我们要对信息增益、信息增益比以及基尼系数的计算有个了解。

信息增益

输入:训练数据集 D D 、特征A
输出:特征A对训练数据集D的信息增益 g(D,A) g ( D , A )
1.DH(D) 1. 数 据 集 D 的 经 验 熵 H ( D )
    H(D)=k=1K|Ck||D|log2|Ck||D| H ( D ) = − ∑ k = 1 K | C k | | D | l o g 2 | C k | | D |
    |D||Ck|Ck | D | 为 训 练 样 本 总 数 , | C k | 为 类 C k 的 个 数
2.ADH(D|A) 2. 特 征 A 对 数 据 集 D 的 经 验 条 件 熵 H ( D | A )
    H(D|A)=i=1n|Di||D|H(Di)=i=1n|Di||D|k=1K|Dik||Di|log2|Dik||Di| H ( D | A ) = ∑ i = 1 n | D i | | D | H ( D i ) = − ∑ i = 1 n | D i | | D | ∑ k = 1 K | D i k | | D i | l o g 2 | D i k | | D i |
    |Dik|DiCk|Di|Ai | D i k | 为 子 集 D i 中 类 为 C k 的 个 数 , | D i | 为 特 征 A 的 第 i 种 取 值 的 个 数
3. 3. 信 息 增 益
    g(D,A)=H(D)H(D|A) g ( D , A ) = H ( D ) − H ( D | A )
   

信息增益比

输入:训练数据集 D D 、特征A
输出:特征A对训练数据集D的信息增益比 gR(D,A) g R ( D , A )
1.DAHA(D) 1. 数 据 集 D 关 于 特 征 A 的 值 的 熵 H A ( D )
    HA(D)=i=1n|Di||D|log2|Di||D| H A ( D ) = − ∑ i = 1 n | D i | | D | l o g 2 | D i | | D |
2. 2. 信 息 增 益 比
    gR(D,A)=g(D,A)HA(D) g R ( D , A ) = g ( D , A ) H A ( D )

基尼指数

输入:训练数据集 D D 、特征A
输出:特征A对训练数据集D的基尼指数 Gini(D,A) G i n i ( D , A )
1.p 1. 若 样 本 点 属 于 第 一 个 类 的 概 率 是 p , 则 概 率 分 布 的 基 尼 指 数 为
    Gini(p)=2p(1p) G i n i ( p ) = 2 p ( 1 − p )
CART 此 处 是 二 分 类 情 况 , C A R T 算 法 中 会 将 特 征 的 多 个 取 值 变 为 一 对 多 的 形
Gini 式 变 成 二 分 类 , 来 计 算 某 特 征 所 有 取 值 的 G i n i 指 数

2.ADGini(D,A) 2. 特 征 A 对 数 据 集 D 的 基 尼 指 数 G i n i ( D , A )
    Gini(D,A)=|D1||D|Gini(D1)+|D2||D|Gini(D2) G i n i ( D , A ) = | D 1 | | D | G i n i ( D 1 ) + | D 2 | | D | G i n i ( D 2 )

【②决策树生成算法】

由于C4.5与ID3的区别只在于特征选择上,因此算法结构是一样的。
C4.5是ID3的改进,因为ID3采用信息增益的方式选择特征,会对某些可取类别(值)数目较多的属性有所偏好(如学号,学号取值很多,其信息增益很大,但实际分类意义不强,不具有泛化能力)

ID3 I D 3 /C4.5 / C 4.5 的生成算法:

输入:训练数据集 D D ,特征集A,阈值 ε ε
输出:决策树T
(1)若 D D 中样本全属于同一类别Ck,则将 node n o d e 标记为 Ck C k 类叶节点,返回T;

5.1() 就 拿 《 统 计 学 习 方 法 》 上 例 5.1 中 的 表 来 说 ( 下 面 举 例 都 是 用 这 个 ) , 不 管
前 面 特 征 如 何 , 最 后 的 类 别 全 是 “ 是 ” 或 全 是 “ 否 ” 的 话 , 我 们 就 没 有 必 要
做 分 类 了 , 所 以 我 们 会 把 这 一 类 直 接 标 记 为 叶 节 点 后 结 束

(2)若 D D 中样本在A上取值相同或 A= A = ∅ ,则将 node n o d e 标记为叶节点,其类别标记为 D D 中样本数量最多的类,返回T

15 对 于 年 龄 、 有 工 作 、 有 房 子 、 信 贷 情 况 这 四 个 特 征 来 说 , 表 中 15 条 数 据 都 相 同 ,
唯 独 不 同 的 只 有 类 别 。 比 如 年 龄 都 是 “ 中 年 人 ” , 工 作 和 房 子 都 为 “ 是 ” , 信 贷 情
况 都 为 “ 一 般 ” , 则 这 些 特 征 对 于 分 类 也 没 有 什 么 作 用 了 , 因 此 也 就 相 当 于 没 有
A 特 征 可 以 用 于 划 分 , 与 特 征 集 A 为 空 集 的 意 义 差 不 多 , 所 以 我 们 就 数 一 数 这 些
数 据 中 哪 个 类 别 最 多 , 就 将 这 个 类 别 标 记 为 叶 节 点 后 结 束

(3)若是以上两种情况都未发生,那么计算 A A 中各特征对D的信息增益 / / 信 息 增 益 比 ,选择信息增益 / / 信 息 增 益 比 最大的特征 Ag A g ,若 Ag A g 的信息增益 / / 信 息 增 益 比 小于阈值 ε ε ,则将node标记为 D D 中样本数最多的类;

/ / 信 息 增 益 比 最 大 , 则 这 一 子 节 点 引 出 两 个
子 节 点 , 分 别 对 应 “ 是 ” 和 “ 否 ” , 对 于 “ 有 房 子 ” 来 说 其 类 别 全 为 “ 是 ” , 则 这 个 子
节 点 是 一 个 叶 节 点 , 其 类 标 记 为 “ 是 ” ; 对 于 “ 无 房 子 来 说 ” , 我 们 继 续 从 年 龄 、
工 作 、 信 贷 情 况 来 选 择 新 的 特 征

(4)否则对 Ag A g 的每一可能值 ai a i ,依 Ag=ai A g = a i D D 分割为若干个非空的Di,将 Di D i 中样本数最多的类作为类别标记,构建子节点,由节点及其子节点构成树 T T ,返回T
(5)对节点i,以 Di D i 为训练集,以 A{Ag} A − { A g } 为特征集,递归调用(1)~(5),得到子树 Ti T i ,返回 Ti T i

【③决策树剪枝算法】

在了解决策树剪枝算法之前,我们先来看看决策树最显著的缺点,那就是容易过拟合。我们可能会学习了一个很复杂的树,它对于训练集有很好的拟合效果,但是对于新输入的数据来说,却无法给出好的分类。因此,为了让复杂的树简单些,提出了剪枝算法。
这这里先复习《统计学习方法》上给出的一种剪枝算法,即极小化决策树整体的损失函数。

决策树学习的损失函数

我们用 |T| | T | (树 T T 的叶节点个数)来表示模型的复杂度。
经验熵:Ht(T)=kKNtkNtlog(NtkNt)
Ht(T)tNtt H t ( T ) 是 指 叶 节 点 t 的 经 验 熵 , 其 中 N t 是 指 叶 节 点 t 中 的 样 本 个 数 ,
NtkNtkK N t k 是 指 这 N t 个 样 本 中 k 类 样 本 的 个 数 , K 是 指 有 多 少 类 别

定义决策树学习的损失函数为:
Cα(T)=t=1|T|NtHt(T)+α|T|=t=1|T|kKNtklog(NtkNt)+α|T| C α ( T ) = ∑ t = 1 | T | N t H t ( T ) + α | T | = − ∑ t = 1 | T | ∑ k K N t k l o g ( N t k N t ) + α | T |

C(T)=t=1|T|kKNtklog(NtkNt) C ( T ) = − ∑ t = 1 | T | ∑ k K N t k l o g ( N t k N t ) ,用于表示模型对训练数据的误差,即模型与训练数据的拟合程度。
可以得到: Cα(T)=C(T)+α|T| C α ( T ) = C ( T ) + α | T |
α α 是控制模型复杂度和模型误差之间比重的参数,若α小,则选择较复杂的模型(即 |T| | T | 较大);若 α α 大,则选择较简单的模型(即|T|较小)。这样能够很好地平衡过拟合(方差)与误差(偏差)

剪枝算法(基于极小化决策树整体的损失函数)

输入:由生成算法得到的整个树 T T ,参数α
输出:修剪后的子树 Tα T α
(1)计算每一个叶节点的经验熵;
(2)递归地从树的叶节点向上回缩;
(3)计算剪枝前整体树 Tbefore T b e f o r e 和剪枝后 Tafter T a f t e r 的损失函数 Cα(Tbefore) C α ( T b e f o r e ) Cα(Tafter) C α ( T a f t e r )
(4)若剪枝后的损失函数 Cα(Tafter) C α ( T a f t e r ) 小于剪枝前的损失函数 Cα(Tbefore) C α ( T b e f o r e ) ,则进行剪枝,将父节点变为新的叶节点;
(5)返回(2),直至不能继续为止,得到损失函数最小的子树 Tα T α

通过对决策树的生成算法和剪枝算法的学习,我们可以看出决策树生成希望得到更好的拟合效果,而决策树剪枝通过优化损失函数还考虑了模型的复杂度。决策树生成学习局部的模型,决策树剪枝学习整体的模型。

决策树的计算确实不难,我觉得可以通过对例题,习题的计算来加快理解,在真正应用当中,决策树通常会被用到集成学习当中作为基函数,如随机森林,梯度提升树等(大多选择cart tree)

参考文献:《统计学习方法》、《数据挖掘导论》

最后

以上就是踏实雨为你收集整理的【机器学习】决策树(一)----学习步骤和常用算法ID3以及C4.5的全部内容,希望文章能够帮你解决【机器学习】决策树(一)----学习步骤和常用算法ID3以及C4.5所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部