一、决策树基本模型介绍
决策树基本思想
将一个集合中的数据,按照不同特征不断划分,形成一颗树;树的叶子节点表示样本所属的类别。如果是回归树,可以把叶子节点的值求平均作为样本的输出结果值。
优缺点
方便、模型简单、容易理解、和人类的认知比较相符合。
ID3 / C4.5 / CART 模型对比
| 模型 | 特征划分方法 | 计算方法 | 模型优缺点 |
|---|---|---|---|
| ID3 | 信息增益 | p*logp | 如果某个特征有很多值,但是对应的样本比较少,或者特征值类型比较少,会导致该特征的信息增益比较多,但泛化能力较弱 |
| C4.5 | 信息增益比率 | 采用信息增益不能完全解决该问题 | |
| CART | 基尼系数 | p*(1-p) |
二、Bagging vs Boosting
bagging
每个分类器见到不同的样本,样本权重相同,训练出不同效果的分类器,分类器相互独立,然后将这一系列的分类器组合起来使用
boosting
每个分类器见到相同的样本,但每个分类器样本权重不同,并且分类器之间相互依赖。核心问题: 1) 如何确定样本权重 2) 如何组合各个分类器
Aad Boosting
- 如何确定样本权重 根据上一个分类器的表现,加大分错样本的权重
- 如何组合各个分类器 降低错误率比较高的分类器的权重
bagging vs. boosting
- 训练样本 有放回抽样
- 是否能并行,分类器训练过程是否独立
- boosting 一般要比 bagging的效果好,
自测问题
- Ada boosting 模型如何解释 加法模型:
三、决策树 + Bagging = 随即森林
随机森 是 种bagging的 法,随机表现在随机选取样本集 + 随机选取特征 集; 随机森林的算法步骤如下:
- 对样本进 重采样,选择其中的n个样本;
- 选择k个特征中的a个,然后根据n各样本按照决策树的 法来构建tree;
- 重复上述过程m次,构建m棵决策树; 4. 按照bagging的 法来做预测;
- 优点:抗拟合能 较 ;能处 维度 较 的特征, 需要做特征选择;训练速度快,能并行,性能好;
- 缺点:对 数据,或者低维度数据,性能 太好;可能会产 重复的决策树; 能做超出训练数据集的预测,在噪声较小的数据上出现过拟合问题;
四、决策树 + Boosting = GBDT
GBDT vs Ada Boost
GBDT 是提升树的改进;提升树顾名思义,是基础分类器为决策树的 boosting 算法。根据 加法模型,提升树每次在学习一个新的分类器的时候,其实是在拟合一个残差。GBDT 将这个残差定义为损失函数的梯度。
XG Boost
xg boost模型详细介绍: www.cnblogs.com/mantch/p/11…
XG Boost VS GBDT
xgboost 是二阶倒数,利用泰勒展开式 gbdt 是拟合一阶倒数 为什么xgboost 要用二阶倒数?
树该怎么长
很有意思的一个事是,我们从头到尾了解了xgboost如何优化、如何计算,但树到底长啥样,我们却一直没看到。很显然,一棵树的生成是由一个节点一分为二,然后不断分裂最终形成为整棵树。那么树怎么分裂的就成为了接下来我们要探讨的关键。对于一个叶子节点如何进行分裂,XGBoost作者在其原始论文中给出了一种分裂节点的方法:枚举所有不同树结构的贪心法 不断地枚举不同树的结构,然后利用打分函数来寻找出一个最优结构的树,接着加入到模型中,不断重复这样的操作。这个寻找的过程使用的就是贪心算法。选择一个feature分裂,计算loss function最小值,然后再选一个feature分裂,又得到一个loss function最小值,你枚举完,找一个效果最好的,把树给分裂,就得到了小树苗。 总而言之,XGBoost使用了和CART回归树一样的想法,利用贪婪算法,遍历所有特征的所有特征划分点,不同的是使用的目标函数不一样。具体做法就是分裂后的目标函数值比单子叶子节点的目标函数的增益,同时为了限制树生长过深,还加了个阈值,只有当增益大于该阈值才进行分裂。从而继续分裂,形成一棵树,再形成一棵树,每次在上一次的预测基础上取最优进一步分裂/建树。
如何停止树的循环生成
凡是这种循环迭代的方式必定有停止条件,什么时候停止呢?简言之,设置树的最大深度、当样本权重和小于设定阈值时停止生长以防止过拟合。具体而言,则当引入的分裂带来的增益小于设定阀值的时候,我们可以忽略掉这个分裂,所以并不是每一次分裂loss function整体都会增加的,有点预剪枝的意思,阈值参数为(即正则项里叶子节点数T的系数); 当树达到最大深度时则停止建立决策树,设置一个超参数max_depth,避免树太深导致学习局部样本,从而过拟合; 样本权重和小于设定阈值时则停止建树。什么意思呢,即涉及到一个超参数-最小的样本权重和min_child_weight,和GBM的 min_child_leaf 参数类似,但不完全一样。大意就是一个叶子节点样本太少了,也终止同样是防止过拟合;
XGBoost与GBDT有什么不同
除了算法上与传统的GBDT有一些不同外,XGBoost还在工程实现上做了大量的优化。总的来说,两者之间的区别和联系可以总结成以下几个方面。
- GBDT是机器学习算法,XGBoost是该算法的工程实现。 在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模 型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。
- GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代 价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。
- 传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类 器,比如线性分类器。 - 传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机 森林相似的策略,支持对数据进行采样。 - 传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺 失值的处理策略。
为什么XGBoost要用泰勒展开,优势在哪里?
XGBoost使用了一阶和二阶偏导, 二阶导数有利于梯度下降的更快更准. 使用泰勒展开取得函数做自变量的二阶导数形式, 可以在不选定损失函数具体形式的情况下, 仅仅依靠输入数据的值就可以进行叶子分裂优化计算, 本质上也就把损失函数的选取和模型算法优化/参数选择分开了. 这种去耦合增加了XGBoost的适用性, 使得它按需选取损失函数, 可以用于分类, 也可以用于回归。
开启掘金成长之旅!这是我参与 「掘金日新计划 · 2 月更文挑战」的第 23 天,点击查看活动详情