117人参与 • 2024-08-06 • 数据结构
有的同学可能在大学学习过一门课程叫《数据结构》,里面有一个重要的结构就是“树”,和现实生活中的树一样,树的主要由四部分树根、树干、树枝、树叶组成,今天的决策树也是一种树结构,大家学习的时候可以想象现实生活中的树来来理解。
决策树算法是一种监督学习算法,英文是decision tree。
决策树思想的来源非常朴素,试想每个人的大脑都有类似于if-else这样的逻辑判断,这其中的if表示的是条件,if之后的then就是一种选择或决策。程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法。
比如:你母亲要给你介绍男朋友,是这么来对话的:
女儿:多大年纪了?
母亲:26。
女儿:长的帅不帅?
母亲:挺帅的。
女儿:收入高不?
母亲:不算很高,中等情况。
女儿:是公务员不?
母亲:是,在税务局上班呢。
女儿:那好,我去见见。
于是你在脑袋里面就有了下面这张图
作为女孩的你在决策过程就是典型的分类树决策。相当于通过年龄、长相、收入和是否公务员对将男人分为两个类别:见和不见。
决策树api:
id3 树是基于信息增益构建的决策树.
定义
公式:
公式的转换,当数据类别只有两类的情况下,公式可以做如下转换:
代码角度理解信息熵的概念
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()
特征对训练数据集d的信息增益
,定义为集合
的经验熵
与特征a给定条件下d的经验熵
之差。即
根据信息增益选择特征方法是:对训练数据集d,计算其每个特征的信息增益,并比较它们的大小,并选择信息增益最大的特征进行划分。表示由于特征$a$而使得对数据d的分类不确定性减少的程度。
设训练数据集为d,表示其样本个数。设有
个类
,
,
为属于类
的样本个数,
。设特征a有
个不同取值
,根据特征a的取值将d划分为
个子集
,
为
样本个数,
。子集中属于类
的样本集合为
,即
,
为
的样本个数。信息增益算法如下:
输入:训练数据集d和特征a;
输出:特征a对训练数据集d的信息增益
(1) 计算数据集d的经验熵
(2) 计算特征a对数据集d的经验条件熵
(3) 计算信息增益
下面以常用的贷款申请样本数据表为样本集,通过数学计算来介绍信息增益计算过程。
step1 计算经验熵
类别一共是两个拒绝/同意,数量分别是6和9,根据熵定义可得:
step2 各特征的条件熵
将各特征分别记为 ,分别代表年龄、有无工作、有无房子和信贷情况,那么
step3 计算增益
根据计算所得的信息增益,选取最大的 作为根节点的特征。它将训练集
划分为两个子集
(取值为“是”)和
(取值为“否”)。由于
只有同一类的样本点,所以成为一个叶节点,节点标记为“是”。
对于需从特征
中选择新的特征。计算各个特征的信息增益
选择信息增益最大的特征作为节点的特征。由于
有两个可能取值,一个是“是”的子节点,有三个样本,且为同一类,所以是一个叶节点,类标记为“是”;另一个是“否”的子节点,包含6个样本,也属同一类,所以也是一个叶节点,类别标记为“否”。
最终构建的决策树如下:
计算每个特征的信息增益
使用信息增益最大的特征将数据集 s 拆分为子集
使用该特征(信息增益最大的特征)作为决策树的一个节点
使用剩余特征对子集重复上述(1,2,3)过程
信息熵是一个变量(特征)包含信息多少的度量方式。信息熵的值大,则认为该变量包含的信息量就大
条件熵用于衡量以某个特征作为条件,对目标值纯度的提升程度
信息增益用于衡量那个特征更加适合优先分裂
使用信息增益构建的决策树成为 id3 决策树
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论