ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

机器学习笔记-决策树(一)

2020-06-13 14:03:51  阅读:457  来源: 互联网

标签:结点 机器 样本 划分 笔记 增益 决策树 属性


决策树


目录

  1. 决策树思维
  2. 划分属性准则
  3. 决策树的生成

1. 决策树思维

决策树(decision tree)是一类常见的机器学习方法。以二分类任务为例,我们希望从给定训练数据集学得一个模型用以对新的示例进行分类,这个把样本分类的任务,可以看作对“当前样本属于正类吗?”这个问题的“决策”或“判别”过程。顾名思义,决策树是基于树结构来进行决策的,这恰是人类在面临决策问题时一种很自然的处理机制。

例如,假设我们有表1中的数据集

表1 贷款申请样本数据表


ID 年龄 有工作 有自己的房子 信贷情况 类别
1 青年 一般
2 青年
3 青年
4 青年 一般
5 青年 一般
6 中年 一般
7 中年
8 中年
9 中年 非常好
10 中年 非常好
11 老年 非常好
12 老年
13 老年
14 老年 非常好
15 老年 一般

我们要对“是否同意贷款申请?”这样的问题进行决策时,通常会进行一系列的判断或“子决策”:我们先看看“申请人的年龄是青年还是老年”,如果是“青年”,我们看他是否“有工作”,如果“有工作”,再看他是否“有自己的房子”,如果“没有自己的房子”,我们在判断他“信贷情况”,最后,我们得出最终的决策:同意申请人的贷款申请。决策过程如图1所示:


图1 贷款申请问题的一个决策树

显然,决策过程最终结论对应了我们所希望的判定结果,例如“同意”或“不同意”申请人的贷款申请;决策过程中提出的每个判定问题都是对某个属性的"测试",例如“年龄=?”、“有工作=?”;"每个测试的结果或是导出最终结论,或是导出进一步的判定问题,其考虑范维是在上次决策结果的限定范围之内,例如若在"年龄=青年"之后再判断"有工作=?",则仅在考虑青年是否有工作。

很自然的,我们会想到,图1中我们首先考虑的属性是“年龄”,那么如果我们首先考虑的属性是“有工作”结果会怎样呢?显然,我们会得到另一棵不同的决策树。问题是:究竟选择哪一个属性更好些?这就需要确定选择划分属性的准则。直观上,如果一个属性具有更好的分类能力,或者说,按照这一个属性将训练数据集分成子集,使得各子集在当前条件下有最好的分类,那么就更应该选择这个属性。

那么,决策树中常用的确定选择划分属性的准则有哪些呢?

2. 划分属性准则

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

2.0 预备知识

前面的一篇笔记中我们学习了信息熵与条件熵相关内容,它们是决策树选择最优划分属性过程中很重要的概念。

2.1 信息增益

“信息熵”(information entropy)是度量样本集合纯度最常用的一种指标。假定当前样本集合\(D\)中第\(k\)类样本所占的比例为\(p_k(k=1,2,\dots,|\mathcal{Y}|)\),则\(D\)的信息熵定义为

\[Ent(D) = -\sum_{k=1}^{|\mathcal{Y}|}p_klog_2p_k \tag{1} \]

\(Ent(D)\)的值越小,则\(D\)的纯度越高。

计算信息熵时约定:若\(p=0\),则\(plog_2p=0\)

\(Ent(D)\)的最小值为0,最大值为\(log_2|\mathcal{Y}|\),证明可以看这里

假定离散属性\(a\)有\(V\)个可能的取值\(\{a^1,a^2,\dots,a^V\}\),若使用\(a\)来对样本集\(D\)进行划分,则会产生\(V\)个分支结点,其中第\(v\)个分支结点包含了\(D\)中所有在
属性\(a\)上取值为\(a^v\)的样本,记为\(D^v\)。我们可根据式\((1)\)计算出\(D^v\)的信息熵
再考虑到不同的分支结点所包含的样本数不同,给分支结点赋予权重\(|D^v|/|D|\),即样本数越多的分支结点的影响越大,于是可计算出用属性\(a\)对样本集\(D\)进行划分所获得的"信息增益" (information gain)

\[Gain(D,a) = Ent(D) - \sum_{v=1}^V \cfrac{|D^v|}{|D|}Ent(D^v) \tag{2} \]

决策树学习应用信息增益划分属性。给定数据集\(D\)和属性\(a\),信息熵\(Ent(D)\)表示对数据集\(D\)进行分类的不确定性。而\(\sum_{v=1}^V \cfrac{|D^v|}{|D|}Ent(D^v)\)是条件熵,表示在属性\(a\)给定的条件下对数据集\(D\)进行分类的不确定性。那么它们的差,即信息增益,就表示由于属性\(a\)而使得对数据集\(D\)的分类的不确定性减少的程度。显然,对于数据集\(D\)而言,信息增益依赖于特征,不同的特征往往具有不同的信息增益。

