决策树ID3的学习与实现

来源:互联网 发布:linux退出编辑模式 编辑:程序博客网 时间:2024/06/04 18:36

0. 绪论

昨天完成了决策树ID3算法的编码,心情真的很激动呀,虽然是针对具体数据而生的,但是还是很自豪的说。在这个过程中对ID3算法也加深了印象。

决策树学习主要是特征选择(实则是特征属性的排优)和基于ID3算法决策树的生成,对于决策树的剪枝本文并不讨论。

1. 示例数据


上图为示例数据集D,第一列到第六列的意义为:ID号,年龄,是否有工作,是否有房子,贷款信誉,分类类别。0表示否,1表示是。

2. 预备知识

信息熵:就决策的过程来说,熵是描述一个决策过程的混乱程度,如果选择过程是特定的则熵为0,如果决策过程是随机的则熵是最大的。熵的定义公式如下:

                                                                                                   

其中X是随机变量,在上面示例数据中x1=“是”,x2=“否”,即数据集D的分类;n为数据集类别的数目;Pi为某个类别在数据集D总类别中的频率。

条件熵H(Y|X):在随机变量X的条件下Y的不确定性。它的定义公式如下所示:

                                                                                        

其中A表示某一个特征,例如可以为“贷款信誉”;n为贷款信誉特征的分类,此时n=3,表示数据集D被特征A分成了3个子数据集D1、D2、D3;K为分类的类别数目2;Di表示第i个子数据集的总数目;Dik表示第i个子数据集并且类别为k的数量。

尼玛,你要是问我这些算式为啥表示熵那我也母鸡呀,但是可以根据熵的定义式画一个坐标图表示一下,二分支时真的是p=0.5时H的值最大,也就是概率都是一半一半,聪明如计算机也不知道要选哪一个分支了。。。

3. 特征提取

下面重点来了,信息增益: G(D,A) = H(D) - H(D|A)

此将作为我们选取分支的最重要指标。在直观上理解,G(D,A)表示由于特征属性A而使得对数据集D分类的不确定性减少的程度。所以啊,这个值是越大越好的。依次递归(因为未确定类别的数据集是在逐渐减少的)计算,可以对数据集各个属性来排优。

4. ID3算法的实现(建立ID3决策树)

1)首先我们应该明确可能有三种终止条件:
1. 并不是所有的特征属性都用上,即决策树已经建立好了(训练数据集分类完成)但是属性没用完;
2. 特征集都用上了但是数据集没有分完,这时最后的未确定的数据集就按照多数表决(谁多算谁)来决定;
3. 特征集太多用不完(用完可能出现过拟合),这时应该为信息增益G(D,A)确定一个阈值e,当g<e时就不再继续迭代了,然后再用2的方法。
2)根据G值选择一个当前最优的特征属性A,在未确定分类集合中把已经分出的数据剔除。
3)根据1)判断是否满足终止条件,如果不满足再转到2)。

5. 总结

ID3算法是机器学习的入门算法,思想简单,但编码也是一个苦力活呀,我硬是敲了2.5天的代码,智商捉襟见肘。。。有空附上代码大笑。ID3算法存在很明显的特点,它比较偏向于选择分支较多的属性,至于为什么,在这里考虑极端的一种的情况,A将每一个样本都分到一个节点中去,也就是条件熵为0,故ID3算法一定会选择A,然而我们知道这个并不是最佳选择。为了平衡这种情况,故又提出了C4.5算法,Gr(D,A) = g(D,A)/H(D|A).

0 0
原创粉丝点击