决策树
一、原理
决策树主要是通过已有数据建立决策树,然后根据建立的决策树来进行预测分析。
这就关系到如何建立决策树。选择一个属性,对该属性进行分类可产生子节点。以此进行循环就可产生决策树。就像数据:
[[1,1,‘yes’],
[1,1,‘yes’],
[1,0,‘no’],
[0,1,‘no’],
[0,1,‘no’]]
对第一个属性可以进行分为1和0两个类,将全部第一属性为1的数据作为一个子节点,全部为0的数据作为第二个子节点。然后再以此类推,对子节点的第二个属性进行分类,注意此时的子节点是相互独立的。第一个子节点为:
[[1,1,‘yes’],
[1,1,‘yes’],
[1,0,‘no’]]
对其进行划分子节点时,是对第二个属性划分。将该节点中的第二属性为1的全部数据作为一个子节点,为0的作为一个子节点。另外一个第二层的节点的划分也是类似的。
这样这颗简单的决策树就建立了。
在决策树的建立中还有一些问题,这些问题是在这个简单的数据集中可能看不出来的。比如:该首先选择哪个属性进行划分、划分到什么时候停止。还有此数据是一个二值类数据,对于连续性数据又该如何。
二、数据分割
对于离散型数据可直接将不同种的数据进行分割。
对于连续性数据也可将数据离散化后进行分割。
三、分裂属性的选择
分裂属性的选择也是决策树建立算法的重中之重。分为信息增益和信息增益率两大类。信息增益又分为了信息增益熵和Gini值两种。
信息增益
- 熵
Pi表示类i占的比例。越混乱则熵越大,即纯度越低。 - Gini值
Pi表示类i占的比值。当越混乱时,值越大,纯度越低。
信息增益率
信息增益点倾向选择分支比较多的属性进行分裂。为了平衡这个问题,引入了信息增益率这个概念。信息增益率是在信息增益的基础上除以分裂节点数据量的信息增益。
InfoGain是信息增益,就是上面的计算方法。InstrinsicInfo表示分裂子节点数据量的信息增,益公式:
m表示子节点的个数。ni表示i子节点的数据量,N表示父节点的数据量。ni/N就是分裂到i节点的概率。所以,InstrinsicInfo其实就是分裂节点的熵,子节点越大,该值越大,对于InfoRatio来说分母就增大,从而平衡分子的增大,降低节点分裂时选择子节点多的分裂属性的倾向性。
总结
将信息增益的两个子类算为两类加上最后的信息增益率就是三类。决策树的生成有三个代表的算法就是以这三种来计算不纯度来生成决策树的。ID3算法用的是信息增益,C4.5算法用信息增益率;CART算法使用基尼(Gini)系数。
四、停止分裂
决策树不可能一直无止境的生成下去,最极端的就是将所有的数据都分为一个叶子节点。但是这样的做法是不好的,会增大噪音点的影响,降低决策树的精度,提高决策树的复杂度。因而有以下几种停止分裂的情况:
- 最小节点数
当节点的数据达到规定的一个最小数据量的阀值时,就提前停止分裂,这样就可以降低决策树的复杂度,同时降低噪音点的影响。 - 熵或计Gini小于阀值
之前将了信息增益,熵或者Gini值越小代表着节点的数据纯度越高。因而,当该值小于某一阀值时,我们就可以认为该节点已经可以认为是纯的了,可以当作结论的叶子节点了,进而停止分裂。 - 决策树的深度达到指定的条件
决策树的深度也就从一方面代表了决策树的复杂度。因而,当到达一定的深度时,我们停止分裂。 - 所有特征已经使用完毕
当所有特征值已经全部分完了,没有可分的特征值时,决策树被动停止分裂。