综上,信息增益越大,说明在知道属性\(a\)的取值后样本集的不确定性减小的程度越大,也就是划分后所得的“纯度提升”越大。因此,我们可以根据信息增益进行划分属性的选择,方法是:对数据集(或子集)\(D\),计算其每个属性的信息增益,并比较它们的大小,选择信息增益最大的特征

2.2 信息增益率

以信息增益作为划分数据集的准则,存在偏向于选择取值较多的属性的问题。举个极端的例子,假设我们某个属性的可能取值\(V\)与数据集\(D\)的样本数相等,如果将其作为一个划分属性,计算出来的信息增益将远大于其他属性。这很容易理解:这个属性产生的分支结点中将仅包含一个样本,这些分支结点的纯度已经达到最大。然而,这样的决策树显然不具有泛化能力,无法对新样本进行有效预测。

信息增益率(information gain ratio)可以对这一问题进行校正,可以作为选择最优划分属性的另一种准则。定义为属性\(a\)对数据集\(D\)的信息增益与数据集\(D\)关于属性\(a\)的信息熵之比,即

\[Gain\_ratio(D,a) = \cfrac{Gain(D,a)}{IV(a)} \tag{3} \]

其中

\[IV(a) = -\sum_{v=1}^V\cfrac{|D^v|}{|D|}log_2 \cfrac{|D^v|}{|D|} \tag{4} \]

称为属性\(a\)的“固有值”(intrinsic value)。属性\(a\)的可能取值数目越多(即\(V\)越大),\(IV(a)\)的值通常越大。

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

2.3 基尼指数

基尼指数(Gini index)是决策树选择最优划分属性的准则之一。数据集\(D\)的纯度用基尼值来度量:

\[\begin{aligned} Gini(D) &= \sum_{k=1}^{|\mathcal{Y}|}\sum_{k \ne k^{'}}p_kp_{k^{'}} \\ &= 1-\sum_{k=1}^{|\mathcal{Y}|}p_k^2 \end{aligned} \tag{5}\]

直观来说,\(Gini(D)\) 反映了从数据集\(D\)中随机抽取两个样本,其类别标记不一致的概率。因此,\(Gini(D)\)越小,则数据集\(D\)的纯度越高。

同样的,在属性\(a\)的条件下,数据集\(D\)的基尼指数定义为

\[Gini\_index(D,a) = \sum_{v=1}^{V}\cfrac{|D^v|}{|D|}Gini(D^v) \tag{6} \]

于是,我们在候选属性集合\(A\)中,选择那个使得划分后基尼指数最小的属性作为最优划分属性。

3. 决策树的生成

基于不同的属性划分准则,决策树有不同的生成算法。常见的有ID3、C4.5、CART。

3.0 决策树生成基本算法

一般的,一棵决策树包含一个根结点、若干个内部结点和若干个叶结点;叶结点对应于决策结果,其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样本全集。从根结点到每个叶结点的路径对应了一个判定测试序列。决策树学习的基本流程遵循简单且直观的"分而治之" (divide-and-conquer) 策略,如下

输入:训练数据集\(D=\{(x_1,y_1),(x_2,y_2),\dots,(x_m,y_m)\}\),属性集\(A=\{a_1,a_2,\dots,a_d\}\)

过程:决策树生成,函数\(TreeGenerate(D, A)\)

  1. 生成结点node
  2. 如果\(D\)中样本全属于同一类别\(C\),将node标记为\(C\)类叶结点,返回决策树
  3. 如果\(A = \emptyset\)或者\(D\)中的样本在\(A\)上取值相同,将node标记为叶结点,其类别标记为\(D\)中样本数最多的类,返回决策树
  4. 否则,从\(A\)中选择最优划分属性\(a_*\)
  5. 遍历\(a_*\)中的每一个值\(a_*^v\),为node生成一个分支,令\(D_v\)表示\(D\)中在\(a_*\)上取值为\(a_*^v\)的样本子集
  6. 如果\(D_v\)为空,将分支结点标记为叶结点,其类别标记为\(D\)中样本最多的类,返回决策树
  7. 否则,以\(TreeGenerate(D_v, A \{a_*\})\)为分支结点,其中\(A \{a_*\})\)表示从\(A\)中去除掉\(a_*\)。
  8. 重复过程4-7

输出:以node为根结点的一棵决策树。

标签:结点,机器,样本,划分,笔记,增益,决策树,属性
来源: https://www.cnblogs.com/dataanaly/p/13112137.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有