决策树建模基础知识须知

链接文章:机器学习基础须知决策树建模实践(CART决策树)

决策树分类器基础知识须知

决策树组成:根节点(判断条件(属性列及值)、输出有向边)、中间节点(判断条件(属性列及值)、输出有向边)、叶节点(分类信息) 。

0、建立决策树的算法 Hunts算法:1、如果t节点对应的训练集Dt都属于同一个分类,则t是叶节点。2、如果训练集Dt所属的分类超过1个,则筛选属性判断条件将集合拆分成更小的子集。并据此创建一个子节点,将Dt拆分到对应的子集中。 对子节点递归应用此算法。

1、属性判断条件的表达:

  1. 二元属性:两个输出
  2. 名词性属性:多路分裂表达、二元表达(考虑2^k-1种可能,如CART决策树)。
  3. 有序属性:多路表达、二元表达。每个分支都必须保持原本的有序性,不能破坏。
  4. 连续属性:二元输出(A<v,A>=v),多个区间输出(有序、离散化方法处理该属性取值区间。)

2、选择最佳拆分的方法:度量拆分前后集合中分类的分布情况,基于子节点集合的纯度作选择,纯度越低,说明分布倾斜越严重。均匀分布(0.5,0.5)具有最高的纯度,(0,1),(1,0)分布纯度最低。

纯度度量方法:

(1)熵 entropy(t) = -SUM(p(i|t)*log2(p(i|t)),i) , 0log2(0)=0

(2)基尼系数 Gini(t) = SUM(p(i|t)*p(j|t),i!=j) = 1-SUM(p(i|t)*p(i|t),i)

(3)分类错误Classification error(t) = 1 – max(p(i|t),i)

选择了纯度度量方法之后,计算父节点和子节点的纯度差异,获得增益值gain,即是选择判断条件的依据。Gain = I(parent) – SUM(N(vj)/N * I(vj),j),N是父节点集合中数据量,N(vj)是子节点vj中的数据量,I(.)表示纯度。即父节点纯度减去子节点纯度的加权平均值。一般选择增益gain最大的属性作为拆分判断条件,I(parent)相同,即选择拆分后子节点的加权平均后纯度sum(N(vj)/N * I(vj))最低的情况作拆分。当选择熵作为纯度度量时,增益也叫做 信息增益。

对于连续属性的拆分:

  1. 暴力搜索:对每一个属性值v去计算判断条件(<v,>=v)拆分的集合纯度。
  2. 排序有向搜索:对连续属性值从低到高排序,选择排序后两两相邻的值的平均值作为判断条件去拆分集合,计算纯度。计算时,拆分后的子集合的分类统计从前一个判断的分类统计中加、减得到。
  3. 排序有向搜索的优化:对连续属性值从低到高排序后,选择分类发生变化的两个相邻值处作为拆分判断条件,进行拆分和纯度计算,没有发生分类变化的忽略。

多路输出拆分时,为防止拆分后子集太多太细,需要一个标准来限制和评估多路拆分的好坏。

(1)限制只能作二元输出。如CART决策树。

(2)修改拆分的判断标准,把拆分后的分组量也考虑在内。如C4.5决策树算法采用gain ratio增益率来判断一个拆分的好坏。Gain ratio = gain/split-info。

其中split-info = -SUM(P(vi)*log2(P(vi)), i属于拆分集合个数)。类似将集合拆分成K个后熵的计算,但这里只考虑拆分后的集合个数,不考虑集合内的分类情况。

3、决策树归纳算法:TreeGrowth算法

4、决策树归纳的特点:

(1)构建决策树是非参数的方法,不需要预先对分类类别作概率分布假设(独立/相互影响)。

(2)寻找最佳决策树是一个NP完全问题。很多决策树算法都会用基于启发的方法降低假设空间。比如采用贪婪的、自上向下的、递归拆分的策略来生成决策树。

(3)现在的技术可以使的构建决策树的计算成本很低,即使训练集很大的情况。一旦决策树构建完成,预测分类是极快的。计算复杂度最多是决策树的深度O(w)。

(4)决策树很容易解释

(5)决策树对于学习离散值函数提供了一个形式化的表达方式,但是它在一些Boolean问题上泛化应用不是很好。其中一个典型例子就是奇偶校验数据。

(6)决策树算法对于噪声是健壮的,尤其是应用了方法防止过拟合后。

(7)冗余的属性不会影响决策树的准确率。

