使用java实现j48_决策树中的J48算法分析

J48算法是C4.8的Java实现,采用自上而下的递归分治策略。它通过计算信息熵和信息增益来选择最优属性作为节点,以构建最小的决策树。在示例中,通过对weather.nominal.arff数据集的分析,outlook被选为根节点,因为它具有最高的信息增益。后续分裂过程以此类推,以提高决策树的纯度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

J48原理:本来名称为C4.8,由于是Java实现的算法,再加上C4.8为商业收费算法。 其实J48是自上而下的,递归的分治策略,选择某个属性放置在根节点,为每个可能的属性值产生一个分支,将实例分成多个子集,每个子集对应一个根节点的分支,然后在每个分支上递归地重复这个过程。当所有实例有相同的分类时,停止。

问题是如何:如恶化选择根节点属性,建立分支呢?

3d6d0943886ed12b7f916729cd9ad4cb.png

例如:weather.nominal.arff

我们希望得到的是纯分裂,即分裂为纯节点,希望找到一个属性,它的一个节点全是yes,一个节点全是no,这是最好的情况,因为如果是混合节点则需要再次分裂

通过量化来确定能产生最纯子节点的属性---计算纯度(目标是得到最小的决策树)。而自上而下的树归纳法用到了一些启发式方法---产生纯节点的启发法是以信息论为基础的,即信息熵,以bits测量信息。

信息增益=分裂前分布的信息熵-分裂后分布的信息熵,选择信息增益最大的属性。

9c892984197ed0dd6e5d360862813490.png

计算这四个属性的信息增益,如下图:

4d02cbc6cb0c6c00eadea9b39fd07331.png

经过计算得到outlook、windy、humidity、temperature的信息增益分别为0.247bits、0.048bits、0.152bits、0.029bits,所以选择outlook为根节点。

继续分裂....

5a289680cef08476e08292458ec36019.png

使用J48构建决策树如图:

1c3f0f573a6fdd7fdd412a4ca126a356.png

计算举例

分裂前:Info(outlook)=entropy(outlook)=-9/14*lg(9/14)-5/14*lg(5/14)=0.940286

分裂后:Inf0a(outlook)=5/14*Info(D1)+4/14*Info(D2)+5/14*Info(D3)=0.693535

Info(D1)=-2/5*lg(2/5)-3/5*lg(3/5)=0.9709490 , Info(D2)=0

Info(D3)=-3/5*lg(3/5)-2/5*lg(2/5)

Gain(outlook)=Info(outlook)-Inf0a(outlook)=0.247bits

提示,目前介绍不完整还有一些提升准确性的概念方法比如gain raito(增益比率)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值