随机森林RF
见博文集成学习算法----Boosting和Bagging
随机森林是有很多随机得决策树构成,它们之间没有关联。得到RF以后,在预测时分别对每一个决策树进行判断,最后使用Bagging的思想进行结果的输出(也就是投票的思想)
学习过程
现在有N个训练样本,每个样本的特征为M个,需要建K颗树
从N个训练样本中有放回的取N个样本作为一组训练集(其余未取到的样本作为预测分类,评估其误差)
从M个特征中取m个特征左右子集特征(m<
对采样的数据使用完全分裂的方式来建立决策树,这样的决策树每个节点要么无法分裂,要么所有的样本都指向同一个分类
重复2的过程K次,即可建立森林
预测过程
将预测样本输入到K颗树分别进行预测
如果是分类问题,直接使用投票的方式选择分类频次最高的类别
如果是回归问题,使用分类之后的均值作为结果
参数问题
这里的一般取m=sqrt(M)
关于树的个数K,一般都需要成百上千,但是也有具体的样本有关(比如特征数量)
树的最大深度,(太深可能可能导致过拟合??)
节点上的最小样本数、最小信息增益
泛化误差估计
使用oob(out-of-bag)进行泛化误差的估计,将各个树的未采样样本作为预测样本(大约有36.8%),使用已经建立好的森林对各个预测样本进行预测,预测完之后最后统计误分得个数占总预测样本的比率作为RF的oob误分率。
学习算法
ID3算法:处理离散值的量
C45算法:处理连续值的量
Cart算法:离散和连续 两者都合适?
关于CART
Cart可以通过特征的选择迭代建立一颗分类树,使得每次的分类平面能最好的将剩余数据分为两类
gini=1-sigma(pi^2),表示每个类别出现的概率和与1的差值,
分类问题:argmax(Gini-GiniLeft-GiniRight)
回归问题argmax(Var-VarLeft-VarRight)
查找最佳特征f已经最佳属性阈值th 小于th的在左边,大于th的在右边子树
优缺点
能够处理大量特征的分类,并且还不用做特征选择
在训练完成之后能给出哪些feature的比较重要
训练速度很快
很容易并行
实现相对来说较为简单
GBDT
18 rf gbdt的区别;gbdt
xgboost的区别
GBDT的精髓在于训练的时候都是以上一颗树的残差为目标,这个残差就是上一个树的预测值与真实值的差值。
比如,当前样本年龄是18岁,那么第一颗会去按18岁来训练,但是训练完之后预测的年龄为12岁,差值为6,所以第二颗树的会以6岁来进行训练,假如训练完之后预测出来
Boosting的好处就是每一步的参加就是变相了增加了分错instance的权重,而对已经对的instance趋向于0,这样后面的树就可以更加关注错分的instance的训练了
Shrinkage
Shrinkage认为,每次走一小步逐步逼近的结果要比每次迈一大步逼近结果更加容易避免过拟合。
y(1 ~ i) = y(1 ~ i-1) + step * yi
就像我们做互联网,总是先解决60%用户的需求凑合着,再解决35%用户的需求,最后才关注那5%人的需求,这样就能逐渐把产品做好.
Shrinkage的思想认为,每次走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。即它不完全信任每一个棵残差树,它认为每棵树只学到了真理的一小部分,累加的时候只累加一小部分,通过多学几棵树弥补不足。
Shrinkage仍然以残差作为学习目标,但对于残差学习的结果,只累加一小部分,step一般取值0.001-0.01(非gradient的step),使得各个树的残差是渐变而不是陡变的,即将大步切成了小步。Shrinkage能减少过拟合发生也是经验证明的,目前还没有看到从理论的证明
调参
树的个数 100~10000
叶子的深度 3~8
学习速率 0.01~1
叶子上最大节点树 20
训练采样比例 0.5~1
训练特征采样比例 sqrt(num)
优缺点:
优点:
精度高
能处理非线性数据
能处理多特征类型
适合低维稠密数据
缺点:
并行麻烦(因为上下两颗树有联系)
多分类的时候 复杂度很大
GBDT与 随机森林应用时的对比
GBDT和随机森林虽然都是决策树的组合算法,但是两者的训练过程还是很不相同的。 GBDT训练是每次一棵,一棵接着一棵(串行),因此与随机森林并行计算多棵树相比起来,会需要更长的训练时间。 在GBDT中,相对于随机森林而言(随机森林中的树可以不做很多的剪枝),一般会选择更浅(depth更小)的树,这样运算时间会减少。 随机森林更不容易过拟合,而且森林中包含越多的树似乎越不会出现过拟合。用统计学的语言来讲,就是说越多的树包含进来,会降低预测结果的方差(多次预测结果会更加稳定)。但是GBDT则恰好相反,包含预测的树(即迭代的次数越多),反而会更倾向于过拟合,用统计学的语言来将,就是GBDT迭代次数的增加减少的是偏差(预测结果和训练数据label之间的差异)。(偏差和方差这两个概念是不同的概念,见后面的图) 随机森林参数相对更容易调试一些,这是由于随着所包含的决策树的个数增加,其预测效果一般是单调的向好的方向变。而GBDT则不同,一开始预测表现会随着树的数目增大而变好,但是到一定程度之后,反而会随着树的数目增加而变差。 总而言之,这两种算法都还是非常有效的算法,如何选择取决于实际的数据。
--------------------------------------------------------------------------------------------
RF与GBDT之间的区别与联系?
1)相同点:都是由多棵树组成,最终的结果都是由多棵树一起决定。
2)不同点:
a 组成随机森林的树可以分类树也可以是回归树,而GBDT只由回归树组成
b 组成随机森林的树可以并行生成,而GBDT是串行生成
c 随机森林的结果是多数表决表决的,而GBDT则是多棵树累加之和
d 随机森林对异常值不敏感,而GBDT对异常值比较敏感
e 随机森林是减少模型的方差,而GBDT是减少模型的偏差
f 随机森林不需要进行特征归一化。而GBDT则需要进行特征归一化