it编程 > 软件设计 > 数据结构

ID决策树的构造原理

117人参与 2024-08-06 数据结构

前言

学习目标

  1. 了解决策树算法的基本思想
  2. 掌握 id3 决策树的构建原理

1.决策树介绍 

1.1案例引入 

有的同学可能在大学学习过一门课程叫《数据结构》,里面有一个重要的结构就是“树”,和现实生活中的树一样,树的主要由四部分树根树干树枝树叶组成,今天的决策树也是一种树结构,大家学习的时候可以想象现实生活中的树来来理解。

决策树算法是一种监督学习算法,英文是decision tree。

决策树思想的来源非常朴素,试想每个人的大脑都有类似于if-else这样的逻辑判断,这其中的if表示的是条件,if之后的then就是一种选择或决策。程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法。

比如:你母亲要给你介绍男朋友,是这么来对话的:

女儿:多大年纪了?

母亲:26。

女儿:长的帅不帅?

母亲:挺帅的。

女儿:收入高不?

母亲:不算很高,中等情况。

女儿:是公务员不?

母亲:是,在税务局上班呢。

女儿:那好,我去见见。

于是你在脑袋里面就有了下面这张图

作为女孩的你在决策过程就是典型的分类树决策。相当于通过年龄、长相、收入和是否公务员对将男人分为两个类别:见和不见。 

1.2构建决策树的三个步骤

  1. 特征选择:选取有较强分类能力的特征(定性分析问题还是定量分析问题等等)
  2. 决策树生成
  3. 决策树剪枝(让决策树更加简洁高效,对于一些特征不重要,或根据权值大小,对决策树的分类进行筛选)

决策树api:

2.id3决策树 

2.1信息熵

id3 树是基于信息增益构建的决策树.

定义

公式:

\large h = -\sum_{i=1}^{k}p_i\log(p_i)

公式的转换,当数据类别只有两类的情况下,公式可以做如下转换:

代码角度理解信息熵的概念

import numpy as np
import matplotlib.pyplot as plt

def entropy(p):
    return -p*np.log(p)-(1-p)*np.log(1-p)

x = np.linspace(0.01,0.99,200)
plt.plot(x,entropy(x))
plt.show()

2.2 信息增益

2.2.1定义

特征$a$对训练数据集d的信息增益$g(d,a)$,定义为集合$d$的经验熵$h(d)$与特征a给定条件下d的经验熵$h(d|a)$之差。即\large g(d,a)=h(d)-h(d|a)

根据信息增益选择特征方法是:对训练数据集d,计算其每个特征的信息增益,并比较它们的大小,并选择信息增益最大的特征进行划分。表示由于特征$a$而使得对数据d的分类不确定性减少的程度。

2.2.2算法

 设训练数据集为d,$\mid d\mid$表示其样本个数。设有$k$个类$c_k$$k=1,2,\cdots,k$$\mid c_k\mid$为属于类$c_k$的样本个数,$\sum\limits{k=1}^{k}=\mid{d}\mid$。设特征a有$n$个不同取值${a_1, a_2, \cdots,a_n}$,根据特征a的取值将d划分为$n$个子集$d_1, d_2, \cdots,d_n$$\mid d_i\mid$$d_i$样本个数,$\sum\limits{i=1}^n\mid d_i\mid=\mid d\mid$。子集中属于类$c_k$的样本集合为$d{ik}$,即$d{ik}=d_i\bigcap c_k$$\mid d{ik}\mid$$d{ik}$的样本个数。信息增益算法如下:

(1) 计算数据集d的经验熵$h(d)$

$h(d)=-\sum\limits_{k=1}^{k}\frac{\mid c_k\mid}{\mid d\mid}\log_2\frac{\mid c_k\mid}{\mid d\mid}$

(2) 计算特征a对数据集d的经验条件熵$h(d\mid a)$

$h(d\mid a)=\sum\limits{i=1}^{n}\frac{\mid d_i\mid}{\mid d\mid}h(d_i)=-\sum\limits{i=1}^{n}\frac{\mid d_i\mid}{\mid d\mid}\sum\limits{k=1}^{k}\frac{\mid d{ik}\mid}{\mid d_i\mid}\log_2\frac{\mid d_{ik}\mid}{\mid d_i\mid}$

(3) 计算信息增益

$g(d,a)=h(d)-h(d|a)$

  下面以常用的贷款申请样本数据表为样本集,通过数学计算来介绍信息增益计算过程。

step1 计算经验熵

类别一共是两个拒绝/同意,数量分别是6和9,根据熵定义可得:

h(d)=-\frac{9}{15}\log_2\frac{9}{15}-\frac{6}{15}\log_2\frac{6}{15}=0.971

step2 各特征的条件熵

将各特征分别记为$a_1,a_2,a_3,a_4$ ,分别代表年龄、有无工作、有无房子和信贷情况,那么

step3 计算增益 

根据计算所得的信息增益,选取最大的$a_3$ 作为根节点的特征。它将训练集$d$ 划分为两个子集$d_1$(取值为“是”)和$d_2$(取值为“否”)。由于$d_1$只有同一类的样本点,所以成为一个叶节点,节点标记为“是”。

对于$d_2$需从特征$a_1,a_2,a_4$中选择新的特征。计算各个特征的信息增益

g(d_2,a_1)=0.918-0.668=0.251\\ g(d_2,a_2)=0.918\\ g(d_2,a_4)=0.474

选择信息增益最大的特征$a_2$作为节点的特征。由于$a_2$有两个可能取值,一个是“是”的子节点,有三个样本,且为同一类,所以是一个叶节点,类标记为“是”;另一个是“否”的子节点,包含6个样本,也属同一类,所以也是一个叶节点,类别标记为“否”。

最终构建的决策树如下:

3.id3的算法步骤

  1. 计算每个特征的信息增益

  2. 使用信息增益最大的特征将数据集 s 拆分为子集

  3. 使用该特征(信息增益最大的特征)作为决策树的一个节点

  4. 使用剩余特征对子集重复上述(1,2,3)过程

4.小结

  1. 信息熵是一个变量(特征)包含信息多少的度量方式。信息熵的值大,则认为该变量包含的信息量就大

  2. 条件熵用于衡量以某个特征作为条件,对目标值纯度的提升程度

  3. 信息增益用于衡量那个特征更加适合优先分裂

  4. 使用信息增益构建的决策树成为 id3 决策树

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

【数据结构】查找(顺序查找、二分查找、索引顺序查找、二叉排序树、平衡排序树、B树、B+树、哈希表)

08-06

瑞_数据结构与算法_B树

08-06

二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”

08-06

数据结构 排序算法——选择排序与堆排序_直接选择排序和堆序的区别(1)

08-06

【数据结构】详解堆排序当中的topk问题(leetcode例题)

08-06

数据结构之排序算法(三)

08-06

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论