通俗理解kaggle比赛大杀器xgboost (强烈推荐,该文中详细清晰的介绍了决策树、集成学习、Boosting、Bagging、Adaboost、GBDT、xgboost)
Adaboost,按分类对错,分配不同的weight,计算cost function时使用这些weight,从而让“错分的样本权重越来越大,使它们更被重视”。
Bootstrap也有类似思想,它在每一步迭代时不改变模型本身,也不计算残差,而是从N个instance训练集中按一定概率重新抽取N个instance出来(单个instance可以被重复sample),对着这N个新的instance再训练一轮。由于数据集变了迭代模型训练结果也不一样,而一个instance被前面分错的越厉害,它的概率就被设的越高,这样就能同样达到逐步关注被分错的instance,逐步完善的效果。
GBDT中的树都是回归树,不是分类树。所以看GBDT之前,需要先看回归树内容。
GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案。它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法。近些年更因为被用于搜索排序的机器学习模型而引起大家关注。
GBDT的核心就在于,每一棵树学的是之前所有树结论和与真实值的残差。
GB其实是一种理念,他并不是这一个具体的算法,意思是说沿着梯度方向,构造一系列的弱分类器函数。
当我们选择平方差损失函数时,梯度就是目标值减去预测值,即残差。用残差更新每个样本的目标值:叶子节点的均值作为落到该叶子节点的样本的预测值,使用目标值减去预测值,得到该样本的残差,作为下一棵树的训练目标。
随机森林与GBDT的比较
参考GBDT
相同点:
不同点:
参考:终于有人说清楚了--XGBoost算法
XGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进,被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不错的成绩。因为XGBoost本质上还是一个GBDT,但是力争把速度和效率发挥到极致,所以叫X (Extreme) GBoosted。两者都是boosting方法。
XGBoost的核心算法思想不难,基本就是:
XGBoost与GBDT有什么不同
除了算法上与传统的GBDT有一些不同外,XGBoost还在工程实现上做了大量的优化。总的来说,两者之间的区别和联系可以总结成以下几个方面。
参考:知乎-随机森林算法梳理
当我们进行分类任务时,新的输入样本进入,就让森林中的每一棵决策树分别进行判断和分类,每个决策树会得到一个自己的分类结果,决策树的分类结果中哪一个分类最多,那么随机森林就会把这个结果当做最终的结果。
随机森林的优缺点
随机森林的优点:
①训练可以高度并行化,可以有效运行在大数据集上。
②由于对决策树候选划分属性的采样,这样在样本特征维度较高的时候,仍然可以高效的训练模型。
③由于有了样本和属性的采样,最终训练出来的模型泛化能力强。
④可以输出各特征对预测目标的重要性。
⑤对部分特征的缺失容忍度高。
⑥袋外数据可用作验证集来检验模型的有效性,不用额外划分数据集。
随机森林的缺点:
①在某些噪声比较大的样本集上,随机森林容易陷入过拟合。
②取值划分比较多的特征容易对随机森林的决策产生更大的影响,从而影响拟合的模型效果。