0x01 概述
决策树是附加概率结果的一个树状的决策图,是直观的运用统计概率分析的图法。机器学习中决策树是一个预测模型,它表示对象属性和对象值之间的一种映射,树中的每一个节点表示对象属性的判断条件,其分支表示符合节点条件的对象。树的叶子节点表示对象所属的预测结果。
0x02 决策树案例
上图是一棵结构简单的决策树,用于预测贷款用户是否具有偿还贷款的能力。贷款用户主要具备三个属性:是否拥有房产,是否结婚,平均月收入。每一个内部节点都表示一个属性条件判断,叶子节点表示贷款用户是否具有偿还能力。例如:用户甲没有房产,没有结婚,月收入 5K。通过决策树的根节点判断,用户甲符合右边分支 (拥有房产为“否”);再判断是否结婚,用户甲符合左边分支 (是否结婚为否);然后判断月收入是否大于 4k,用户甲符合左边分支 (月收入大于 4K),该用户落在“可以偿还”的叶子节点上。所以预测用户甲具备偿还贷款能力。
0x03 决策树的构建
决策树算法主要是指决策树进行创建中进行树分裂(划分数据集)的时候选取最优特征的算法,他的主要目的就是要选取一个特征能够将分开的数据集尽量的规整,也就是尽可能的纯. 最大的原则就是: 将无序的数据变得更加有序
总结三个常用的方法:
信息增益(information gain)
增益比率(gain ratio)
基尼不纯度(Gini impurity)
- 信息增益(information gain)
- 某个事件 i 的信息量: 这个事件发生的概率的负对数
- 信息熵就是平均而言一个事件发生得到的信息量大小,也就是信息量的期望值
我们将一组数据集进行划分后,数据的信息熵会发生改变,我们可以通过使用信息熵的计算公式分别计算被划分的子数据集的信息熵并计算他们的平均值(期望值)来作为分割后的数据集的信息熵。新的信息熵的相比未划分数据的信息熵的减小值便是信息增益了。
假设我们将数据集D划分成k份,则划分后的信息熵为
信息增益便是两个信息熵的差值
- 增益比率(gain ratio)
增益比率是信息增益方法的一种扩展,是为了克服信息增益带来的弱泛化的缺陷。因为按照信息增益选择,总是会倾向于选择分支多的属性,这样会是的每个子集的信息熵最小。例如给每个数据添加一个第一无二的id值特征,则按照这个id值进行分类是获得信息增益最大的,这样每个子集中的信息熵都为0,但是这样的分类便没有任何意义,没有任何泛化能力,类似过拟合。
分裂信息的公式为:
这时候把分裂信息的值放到分母上便会中和信息增益带来的弊端。
- 基尼不纯度(Gini impurity)
基尼不纯度的定义:
其中m 表示数据集D 中类别的个数, pi 表示某种类型出现的概率。
针对划分成k个子集的基尼不纯度计算公式:
对于特征选取,需要选择最小的分裂后的基尼指数。也可以用基尼指数增益值作为决策树选择特征的依据。
在决策树选择特征时,应选择基尼指数增益值最大的特征,作为该节点分裂条件。
0x04 决策树的剪枝
在分类模型建立的过程中,很容易出现过拟合的现象。
过拟合是指在模型学习训练中,训练样本达到非常高的逼近精度,但对检验样本的逼近误差随着训练次数而呈现出先下降后上升的现象。
过拟合时训练误差很小,但是检验误差很大,不利于实际应用。
决策树的过拟合现象可以通过剪枝进行一定的修复。剪枝分为预先剪枝和后剪枝两种。
- 预先剪枝
预先剪枝指在决策树生长过程中,使用一定条件加以限制,使得产生完全拟合的决策树之前就停止生长。预先剪枝的判断方法也有很多,比如信息增益小于一定阀值的时候通过剪枝使决策树停止生长。但如何确定一个合适的阀值也需要一定的依据,阀值太高导致模型拟合不足,阀值太低又导致模型过拟合。
- 后剪枝
后剪枝是在决策树生长完成之后,按照自底向上的方式修剪决策树。后剪枝有两种方式,一种用新的叶子节点替换子树,该节点的预测类由子树数据集中的多数类决定。另一种用子树中最常使用的分支代替子树。
预先剪枝可能过早的终止决策树的生长,后剪枝一般能够产生更好的效果。但后剪枝在子树被剪掉后,决策树生长的一部分计算就被浪费了。
0x05 参考文献
https://www.ibm.com/developerworks/cn/analytics/library/ba-1507-decisiontree-algorithm/index.html
http://python.jobbole.com/87994/
http://blog.csdn.net/xbinworld/article/details/44660339