决策树是一种解决分类问题的绝好方法,顾名思义,它正像一棵大树一样,由根部不断生长出很多枝叶;它的优点实在太多,比如可以避免缺失值的影响、可以处理混合预测、模型容易展示等。然而,决策树的实际应用也绝不简单,如果树根稍有不稳、或者枝干略有差池,树就可能会彻底长偏啦,我们总是需要仔细挑选单棵决策树、或适当的组合。
单棵决策树
这是统计分析领域比较常用、机器学习领域也用得烂熟的分类算法:一棵大树上每支叶子自成一类。在实际业务中,大家最关心的问题包括:在每一个节点该选择哪个属性进行分割?该怎样分割才能效果最好?这些问题通常都可以通过SASEnterprise Miner中强大的交互决策树功能解决,选择最大的logworth值来选择拆分变量、创建拆分规则。
不过,这样的分类过程到底应该在什么时候结束呢?最直观的方式当然是在每个子节点只有一种类型的记录时停止分类,但是这样可能会使得树的节点过多,导致过拟合问题(overfitting),即该决策树对训练数据可以得到很低的错误率,但是运用到验证数据上时却错误率极高。所以,剪枝是优化和解决这类问题的必要做法,我们之前介绍过的K折交叉验证(点击阅读)也可用来对原始决策树进行验证和裁减,从而得到最优决策树。单棵决策树的实现在SASEnterprise Miner中有现成的节点可直接使用。
决策树是一种解决分类问题的绝好方法,顾名思义,它正像一棵大树一样,由根部不断生长出很多枝叶;它的优点实在太多,比如可以避免缺失值的影响、可以处理混合预测、模型容易展示等。然而,决策树的实际应用也绝不简单,如果树根稍有不稳、或者枝干略有差池,树就可能会彻底长偏啦,我们总是需要仔细挑选单棵决策树、或适当的组合。
单棵决策树
这是统计分析领域比较常用、机器学习领域也用得烂熟的分类算法:一棵大树上每支叶子自成一类。在实际业务中,大家最关心的问题包括:在每一个节点该选择哪个属性进行分割?该怎样分割才能效果最好?这些问题通常都可以通过SASEnterprise Miner中强大的交互决策树功能解决,选择最大的logworth值来选择拆分变量、创建拆分规则。
不过,这样的分类过程到底应该在什么时候结束呢?最直观的方式当然是在每个子节点只有一种类型的记录时停止分类,但是这样可能会使得树的节点过多,导致过拟合问题(overfitting),即该决策树对训练数据可以得到很低的错误率,但是运用到验证数据上时却错误率极高。所以,剪枝是优化和解决这类问题的必要做法,我们之前介绍过的K折交叉验证(点击阅读)也可用来对原始决策树进行验证和裁减,从而得到最优决策树。单棵决策树的实现在SASEnterprise Miner中有现成的节点可直接使用。
除了剪枝、交叉验证等手段外,为了有效减少单决策树带来的问题,与决策树相关的组合分类(比如Bagging,Boosting等算法)也逐渐被引入进来,这些算法的精髓都是通过生成N棵树(N可能高达几百)、最终形成一棵最适合的结果分类树。有人戏称这是三个臭皮匠顶一个诸葛亮的算法:虽然这几百棵决策树中的每一棵相对于C4.5算法来说可能都很简单,但是他们组合起来却真的很强大。下面我们就来简单介绍几种常见的组合算法:
1 booststraping:意思是依靠你自己的资源,称为自助法,它是一种有放回的抽样方法
,它是非参数统计中一种重要的估计统计量方差进而进行区间估计的统计方法。
其核心思想和基本步骤如下:
(1)采用重抽样技术从原始样本中抽取一定数量(自己给定)的样本,此过程允许重复抽样。
(2)根据抽出的样本计算统计量T。
(3)重复上述N次(一般大于1000),得到统计量T。
(4)计算上述N个统计量T的样本方差,得到统计量的方差。
应该说是Bootstrap是现代统计学较为流行的方法,小样本效果好,通过方差的估计可以构造置信区间等。
2 bagging:bootstrap aggregating的缩写。让该学习算法训练多轮,每轮的训练集由从初始的训练集中随机取出n个训练样本组成,某个训练样本在某训练集中可能出现多次或者不出现,训练之后可得到一个预测函数序列h_1,h_n,也类似于一个森林。最终的预测函数H对分类问题采用投票方式,对回归问题(加权平均好点,但是没)采用简单平均方式判别。训练R个分类器f_i,分类器之间其他相同就是参数不相同。其中f_i是通过从训练集和中随机取N次样本训练得到的。对于新样本,用这个R个分类器去分类,得到最多的那个类别就是这个样本的最终类别。
3 boost:其中主要的是adaboost(adaptiveboosting)。初始化时对每一个训练赋予相同的权重1/n,然后用该学算法对训练集训练t轮,每次训练后,对训练失败的训练列赋予较大的权重,也就是让学习算法在后续的学习中集中对比较难的训练列进行训练(就是把训练分类错了的样本,再次拿出来训练,看它以后还敢出错不),从而得到一个预测函数序列h_1,h_m,其中h_i也有一定的权重,预测效果好的预测函数权重大,反之小。最终的预测函数H对分类问题采用有权重的投票方式,对回归问题采用加权平均的方式对新样本判别。类似bagging方法,但是训练是串行的,第K个分类器训练时,关注对前k-1分类器中错误,不是随机取样本,而是加大取这些分错的样本的权重。
4 Online Boosting
在线 Boosting算法重点研究如何替换弱分类器来学习时变的样本集,本文提出了一种新的在线 Boosting算法,各弱学习器调节自身参数进而适应时变的环境。与以往直接替换学习器的方式不同,该方法随着新的样本集的到来调节弱分类器的参数,使分类正确率高的弱分类器有较高的权重,而分类正确率低的弱分类器的权重也会相应降低。
下面讲一下Poisson重采样
对每一训练样本,按照参数为 λ的 Poisson分布(泊松分布)得到一个随机数,对样本重复训练该随机数次。一个基学习器训练完毕之后将该样本继续传递给下一个基学习器。当一个基学习器误分类一个训练样本,该样本在提交给下一个基学习器时,其对应的 Poisson 分布参数 λ增加;反之样本对应的 Poisson分布参数减少,并通过这些来更新每个基学习器的误差 ε 。从这个角度,训练样本的权重更新方法和离线 AdaBoost相同。
其流程如下:
其中:λm 的作用是控制整个基分类器的误差,因为在线进来的不知一个样本。有很多样本。
下面给出online boosting和online adboosting的思路。
在目标图像的目标物体附近选择正样本,离目标物体远的区域作为负样本。
OAB1 = 在线boosting(搜索半径r=1,每帧1个正样本)
OAB5 = 在线boosting(搜索半径r=5,每帧45个正样本)
以上内容是自己在网络上看到的,呵呵,和大家分享一下.....
5 bagging和boosting的区别:二者的主要区别是取样本方式不同。bagging采用均匀取样,而boosting根据错误率来采样,因此boosting的分类精度要由于bagging。baging的训练集选择是随机的,各轮训练集之前互相独立,而boosting的各轮训练集的选择与前面各轮的学习结果相关;bagging的各个预测函数没有权重,而boost有权重;bagging的各个函数可以并行生成,而boosting的各个预测函数只能顺序生成。对于象神经网络这样极为消耗时间的算法,bagging可通过并行节省大量的时间开销。bagging和boosting都可以有效地提高分类的准确性。在大多数数据集中,boosting的准确性要比bagging高。有一些数据集中,boosting会退化-overfit。boosting思想的一种改进型adaboost方法在邮件过滤,文本分类中有很好的性能。
6 gradient boost(Mart,Treenet):boosting是一种思想,GradientBoosting是一种实现Boosting的方法,它的主要思想是,每一次建立模型,是在之前建立模型损失函数的梯度下降方向。损失函数描述的是模型的不靠谱程度,损失函数越大,说明模型越容易出错。如果我们的模型能够让损失函数持续的下降,说明我们的模型在不停的改进,而
最好的方式就是让损失函数在其梯度的方向下降。
7 RandomForest:随机森林,使用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一课决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入,就让森林中的每一颗决策树分别进行判断,看看这个样本属于那个类,然后看看哪一类被选择多,就预测为那一类。在建立决策树的过程中,需要注意两点-采样和完全分裂。首先是两个随机采样的过程,randomforest对输入的数据要经行行,列的采样。对于行采样,采用有回放的方式,也就是在采样得到的样本集合中,可能有重复的样本。假设输入样本为N个,那么采样的样本也为n个。这样使得在训练的时候,每一颗树的输入样本都不是全部样本,使得相对不容易出现over-fitting。然后进行采样,从M个feature中,选择m个。之后就是对采样之后的数据使用完全分裂的方式建立出决策树,这样决策树的某一个叶子节点要么是无法继续分裂,要么里面的所有样本都是指向的同一类分类。一般的决策树都有一个重要的步骤,剪枝,但是这里不这样干,由于之前的两个随机采样的过程保证了随机性,所以就算不剪枝,也不会over-fitting。
总结:
按这种算法得到的随机森林中的每一颗树都是很弱的,但是大家组合起来就很厉害了。可以这样比喻随机森林:每一颗决策树就是一个精通于某一个窄领域的专家,这样在随机森林中就有了很多个精通不同领域的专家,对于新的样本,可以用不同的角度看待它,最终由各个专家,投票得到结果。俗话说三个臭皮匠赛过诸葛亮,各类组合算法的确有其优越之处;我们也认为,模型效果从好到差的排序通常依次为:随机森林>Boosting> Bagging > 单棵决策树。但归根结底,这只是一种一般性的经验、而非定论,应根据实际数据情况具体分析。就单棵决策树和组合算法相比较而言,决策树相关的组合算法在提高模型区分能力和预测精度方面比较有效,对于像决策树、神经网络这样的“不稳定”算法有明显的提升效果,所以有时会表现出优于单棵决策树的效果。但复杂的模型未必一定是最好的,我们要在具体的分析案例中,根据业务需求和数据情况在算法复杂性和模型效果之间找到平衡点。