(8)大多数决策树算法都是自上而下递归的,容易导致叶节点上含有的数据量很少,不具有显著性。这种情况叫做数据碎片问题data fragmentation.解决办法就是设置阈值,当低于该阈值时不允许再拆分。

(9)一个子树可能在决策树中反复出现好几次。因为决策树一般是采用单个属性来做判断条件的。但是这个情况会使的决策树更复杂、更难以解释。

(10)一次只用一个属性作拆分判断条件的决策树,其决策边界是平行于坐标轴的直线(x<v,v>=v)。但不是所有问题都可以用平行于坐标轴的直线来分类。斜决策树允许判断条件涉及2个及以上的属性,因此可以产生倾斜的直线作为决策边界(x+y<1,x+y>=1)。

但是计算一个完整的斜决策树的成本很高,寻找最佳判断条件的计算量也很大。替代的方法是,将属性进行组合生成新属性,然后用决策树的算法进行构建。

(11)纯度计算方法的选择对于决策树构建影响不大,相比之下,剪枝带来的影响会更大一些。

5、模型过拟合问题:

模型的误差主要分为两种:训练误差、泛化误差。

模型过拟合问题在训练集上误差较小,但在测试集上误差较大。

模型欠拟合问题在训练集和测试集上误差都很大。

导致过拟合的原因:

  1. 噪声的存在,在训练集上学习到了噪声(即错误分类)的信息,导致测试集上分类错误。
  2. 训练样本太少,缺乏代表性的样本。有些分类信息没有学到,导致测试时误分类。
  3. 多重比较过程产生的过拟合,在众多属性中选择最佳拆分判断条件的过程就是一个多重比较的过程。

6、模型复杂度对模型的过拟合问题是一个重要影响因素,理想的模型复杂度是使其泛化误差最低。所以在模型训练阶段就对泛化误差作估计,使学习算法选择最佳复杂度模型,防止过拟合问题。但构建模型的过程是在训练集上进行的,对其在测试集上的表现并不清楚。

模型训练时估计泛化误差的方法:

  1. 使用训练误差作为估计。这需要假设训练集是整个数据集的良好抽样样本。通常训练误差不能作为泛化误差的一个好的估计方法。
  2. 加入模型复杂度惩罚项。这种策略也叫做节俭原则或者Occam剃刀。具有相同泛化误差的两个模型,优选复杂度低的那个。

    [i] 悲观误差评估法eg(T) = (e(T) + O(T))/N, e(T)是训练集上被错误分类的样本量,N是训练样本量,O(T)是模型每个叶节点相关的惩罚项之和。惩罚系数设置的大小决定了分支节点满足什么条件才增长。惩罚系数设置为0.5,意味着只要能减少一个错误分类,就拆分,增长节点。设置为1,意味着只要拆分能减少两个错误分类,节点就增长,进行拆分,因为它虽然增加了1个复杂度惩罚项,但减少了2个错误项,整体上泛化误差的评估是降低的,所以树沿着这个方向生长。

    [ii] 最小描述长度原则MDL。利用了信息传播中的方法,编码模型的成本 和编码模型中分类错误的数据的成本之和即为总成本:

    Cost(model,data)=Cost(model) + Cost(data|model)

    Cost(tree) = M*log2(m) + K*log2(k)  ,即编码M个中间节点,K个叶节点的成本。其中训练集有m个属性,每个的编码成本为log2(m),k个分类,每个的编码成本log2(k).

    Cost(data|model) = e(T) *log2(N) ,其中N为训练样本量,每个错误分类编码成本为log2(N).

  3. 估计统计上界,对训练误差作统计修正来估计泛化误差。用二项分布来估计正态分布的误差上界。
  4. 使用验证集。将训练集拆分成两部分,一部分用作训练,另一部分作为验证集用作测试来估计泛化误差。可以据此调整模型学习过程(比如剪枝)使其在验证集上的错误率最低。一般6:4,即2/3: 1/3.

7、解决决策树归纳中的过拟合问题

[1]先剪枝:当增益值低于某阈值时停止该分支的生长或该节点的拆分。阈值的选择不是很容易,定的太高可能欠拟合,过低不能防止过拟合问题。也有可能前一个拆分的gain不大,但是其后面的子节点拆分获得的gain却很大。

[2]后剪枝:先让决策树完全生长到最大的情况,然后采用从底部往上(bottom-up)的方式合并叶节点或者用出现频次较多的分支替换子树,即剪枝。

一般后剪枝比先剪枝要好,但后剪枝基于完全生长的树,所以会有计算上多余消耗。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值