这三天,我主要学习了决策树的相关知识,从基础入门的机器学习知识已经进入到了一些常用的机器学习方法学习。
0 基本流程
决策树,顾名思义,是一种基于树结构的决策方法。每一个根节点,就是对于样本某一属性测试,而叶节点往往是预测结果。
决策树学习是为了产生一棵泛化能力强的决策树,基本遵循“分而治之”的思想。
决策树的产生是一个递归过程。 对于一个递归过程,我们往往关心它的终止条件。
递归的终止与否取决于节点的内容。当节点中均为同一类别,或者没有属性能够区分节点中的样本,或者节点值为空,此时决策树生成终止。
决策树算法的核心是什么属性最适合在当前进行划分。
1 划分选择
我们希望划分标准能够更容易将节点中的样本划分完全,即希望节点的“纯度”越来越高。
1 信息增益
在这里,我们引入了信息论中“信息熵”的概念。“信息熵”越小,那么节点的纯度就越高。所以我们希望进行一次决策前后,信息熵的差值越大越好。信息熵的差值,即所谓“信息增益”。
下面分别给出信息熵和信息增益的定义。
其中a表示用a属性划分时前后的信息增益,Dv表示a属性下划分的种类。
著名的ID3决策树学习算法就是以信息标准为准则进行划分属性的选择。我们选择信息增益最大的属性作为根节点,然后不断重复这一过程,可以得到一棵决策树。
2 增益率
信息增益为准则时的决策树对于可取值较多的属性有偏好,为了减小这种偏好,C4.5决策树算法提出了使用“增益率”来选择划分属性。
当属性的取值数目越多时,分母越大,起到了一定的规范性作用。
增益率对于可取值较少的属性有所偏好,所以C4.5算法提出了一种启发式算法:先在侯选属性中找到信息增益高于平均水平的属性,再从其中选择增益率最高的。
3 基尼系数
基尼值反映了从数据集中抽取两个样本,类别标记不一致的概率。
基尼值越小,说明数据集的纯度越高。
基尼系数就是基尼值的加权求和。
2 剪枝处理
为了对付“过拟合”的问题,有时候我们需要减少决策树的分支。
1 预剪枝
提前终止某些分支的生长。我们需要在根节点不进行划分和进行划分前后对比验证集的精度:
但是预剪枝很可能带来欠拟合的风险。
2 后剪枝
从训练集生成一棵完整的决策树,再进行修剪。同理,我们需要对比剪枝前后的验证集精度:若精度提高,则需要剪枝;若精度不变或降低,则无需剪枝。
后剪枝的欠拟合风险较小,但是花费的时间开销更大。
3 连续与缺失的处理
1 连续数值离散化
我们将连续属性的属性值写在数轴上,取两两属性值的平均数作为候选划分点。然后利用信息增益、增益率或者基尼系数等指标来衡量。
2 缺失值处理
在数据集数量很多、维数很高的情况下,我们无法舍弃所有,那样留给我们可用的数据将少之又少。所以,我们如何处理这些存在属性值缺失的样本呢?
对于这类样本,我们的原则是“样本赋权,权重划分”。
样本赋权
例如对于某一个属性,存在一些不存在该属性值的样本。我们将利用进行信息熵和信息增益的计算,但是还需要多一步,就是需要给得到的信息增益乘以拥有该属性值的样本个数除以样本总数这样一个权重。
权重划分
当我们得到了最好的划分属性时,对于不存在该属性值的样本,我们这样做:
比如一共存在10个样本,现在我们决定用C属性进行决策。先设置每个样本的权重均为1,假如此时1、8两个样本不存在C属性对应的属性值。而2、3、6、9、10属于C属性的属性值1,4、5属于属性值2,7属于属性值3;此时我们将1和8这两个样本分别赋予5/8、2/8、1/8的权重分别加入三种属性值。
以上就是我最近的学习心得与收获,不足之处恳请各位批评指正!