机器学习算法|决策树C4.5--python实现

1. C4.5算法

前一篇文章机器学习算法–决策树ID3–python实现 讲述了决策树的基本概念和最经典的ID3算法。
在那篇文章中,我没有谈到ID3算法的缺陷,更多的是侧重于介绍决策树的算法和概念。但其实,ID3算法存在这么几个缺陷:
1.信息增益准则对可取数值数目较多的属性有所偏好;

比如,如果在原来的数据中加入[序号]这一属性,运行ID3算法后,我们会发现序号被作为最优属性首先被划分。但常识告诉我们,序号根本和样本类别毫无关系。

2.只能处理离散变量的属性,对于类似于身高、体重、年龄、工资这样存在无限可能的连续数值毫无办法。

为了优化并解决以上2个问题,著名的C4.5算法被提出。

1.1 解决类似于"序号"这样的干扰

C4.5决策树算法不直接使用信息增益(Information gain)划分最优属性,而是采用增益率(gain ratio)。其定义为:
G a i n _ r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) , Gain\_ratio(D,a)=\dfrac{Gain(D,a)}{IV(a)}, Gain_ratio(D,a)=IV(a)Gain(D,a),
其中
I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ IV(a)=-\sum_{v=1}^{V}\dfrac{|D^v|}{|D|}log_2\dfrac{|D^v|}{|D|} IV(a)=v=1VDDvlog2DDv
成为属性a的固有值。由表达式可知,Gain(D,a)所表示的仍然是信息增益,与ID3算法中的Gain(D,a)并无差别,但重点在于IV(a)这一项:如果属性a的可能取值数目越多(即V越大),则IV(a)的值通常会越大,那么最终的Gain_ratio的值会相应减小,以此来解决上文提到的问题。

1.2 增加对连续变量的处理模块
  • 首先,要在处理每一个属性之前,判断该属性的值是字符/字符串(这意味该属性的值是离散的)还是整型/浮点型(这意味该属性的只是回归的、连续的),两种类型的值要分别进行处理。
if type(featVals[0]).__name__=='float' or type(featVals[0]).__name__=='int':
...
if type(dataSet
  • 17
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值