决策树分类是数据挖掘中分类分析的一种算法。顾名思义,决策树是基于“树”结构来进行决策的,是人类在面临决策问题时一种很天然的处理机制。例以下图一个简单的判别买不买电脑的决策树:html
下图是一个测试数据集,咱们以此数据集为例,来看下如何生成一棵决策树。算法
决策树分类的主要任务是要肯定各个类别的决策区域,说着说着,肯定不一样类别之间的边界。在决策树分类模型中,不一样类别之间的边界经过一个树状结构来表示。测试
经过以上分析,咱们能够得出如下几点:spa
所以,决策树建树算法就是:选择树根的过程3d
第一步,选择属性做为树根htm
比较流行的属性选择方法:信息增益blog
信息增益最大的属性被认为是最好的树根it
在选择属性以前,咱们先来了解一个概念:熵 什么是熵?什么是信息?如何度量他们?数据挖掘
下面这个文章通俗易懂的解释了这个概念变量
http://www.360doc.com/content/19/0610/07/39482793_841453815.shtml
熵用来表示不肯定性的大小
信息用来消除不肯定性
所以,计算信息增益的总的思路是:
1) 首先计算不考虑任何输入变量的状况下要肯定S中任同样本所属类别须要的熵Entropy(S);
2) 计算引入每一个输入变量X后要肯定S中任同样本所属类别须要的熵Entropy (X,S);
3) 计算两者的差,Entropy (S) - Entropy (X, S),此即为变量X所能带来的信息(增益),记为Gain(X,S)。
结合上面对于熵的解释的文章里,咱们能得出求熵的公式:
下图很形象的解释了熵表明的含义。
咱们还以上面的一组数据来分析,信息增益具体应该怎么算
根据上面的讨论,咱们先用公式计算不考虑任何输入属性时,要肯定训练集S中任同样本所属类别须要的熵。
此例子中,目标属性即buys_computer,有2个不一样的取值,yes和no,所以有2个不一样的类别(m=2)。设P对应buys_computer=yes的状况,N对应buys_computer=no的状况,则P有9个样本,N有5个样本。因此,总的熵就是:
即,E(p,n) = E(9,5) = 0.940
而后咱们来求属性age的熵,age有三个属性,样本个数分别为5,4,5,因此属性age的熵就是:
最后,咱们能够求出属性age的信息增益为:
一样的,咱们能够分别求出income,student和credit_rating的信息增益
finally,咱们能够得出属性age的信息增益最大,因此,应该用属性age做为树根。
肯定好树根以后,下一步咱们还要按照刚才的步骤来肯定下一个节点的左右子树分别用哪一个属性做为树根,直到最后得出完整的决策树。
虽然决策树分类算法能够快速的预测分类,可是也会有过分拟合(Overfitting)的问题。
有些生成的决策树彻底服从于训练集,太循规蹈矩,以致于生成了太多的分支,某些分支多是一些特殊状况,出现的次数不多,不具备表明性,更有甚者仅在训练集中出现,致使模型的准确性很低。
一般采用剪枝的方式来克服 overfitting,剪枝有两种方法:
先剪:构造树的过程当中进行修剪。不符合条件的分支则不建。
后剪: 整个树生成以后进行修剪