ID3决策树

知识准备:信息熵

是无序性(或不确定性)的度量指标。加入事件A的全概率划分是(A1,A2,…An),每部分发生的概率是(p1,p2,…pn),那信息熵定义为:

entropy(p1,p2,,pn)=p1log2p1p2log2p2pnlog2pn

通常以2为底数,单位为比特(bit),在数学证明上通常采用e为底数,单位为奈特(Nat)
更详细的介绍请参考 百度百科

核心思想及举例说明

ID3构造树的基本想法是随着树深度的增加,节点的熵迅速地降低。熵降低的速度越快越好,这样我们有望得到一棵高度最矮的决策树。在决策树各级结点上选择属性时,用信息增益(information gain)作为属性的选择标准,以使得在每一个非叶结点进行测试时,能获得关于被测试记录最大的类别信息。其具体方法是:检测所有的属性,选择信息增益最大的属性产生决策树结点,由该属性的不同取值建立分支,再对各分支的子集递归调用该方法建立决策树结点的分支,直到所有子集仅包含同一类别的数据为止。最后得到一棵决策树,它可以用来对新的样本进行分类。这是理想情况,当决策树的高度为属性(决策变量)的个数,叶子节点不纯,这意味着要根据概率来做出决策,即选择大概率分类作为分类结果。

信息增益计算:
设S是n个数据样本的集合,共分m个不同类 Ci(i=1,,m) 。设 ni 是类 Ci 中的样本数。则该样本分类所需的期望信息由下式给出:

I(n1,n2,,nm)=i=1mpilog2(pi)

其中, pi=ni/n ,是样本属于类 Ci 的概率。
设属性A具有v个不同值 a1,a2,,av 。可以用属性A将S划分为v个子集 {S1,S2,,Sv} ,设 nij 是子集 Sj 中属于类 Ci 的样本数。由A划分子集的熵或信息期望由如下式给出:
E(A)=j=1v(n1j+n2j++nmj)/nI(n1j,n2j,+,nmj)

其中,
I(n1j,n2j,+,nmj)=mi=1pijlog2(pij)
pij=nij/(n1j+n2j++nmj) ,是 Sj 中属于类 Ci 的概率。
那么,在属性A上分支将获得的信息增益是:
Gain(A)=I(n1,n2,,nm)E(A)

ID3算法的优点:算法的理论清晰,方法简单,学习能力较强。
ID3算法的缺点:只对比较小的数据集有效,且对噪声比较敏感,当训练数据集加大时,决策树可能会随之改变。

实例说明:
参考文章-归纳决策树ID3(Java实现)

outlooktemperaturehumiditywindyplay
sunnyhothighFALSEno
sunnyhothighTRUEno
overcasthothighFALSEyes
rainymildhighFALSEyes
rainycoolnormalFALSEyes
rainycoolnormalTRUEno
overcastcoolnormalTRUEyes
sunnymildhighFALSEno
sunnycoolnormalFALSEyes
rainymildnormalFALSEyes
sunnymildnormalTRUEyes
overcastmildhighTRUEyes
overcasthotnormalFALSEyes
rainymildhighTRUEno

以上是14天的气象数据(指标包括outlook,temperature,humidity,windy),并已知这些天气是否打球(play),训练决策树以对新数据进行预测。
在无天气信息时,根据历史数据,打球的概率是9/14,不打球的概率是5/14,此时的熵为:

914log2914514log2514=0.940

属性有4个:outlook,temperature,humidity,windy。首先确定根节点。
outlook=sunny时,2/5的概率打球,3/5的概率不打球。entropy=0.971
outlook=overcast时,entropy=0
outlook=rainy时,entropy=0.971
而根据历史统计数据,outlook取值为sunny、overcast、rainy的概率分别是5/14、4/14、5/14,所以当已知变量outlook的值时,信息熵为:
5/14×0.971+4/14×0+5/14×0.971=0.693

因此,信息增益gain(outlook)=0.940-0.693=0.247
同理可以计算得到gain(temperature)=0.029, gain(humidity)=0.152, gain(windy)=0.048
可以看出gain(outlook)最大(即outlook在第一步使系统的信息熵下降得最快),因此选择outlook作为根节点。

这里写图片描述

同理可以计算之后的节点,最终结果如下:
这里写图片描述

附录

1.Java实现
ID3决策树(Java实现)

### ID3决策树算法详解 #### 算法原理概述 ID3(Iterative Dichotomiser 3)是一种经典的决策树学习算法,主要用于分类问题。该算法的核心在于通过信息熵和信息增益来选择最优划分属性,从而构建一棵高效的决策树[^2]。 #### 信息熵与信息增益 - **信息熵** 是衡量样本集合纯度的重要指标。对于给定的数据集 \( D \),如果属于第 k 类的样本所占比例为 \( p_k \),则数据集 \( D \) 的信息熵定义如下: \[ H(D)=-\sum_{k=1}^{|\mathcal{Y}|}p_k\log_2(p_k)\] - **信息增益** 表示得知某个特征后的不确定性减少的程度。假设离散型特征 A 有 V 种可能取值,则按照特征A 对数据集D 进行分割后得到的信息期望 Ent(A) 可表示为: \[Ent(A)=\sum_{v=1}^V\frac{|D_v|}{|D|}\cdot H(D_v)\] 因此,针对某一个具体特征而言,其对应的信息增益 Gain(A) 定义为原始数据集的信息熵减去按此特征划分之后各子集中信息熵加权平均的结果: \[Gain(A)=H(D)-Ent(A)\][^4] 为了找到最佳分裂点,ID3 将会选择使得信息增益最大的那个特征作为当前节点的最佳测试条件,并以此为基础继续向下生长新的分支直至满足停止准则为止。 #### Python实现案例 下面给出一段简单的Python代码片段演示如何利用sklearn库中的`DecisionTreeClassifier`类快速搭建并训练一个基于ID3原则的决策树模型: ```python from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier, export_text # 加载鸢尾花数据集 data = load_iris() X, y = data.data, data.target # 创建并拟合决策树模型 (默认采用的是CART而非严格意义上的ID3) clf = DecisionTreeClassifier(criterion='entropy') clf.fit(X, y) # 输出决策路径规则 tree_rules = export_text(clf, feature_names=data.feature_names.tolist()) print(tree_rules) ``` 值得注意的是,默认情况下scikit-learn提供的`DecisionTreeClassifier`并不完全遵循ID3标准流程而是更接近于CART版本;若想获得真正意义上符合ID3特性的实现方式,则需自行调整源码或者寻找第三方扩展包支持[^1]。 #### 应用领域 由于具备良好的可读性和较强的适应能力,ID3及其衍生形式被广泛应用到多个行业当中,比如但不限于以下几个方面: - 文本分类:自动识别电子邮件是否垃圾邮件; - 医疗诊断:辅助医生判断疾病类型; - 市场营销策略制定:预测客户购买行为倾向等[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值