常见的树形模型(随机森林、GBDT、XGBoost),树形的基础是“决策树”。
- “决策树”特点:易理解、易构建、速度快
- 分类
- 分类决策树
输出的结果为具体类别,用于处理离散型变量 - 回归决策树
输出的结果为确定数值,用于处理连续型变量
- 分类决策树
- 决策树构建的算法
- 分类树:ID3(信息增益)、C4.5(信息增益比)
- 分类回归树:CART (基尼指数)
其中ID3是最基本的构建算法。
- 步骤:特征选择、决策树的生成、剪枝
1)Bagging + 决策树 = 随机森林(Random Forest)
2)AdaBoost + 决策树 = 提升树(Boosting Decision Tree)
3)Gradient Boosting + 决策树 = 梯度提升树(Gradient Boosting Decision Tree,GBDT)
模型集成与融合
bagging
(bootstrap aggregating): 多个模型投票/取平均值- 分类问题,取票数最多的类别;回归问题,取平均值
- 抽样训练方式:使用Boostraping方法随机抽取N个训练样本(bootstrap 样本),有放回地抽取(样本可能多次被抽中,可能一次没中);进行K轮,得到K个训练集
- 随机:样本随机、特征随机
GBDT中的树都是“回归树”
-核心:每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。
-
相比于一颗树的优势:传统一棵树容易过拟合,过度学习训练集的特征(训练精度高),过度学习的规律会导致在测试集上不使用(测试精度低),但测试精度(实际精度)是我们更看重的。
-
回归树在每个叶节点里的样本取平均,即得预测值。
-
优点
- 灵活处理各种类型的数据:连续、离散
- 在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的。
- 使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
- 预测阶段的计算速度快, 树与树之间可并行化计算。所有的树一旦建好,用它来预测时是并行的,最终的预测值就是所有树的预测值之和。
-
缺点
1.由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。
2.GBDT在高维稀疏的数据集上, 表现不如支持向量机或者神经网络。
3.GBDT在处理文本分类特征问题上, 相对其他模型的优势不如它在处理数值特征时明显。
4.训练过程需要串行训练, 只能在决策树内部采用一些局部并行的手段提高训练速度。
- 优点
- 正则化,因为“正则化提升”闻名,代价函数里面的正则项包含了两个部分:树的叶子节点树;每个叶子节点输出的score的L2的平方和。
- 并行处理:不是指tree的并行,而是值特征粒度的并行。(confuse?)
- 灵活性:可以自定义目标函数、评估函数
- 缺失值处理,对于特征的值有缺失样本,能自动学习其分裂方向
- 剪枝:从顶到底建立所有可能的子树,再反向进行剪枝
- 内置交叉验证,允许每一轮boosting迭代中使用交叉验证。
Appendix
机器学习算法(十四):决策树系列
机器学习算法(十五):GBDT
干货|横扫Kaggle的XGBoost原理与实战**
Python机器学习笔记:XgBoost算法
xgboost原理?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)