决策树C4.5算法

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路决策树C4.5算法,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

决策树-C4.5

前面的ID3算法已经介绍了决策树的基本概念。C4.5算法在ID3算法上做了提升,使用信息增益比来构造决策树,且有剪枝功能防止过拟合,本模块将以C4.5算法介绍决策树的构造策略。

欠拟合:训练得到的模型在训练集集测试中表现就很差,准确度很低。
过拟合:训练得到的模型在训练集表现很好,但在测试集表现很差。

信息增益比:特征A对训练集D的信息增益比定义为特征A的信息增益与训练集D对于A的信息熵之比。

信息增益比

G

a

i

n

D

,

A

=

i

n

f

o

D

,

A

H

(

D

,

A

)

信息增益比Gain(D,A) =\frac{ info(D,A)}{H(D,A)}

信息增益比GainD,A=H(D,A)infoD,A

公式在ID3算法中

剪枝:在决策树对训练集的预测误差和数的复杂度之间找到一个平衡。剪枝算法的功能是输入生成的决策树和参数,输出剪枝后的决策树。包括先剪枝和后剪枝。

  1. 先剪枝:提前停止树的构建而对树”剪枝“,提前停止的策略有定义一个树的深度,到达指定深度自动停止构造;
  2. 后剪枝:先构造完整的子树,对于决策树中那些置信度不够(信息增益比较低)的子树用叶子节点(类别)代替。

决策树构造策略

  1. 计算训练集得出每个特征的信息增益比
  2. 选取当下的最大信息增益比的特征作为决策树头节点,由该特征的不同属性划分为不同子树
  3. 去除该特征后计算在满足该属性的情况下剩下的N个特征的信息增益比,并继续划分子树
  4. 据此递归所有特征划分完成,每个子树结束后都有对应类别。

以图中西瓜数据集(D)描述构造决策树原理
在这里插入图片描述

根据公式计算个特征的信息增益:info(D,色泽)=0.109 ,info(D,根蒂)=0.143,info(D,敲声)=0.141,info(D,纹理)=0.381,info(D,脐部)=0.289,info(D,触感)=0.006

再计算信息增益比:

G

a

i

n

(

D

,

色泽

)

=

i

n

f

o

D

,色泽)

H

(

D

,

色泽

)

=

i

n

f

o

(

D

,

色泽

)

(

6

17

log

2

6

17

+

6

17

log

2

5

17

+

5

17

log

2

5

17

)

=

0.069

Gain(D,色泽) = \frac{info(D,色泽)}{H(D,色泽)}=\frac{info(D,色泽)}{-(\frac{6}{17}\log_2\frac{6}{17}+\frac{6}{17}\log_2\frac{5}{17}+\frac{5}{17}\log_2\frac{5}{17})}=0.069

Gain(D,色泽)=H(D,色泽)infoD,色泽)=(176log2176+176log2175+175log2175)info(D,色泽)=0.069

再计算其他的值Gain(D,根蒂)=0.046,Gain(D,敲声)=0.051,Gain(D,纹理)=0.043,Gain(D,脐部)=0.072,Gain(D,触感)=0.028

第一次计算可知Gain(D,肚部)=0.072最大作为决策树根节点,构造决策树:
在这里插入图片描述

然后再脐部凹陷,脐部稍凹,脐部平坦的条件下再计算除脐部外的其他特征的信息增益比,继续递归构造子树。
在这里插入图片描述
C4.5算法实现构造决策树:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn import tree  #导入树库可视化决策树
from sklearn.tree import DecisionTreeClassifier   #导入决策树模型

#加载数据集
iris=load_iris()

#划分数据集和测试集
x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,test_size=0.3)

#构造决策树模型
decision_tree=DecisionTreeClassifier(criterion="entropy",max_depth=5)  #criterionz指定节点特征选择基准entropy是ID3,c4.5;gini是CART算法 #decision_tree是常用的剪枝参数

#训练决策树
decision_tree=decision_tree.fit(x_train,y_train)

score=decision_tree.score(x_test,y_test)
print(score)
结果:
0.8666666666666667

可视化决策树:
print(tree.plot_tree(decision_tree))

在这里插入图片描述

// graphviz 库可视化树
import graphviz    
graph = tree.export_graphviz(decision_tree, out_file=None)
graph = graphviz.Source(graph)
graph

在这里插入图片描述

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

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156337.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!