决策树Decision Tree

决策树:

ID3:其核心是在决策树的各级节点上,实用信息增益(information gain)作为属性的选择标准,来帮助确定生成每个节点是所应采用的合适属性。ID3只是用于处理离散的描述属性。

C4.5: 相对于ID3的改进是使用信息增益率来选择节点属性。C4.5技能处理离散的描述属性,也能处理连续的描述属性。

CART:是一种十分有效的非参数分类和回归方法,通过构建树、修剪树、评估树来构建二叉树。当终结点是连续变量时,该树为回归树;当终结点是分类变量时,该树为分类树。


ID3:基于信息增益选择最佳属性,构造一棵信息熵值下降最快的树,树不断构建的过程也就是熵不断下降的过程。

信息熵:H(X) 描述X携带的信息量。 信息量越大(值变化越多,把事情搞清楚所需要的信息量就越多),则越不确定,越不容易被预测。表示随机变量的不确定性。

条件熵:在一个条件下,随机变量的不确定性。

信息增益IG(Y|X): 衡量一个属性(x)区分样本(y)的能力;在一个条件下,信息不确定性减少的程度。 当新增一个属性(x)时,信息熵H(Y)的变化大小即为信息增益。 IG(Y|X)越大表示x越重要

信息增益例子:明天下雨例如信息熵是2,条件熵(下雨|阴天)是0.01(因为如果是阴天就下雨的概率很大,信息就少了),这样相减后为1.99,在获得阴天这个信息后,下雨信息不确定性减少了1.99!是很多的!所以信息增益大!也就是说,阴天这个信息对下雨来说是很重要的!

采用划分后样本集的不确定性来作为衡量划分好坏的标准,用信息增益值度量不确定性:信息增益越大不确定性就越小。ID3在每个非叶节点选择信息增益最大的属性作为测试属性,这样可以得到当前情况下最纯(最极端的情况是每个叶子节点只有一个样本)的拆分,从而得到较小的决策树

定义:特征A对训练集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差:

信息增益
信息熵
特征A对数据集D的经验条件熵

可以转化得到:

建模步骤

1. 对当前样本集合,计算所有属性的信息增益

2. 选择信息增益最大的属性作为测试属性,把测试属性取值相同的样本化为同一个样本集

3. 若子样本集的类别墅型只有单个属性,则为叶子节点,判断其属性值并标上相应的符号,然后返回调用处;否则对子样本集本算法

ID3例子

C4.5: 基于信息增益率(gain ratio)的ID3改进版。ID3不足在于选择具体特征作为节点的时候,它会偏向于选择取值较多的特征。一个极端情况是:以是否出去玩为例,假设新来的一列特征为partner,有n个取值,且每个取值只有一条记录,则特征的信息熵为0,

每个特征自成一类。E(A)即上文中H(D|A)条件经验熵

这样的信息增益是最大的,必然选择此特征为节点,但是结果是树很庞大而深度很浅,泛化预测能力较差。

gain ratio

IV(A): 属性A的可能取值数目越多,则IV(A)的值通常越大。

IV(A): 固有值intrinsic value

这里的IV(A)也叫做split information

*注

增益率准则对可取值数目较小的特征有所偏好,所以C4.5并不是直接选增益率最大的候选划分特征,而是使用了一个启发式:先从候选划分特征中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

对连续属性的处理如下:

1.      对特征的取值进行升序排序

2.      两个特征取值之间的中点作为可能的分裂点,将数据集分成两部分,计算每个可能的分裂点的信息增益(InforGain)。优化算法就是只计算分类属性发生改变的那些特征取值。

3.      选择修正后信息增益(InforGain)最大的分裂点作为该特征的最佳分裂点

4.      计算最佳分裂点的信息增益率(Gain Ratio)作为特征的Gain Ratio。注意,此处需对最佳分裂点的信息增益进行修正:减去log2(N-1)/|D|(N是连续特征的取值个数,D是训练数据数目,此修正的原因在于:当离散属性和连续属性并存时,C4.5算法倾向于选择连续特征做最佳树分裂点)


CART(Classification And Regression Tree): 使用基尼指数(Gini index)来选择划分特征。该算法是一种二分递归分割法,把挡墙的样本集合划分为两个子集合,它生成的每个非叶子节点都只有两个分支(binary tree)

基尼指数:表示数据的不纯度性基尼指数越大,越不平等。总体内包含的类别越杂乱,GINI指数就越大(跟熵的概念很相似)

给定一个数据集D,其中包含的分类类别总数为K,类别k在数据集中的个数为|C|,其Gini指数表示为:

数据集D的gini指数
特征a的gini指数

在候选特征集合A中,选择那个使得划分后基尼指数最小的特征为最优化分数性,即:

a* = arg min GiniIndex(D,a)


小节

算法    支持模型    树结构    特征选择             连续值处理    缺失值处理    剪枝        样本量

ID3     分类            多叉树     信息增益            不支持          不支持            不支持        /

C4.5   分类            多叉树     信息增益比         支持             支持                支持         小样本(大样本耗时)

CART分类|回归     二叉树    基尼系数|均方差  支持            支持                 支持        大样本(小样本泛化误差大)


决策树算法优缺点:

优点:

1.简单直观

2.基本不需要数据预处理,归一化,处理缺失值

3.预测代价O(logm),m为样本数

4.适用于离散和连续数据

4.逻辑上可以较好的解释,相较于神经网络的黑盒

5.可以用交叉验证的剪枝来提高泛化能力

6.对异常点容错能力好

缺点:

1.非常容易过拟合。可以通过设置节点样本数量和先知决策树深度以及后剪枝来改进

2.树的结构会因为样本的一点点改动而剧烈改变。可以通过集成学习方法改进

3.因为是贪心算法,只能确定局部最优。通过集成学习改进

4.如果某特征样本比例过大,生成的决策树容易偏向这些特征,造成欠拟合。可以通过调节样本权重来改进。


信息熵越大,不纯度越高,信息越杂乱


剪枝pruning

预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化能力(在训练时加入验证集随时进行泛化验证)的提升,则停止划分并将当前结点标记为叶节点。

根据不同决策树算法,防止过拟合的参数有一些不同,但max_depth是通用的;其他的一些参数:

min_samples_split:节点在分裂之前必须具有的最小样本数。也就是,如果该节点上的样本数量小于参数设置的数目时,不管怎样,这个节点也不再分裂。

min_samples_leaf:叶节点必须拥有的最少样本数。如果分裂一个节点生成一些叶子,而某个叶子上的样本数量少于参数设置的值时,将不将这些样本单独作为一个叶子。

min_weight_fraction_leaf:和上面一个参数差不多,但表示为加权实例总数的一小部分。

max_leaf_nodes:叶子节点的最大数量


后剪枝则是先从训练集中生成一颗完整的树,然后自底向上对非叶节点进行考察,若该节点对应的子树替换为叶节点能够提升泛化能力,则进行剪枝将该子树替换为叶节点,否则不剪枝。

评价函数:类似损失函数,越小越好。 

节点sample个数*信息熵/基尼系数
节点信息熵/基尼系数+当前树的叶子个数



随机森林random forest

bootstraping:有放回的抽样

bagging:有放回的采样n个样本建立一个分类器

你可能感兴趣的:(决策树Decision Tree)