决策树原理ID3.C4.5以及实现

HUNT算法 :

1:如果数据集D中所有的数据都属于一个类,那么将该节点标记为为节点。

2:如果数据集D中包含属于多个类的训练数据,那么选择一个属性将训练数据划分为较小的子集,对于测试条件的每个输出,创建一个子女节点,并根据测试结果将D中的记录分布到子女节点中,然后对每一个子女节点重复1,2过程,对子女的子女依然是递归的调用该算法,直至最后停止。 

但是HUNT算法没有说明具体先选择哪一个条件,即哪一个条件对决策的影响比较大

ID3算法

信息熵代表不确定度 具体看另一篇文章

https://blog.csdn.net/sibiantai555/article/details/79857688


决策树过程就是要把信息熵不断减小的过程,即在基础信息上获得的越来越多的信息,其不确定一定是下降或不发生变化的。故有了联合熵H(X, Y) = -Σp(x, y) logp(x, y)>=H(X)


从而看有没有增强 曾推出的了条件熵 如H(X) > H(X|Y)则说明Y对X是有帮助的,也就是说Y条件对决策是有增益的,故规定

I(X,Y) = H(X) - H(X|Y) = H(Y) - H(Y|X) 

H(X|Y)=H(X, Y) - H(Y) = 


而与联合熵之间的关系是


从信息论知识中我们知道,期望信息越小,信息增益越大,从而纯度越高。“纯”就是尽量让一个分裂子集中待分类项属于同一类别。

栗子(周志华《机器学习》




正例(好瓜)占 8/17,反例占 9/17 ,根结点的信息熵为


H(D|色泽) = 6/19 +6/19+5/19

 = 0.889

I(D,色泽)= 0.998 - 0.889 = 0.109 = Gain(D,色泽)


所以选择纹理



存在问题:

(1)ID3采用信息增益大的特征优先建立决策树的节点。很快就被人发现,在相同条件下,取值比较多的特征比取值少的特征信息增益大。比如一个变量有2个值,各为1/2,另一个变量为3个值,各为1/3,其实他们都是完全不确定的变量,但是取3个值的比取2个值的信息增益大。

(2)ID3:是有多少个特征就有多少层,故特征越多层数越多,故,信息增益要有一个阈值,如果达到阈值才能增加一层

(3)ID3没有考虑连续特征,比如长度,密度都是连续值

(4)特征缺失值

(5)过拟合问题



其中

 

特征数越多的特征对应的特征熵越大,它作为分母,可以校正信息增益容易偏向于取值较多的特征的问题。

连续值离散化

n个样本的连续特征A有n个,从小到大排列为a1,a2,...,an,取相邻两样本值的平均数,一共取得m-1个划分点



改造版


首先 离散化 是简单的二分化(应该也可以分化),而分化 比如 如何判断 硬滑 软粘 ,设本来为一个连续值,测出值大于X为硬滑,否则为软粘 ,则离散化要做的就是如何确定这个值 首先他先确定多少个划分,然后再次划分上使其增益最大即可

缺失值的处理


对于缺失值处理的问题,主要需要解决的是两个问题,一是在样本某些特征缺失的情况下选择划分的属性,二是选定了划分属性,对于在该属性上缺失特征的样本的划分。

对于第一个子问题,对于某一个有缺失特征值的特征A。C4.5的思路是将数据分成两部分,对每个样本设置一个权重(初始可以都为1)据,然后划分数,一部分是有特征值A的数据D1,另一部分是没有特征A的数据D2. 然后对于没有缺失特征A的数据集D1来和对应的A特征的各个特征值一起计算加权重后的信息增益比,最后乘上一个系数,这个系数是无特征A缺失的样本加权后所占加权总样本的比例。

第二个子问题还是按比例分配

栗子








问题与不足

1)容易过拟合
2)C4.5生成的是多叉树,即一个父节点可以有多个节点。但是在计算机中二叉树模型会比多叉树运算效率高。如果采用二叉树,可以提高效率。
3)C4.5只能用于分类,如果能将决策树用于回归的话可以扩大它的使用范围。

4)C4.5由于使用了熵模型,里面有大量的耗时的对数运算,如果是连续值还有大量的排序运算。如果能够加以模型简化可以减少运算强度但又不牺牲太多准确性的话,那就更好了。


CART 算法


直观来说, Gini(D) 反映了从数据集 D 中随机抽取两个样本,其类别标记 不一致的概率.因此, Gini(D) 越小,则数据集 D 的纯度越高.


但是为了进一步简化,CART分类树算法每次仅仅对某个特征的值进行二分,而不是多分,这样CART分类树算法建立起来的是二叉树,而不是多叉树。

CART回归树建立算法

回归和分类两者的区别在于样本输出,如果样本输出是离散值,则为分类树,若连续则回归

回归使用方差


过拟合问题 剪枝

预剪枝

后剪枝

阅读更多
个人分类: 机器学习
上一篇经典算法思想及其案例
下一篇python 实战决策树之txt数据导入
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