一、GBDT/GBRT
1. GBDT简介
GBDT是一个基于迭代累加的决策树算法,它通过构造一组弱的学习器(树),并把多颗决策树的结果累加起来作为最终的预测输出。
树模型也分为决策树和回归树
决策树常用来分类问题,回归树常用来预测问题。
1. 决策树常用于分类标签值,比如用户性别、网页是否是垃圾页面、用户是不是作弊;
2. 而回归树常用于预测真实数值,比如用户的年龄、用户点击的概率、网页相关程度等等。
3. 由于GBDT的核心在与累加所有树的结果作为最终结果,而分类结果对于预测分类并不是这么的容易叠加
(稍等后面会看到,其实并不是简单的叠加,而是每一步每一棵树拟合的残差和选择分裂点评价方式都是经过公式推导得到的)
4. 所以GBDT中的树都是回归树(其实回归树也能用来做分类的)。
5. 同样的我们经常会把RandomForest的思想引入到GBDT里面来
即每棵树建树的时候我们会对特征和样本同时进行采样,然后对采样的样本和特征进行建树。
好啦,既然每棵树拟合的值、预测值、分裂点选取都不是随便选取的,那么到底是如何选择的呢?我们先进入GBDT的公式推导吧
3. 优缺点
GBDT的优点当然很明显啦,它的非线性变换比较多,表达能力强,而且不需要做复杂的特征工程和特征变换。
GBDT的缺点也很明显,Boost是一个串行过程,不好并行化,而且计算复杂度高,同时不太适合高维洗漱特征。
4. 实现分析
5. 参数和模型调优
GBDT常用的参数有如下几个:
1. 树个数
2. 树深度
3. 缩放因子
4. 损失函数
5. 数据采样比
6. 特征采样比
二、Xgboost
xgboost是boosting Tree的一个很牛的实现,它在最近Kaggle比赛中大放异彩。它 有以下几个优良的特性:
1. 显示的把树模型复杂度作为正则项加到优化目标中。
2. 公式推导中用到了二阶导数,用了二阶泰勒展开。(GBDT用牛顿法貌似也是二阶信息)
3. 实现了分裂点寻找近似算法。
4. 利用了特征的稀疏性。
5. 数据事先排序并且以block形式存储,有利于并行计算。
6. 基于分布式通信框架rabit,可以运行在MPI和yarn上。(最新已经不基于rabit了)
7. 实现做了面向体系结构的优化,针对cache和内存做了性能优化。
在项目实测中使用发现,Xgboost的训练速度要远远快于传统的GBDT实现,10倍量级。
1.
公式推导
2. 实现分析:
3. 参数调优:
a. 初阶参数调优:
1). booster
2). objective
3). eta
4). gamma
5). min_child_weight
6). max_depth
7). colsample_bytree
8). subsample
9). num_round
10). save_period
作者:王丰
链接:https://www.zhihu.com/question/23194489/answer/25028661
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这个问题可以回答得很简单:
是否有监督(supervised),就看输入数据是否有标签(label)。输入数据有标签,则为有监督学习,没标签则为无监督学习。
但根据知乎惯例,答案还是要继续扩展的。
首先看什么是学习(learning)?
一个成语就可概括:举一反三。
此处以高考为例,高考的题目在上考场前我们未必做过,但在高中三年我们做过很多很多题目,懂解题方法
因此考场上面对陌生问题也可以算出答案。
机器学习的思路也类似:我们能不能利用一些训练数据(已经做过的题),使机器能够利用它们(解题方法)分析未知数据(高考的题目)?
最简单也最普遍的一类机器学习算法就是分类(classification)。
对于分类,输入的训练数据有特征(feature),有标签(label)。
所谓的学习,其本质就是找到特征和标签间的关系(mapping)。
这样当有特征而无标签的未知数据输入时,我们就可以通过已有的关系得到未知数据标签。
在上述的分类过程中,如果所有训练数据都有标签,则为有监督学习(supervised learning)。
如果数据没有标签,显然就是无监督学习(unsupervised learning)了,也即聚类(clustering)。
目前分类算法的效果还是不错的,但相对来讲,聚类算法就有些惨不忍睹了。
确实,无监督学习本身的特点使其难以得到如分类一样近乎完美的结果。
这也正如我们在高中做题,答案(标签)是非常重要的,
假设两个完全相同的人进入高中,一个正常学习,另一人做的所有题目都没有答案,那么想必第一个人高考会发挥更好,第二个人会发疯。
这时各位可能要问,既然分类如此之好,聚类如此之不靠谱,那为何我们还可以容忍聚类的存在?
因为在实际应用中,标签的获取常常需要极大的人工工作量,有时甚至非常困难。
例如在自然语言处理(NLP)中,Penn Chinese Treebank在2年里只完成了4000句话的标签……
这时有人可能会想,难道有监督学习和无监督学习就是非黑即白的关系吗?
有没有灰呢?Good idea。灰是存在的。
二者的中间带就是半监督学习(semi-supervised learning)。
对于半监督学习,其训练数据的一部分是有标签的,另一部分没有标签,
而没标签数据的数量常常极大于有标签数据数量(这也是符合现实情况的)。
隐藏在半监督学习下的基本规律在于:数据的分布必然不是完全随机的,通过一些有标签数据的局部特征,以及更多没标签数据的整体分布,就可以得到可以接受甚至是非常好的分类结果。(此处大量忽略细节)
因此,learning家族的整体构造是这样的:
有监督学习(分类,回归)
↕
半监督学习(分类,回归),transductive learning(分类,回归)
↕
半监督聚类(有标签数据的标签不是确定的,类似于:肯定不是xxx,很可能是yyy)
↕
无监督学习(聚类)