决策树算法实际就是一个不断分割训练数据集使其成为数据子集的过程。这种分类或回归模型成树形结构,这也是其被成为决策树算法的主要原因。决策树算法最主要的问题是如何分裂原始数据集使其数据集包含的类别纯度越来越高,于是前辈们引入了熵和信息增益等概念。下面来总结一下决策树算法的主要步骤:
step1.计算目标属性(类别的熵);
step2.选择一个属性分裂数据集,也即计算信息增益;
step3.根据各属性的信息增益,选择最佳的分类属性,对数据集进行分裂;
step4.判断剩余的数据集是否都属于同一类别,以停止树的增长,否则递归的进行步骤2、3.
怎么计算信息熵等问题,很多博客已经回答的非常完美了。所以我不想总结这些的东西。这篇博文总结的是我在实际做决策树算法中遇到的最困惑的问题,有如下几个:
1、ID3和C4.5算法到底有什么区别?
2、决策树在遇到连续属性时怎么处理?
3、遇到的属性不是连续属性但是离散属性的个数非常多怎么办?
4、决策树的递归构造很难理解,怎么去理解它?
5、树的剪枝怎么办?
下面是我的总结和思考:
1、ID3算法和C4.5算法最根本的区别在于对属性选择所采用的指标不同,ID3算法中采用信息增益作为属性选择的指标,而 C4.5采用信息增益率做为属性选择的指标。这么做带来的好处是排除了含有大量属性值的总是被选为最佳属性的问题。在ID3算法中如果年龄是一个属性它含有大量的值,那么年龄必定会被选为最佳属性从而导致决策树生长的过大。决策树过大会导致判决规则过于复杂而不利于人们理解,这样就丧失了决策树算法的一个巨大优势;
2、对于连续属性如年收入Income属性,我们采取这样一种策略:寻找一个分割点Point,这样我们就可以将连续属性转化成一个离散的属性:Income <= Point 和 Income>Point这样两个属性。问题就自然而然的转化成怎么寻找这个Point?。我们仍然通过计算信息增益的方法来选择一个使信息增益最大的Point.下面举个例子来解释一下:
首先需要做的是对数据集中的年收入进行排序,结果为60,70,75,85,90,95,100,120,125,220。接着,求出两年收入之间的均值结果为65,72,80,87,92,97,110,122,172。然后在该序列的首位加上两个值,要求是能包含原始年收入的首位值这里取为55和230。后得到这样的一串序列:55,65,72,80,87,92,97,110,122,172,230。这串序列就是上面的可能的分割点,下面要做的就是从这些点中找到最佳的分割点,我们根据原始数据构造如下的频数表并计算每个点的熵值:
故可以选择收入97为分割点。
3、在预测收入的一个数据集中碰到了类似的情况,它给了一个这样的属性native-country: United-States, Cambodia, England, Puerto-Rico, Canada, Germany, Outlying-US(Guam-USVI-etc), India, Japan, Greece, South, China, Cuba, Iran, Honduras, Philippines, Italy, Poland, Jamaica, Vietnam, Mexico, Portugal, Ireland, France, Dominican-Republic, Laos, Ecuador, Taiwan, Haiti, Columbia, Hungary, Guatemala, Nicaragua, Scotland, Thailand, Yugoslavia, El-Salvador, Trinadad&Tobago, Peru, Hong, Holand-Netherlands。可以看出我们如果不加处理的用这些属性值的话,决策树变得很庞大,所以我想把国家按照发达和发展中国家来分类,便可将该属性的取值减为两个。遇到这个问题没有定式需要结合一定的经验来处理。
4、这个问题的存在主要是因为没有学过数据结构,所以对树的递归构造比较陌生。建议先看看数据结构然后琢磨别人写的代码自然就会理解。
5、这个问题一般是设立一个确认集,然后依据确认集的输出情况来剪枝,这样做比较简单。当然还有其他的方法。下面介绍利用确认集来进行剪枝的简单步骤:
(1)、将完全生长的决策树的每个节点都作为待剪枝的节点;
(2)、从底向上,将某个节点下的子树删除然后用确认集计算出删除子树后的决策树的准确率;
(3)、如果第二步得到的准确率较删除前的准确率确有提高,则真的删除该子树;
(4)、遍历所有的节点,得到剪枝后的决策树。
本文出自 “路遥” 博客,请务必保留此出处http://cwxfly.blog.51cto.com/6113982/1695094
原文地址:http://cwxfly.blog.51cto.com/6113982/1695094