中段这些课程是非常重要的:
或许我们可以想一个方式,
那么说,我有没有可没有可能,通过样本加权,或者是分类器加权的方式
通过这样子的
或许我们想一个办法,对分类器加上一个权值
这个权值怎么考虑呢?
我们可以通过损失函数
沿着它的梯度、(梯度是一阶导是吧),或者是加上二阶导,(海森矩阵)
如果使用一阶导,或是二阶导
就能得到GBDT,XGBOOST
然后,如果使用损失函数,ADBOOST,自适应提升
所以说呢今天要探索的事情呢,其实相当是对一些基本分类器的集成
但是这种集成,不是简单的像随机森林那样把它加起来
而是要对它加权的方式
举个例子
提升的想法是很有趣的
我们想一想,如果要做分类器或回归器的时候,
如果我要做随机森林的时候,理论
但是N个分类器是直接“少数服从多数”
但是100个分类器是相对独立的,
我们来想一下,如果前面已经得到了M-1棵决策树的时候,
我们能不能通过已有的样本的决策树的信息,对第M棵决策树的建立产生有益的影响呢?
比如说,我们得到若干棵决策树以后,真的只能通过小数服从多数这种简单的方式进行最后的预测吗?
我们可以对决策树加上权值吗?
wiki 百科上的解释:
Gradient boosting is a machine learning technique for regression and classificationproblems, which produces a prediction model in the form of an ensemble of weak prediction models, typically decision trees.
梯度提升是一种机器学习的技术,可以用于分类和回归;
它产生一种预测模型,它是一种把弱分类器集成在一起的方法,特别是决策树。
课件上的解释:
提升是一种机器学习技术,可以用于分类和回归;
它每一步产生一个弱预测模型(如决策树),并加权累加到总模型中;
如果每一步的弱预测模型生成都是依据损失函数的梯度方向,则称之为梯度提升(Gradient Boosting)
梯度提升算法首先给定一个目标损失函数,它的定义域是所有可行的弱函数集合(基函数);
提升算法通过迭代,每次选择一个负梯度方向上的基函数来逐渐逼近局部极小值。
给定不同的树,损失函数是不断发生变化的:
我们可以把损失函数看成是“自变量”是树的函数
我们把损失函数对树求偏导的话,沿的负梯度发生下降,不就可以让损失函数越变越小吗?
其实就是仿照着梯度下降法来做的。
损失函数是根本实际问题给的
跟提升本身没有关系
我们可能给定MSE,或者交叉熵
当我们有这个损失函数的时候,就来根据这个分类器本身求梯度,然后求负梯度
下降时的“步长”就当做分类器本身的权值
我们曾经在代码中,在第4次课,给出了一个代码,
当时叫做Bagging 。
nformal introduction[edit]
(This section follows the exposition of gradient boosting by Li.[6])
Like other boosting methods, gradient boosting combines weak "learners" into a single strong learner in an iterative fashion. It is easiest to explain in the least-squares regression setting, where the goal is to "teach" a model {\displaystyle F}转存失败重新上传取消 to predict values of the form {\displaystyle {\hat {y}}=F(x)}转存失败重新上传取消 by minimizing the mean squared error {\displaystyle 1/n\sum _{i}({\hat {y}}_{i}-y_{i})^{2}}转存失败重新上传取消, where {\displaystyle i}转存失败重新上传取消indexes over some training set of size {\displaystyle n}转存失败重新上传取消 of actual values of the output variable {\displaystyle y}转存失败重新上传取消.
At each stage {\displaystyle m}转存失败重新上传取消, {\displaystyle 1\leq m\leq M}转存失败重新上传取消, of gradient boosting, it may be assumed that there is some imperfect model {\displaystyle F_{m}}转存失败重新上传取消 (at the outset, a very weak model that just predicts the mean y in the training set could be used). The gradient boosting algorithm improves on {\displaystyle F_{m}}转存失败重新上传取消 by constructing a new model that adds an estimator h to provide a better model: {\displaystyle F_{m+1}(x)=F_{m}(x)+h(x)}转存失败重新上传取消. To find {\displaystyle h}转存失败重新上传取消, the gradient boosting solution starts with the observation that a perfect h would imply
{\displaystyle F_{m+1}(x)=F_{m}(x)+h(x)=y}转存失败重新上传取消
or, equivalently,
{\displaystyle h(x)=y-F_{m}(x)}转存失败重新上传取消.
Therefore, gradient boosting will fit h to the residual {\displaystyle y-F_{m}(x)}转存失败重新上传取消. As in other boosting variants, each {\displaystyle F_{m+1}}转存失败重新上传取消 attempts to correct the errors of its predecessor {\displaystyle F_{m}}转存失败重新上传取消.
随机森林是在样本上做文章
决策产生的模型一般都比较弱
每次都这么贪心
最终的结果不一定最好,但是应该是个还不错的结果
树就是一个函数
给一个Xi, 就能得到一个 y
大家可能不知道我在做什么,
L关于树T可以写成一个
f(x) = x-1
只要把T看成是一个变量就好了
另外,T本身是怎么成了函数了,
我样这么想,现在可能建立了一棵决策树,可能是ID3,C4.5,CART 等 等
那么当我们得到了一棵决策树的时候,为什么 说这个树看做函数呢?
我们这样想,这个
我们给了Xi 这么一个样本,
它可能落在左枝或者右枝
然后又落在左枝。。
这个Xi 最终落在某一个叶子上,
那么这个叶子总归会有一个预测值,这个是决策树本身的特点
这样的话,相当于Xi 这个样本,它最终就有一个估计值 Yi_hat
这个 Yi_hat 是怎么来的呢?
它其实就是把Xi 喂给了这棵树,这棵树就给它返回了一个yi_hat
那么我们就可以说,这个Xi经过了树的作用得到了一个yi_hat
这样这个树 不就可以看成一个函数吗,它加工的对象,或者说自变量,就是X, 因变量,就是最后的预测值
所以树在我们眼中就是函数,跟数学中的函数没有什么区别,只不过这个函数是非线性的
F(xi) 是当F(xi) 变化一点点时,损失函数的变化
所以把前边已经有的—— Fm-1(x) 是之前所有的基函数其实权值的加和
把损失函数在这些地方求偏导
这样一个东西呢,我们管叫做伪残差
如果这个L,取做 f(xi) -y(i) 的平方,再对所有样本求和,如下:
这个F(xi) - yi 真的就是残差
这样每一个样本都有一个伪残差
我们就去拟合一个伪残差,这种总是可做的嘛
就是有了X,有了R,我们现在要做一个决策树,去拟合它,
不管是离散还是连续的
(不管是回归还是分类)
我们再给定某一个学习率,那么说,我们不叫得到它的权值吗。
事实上,关于它的这个学习率,我们没提
比如在做梯度下降的时候,往往就会拍脑门,给一个0.01
然后呢,随着这个。。
比如最开始,可以给的学习诣0.1,然后经过1000次迭代,把它变成0.001
又经过1000次迭代,把它变成 。。。。
所以这个学习率,给的是比较自由的
但是其实这个伽MA,是可以正规地算出来的
可以查一下“自适应学习率”的计算方式
所以说,其实这里是有一个线性搜索的过程的。
就是,这里,我们可以根据某一个准确,折半也好,
我们可以形式化的说说,要不然大家还是觉得有点别扭
GBDT 仅仅使用一阶导
XGBOOST使用二阶导
考虑t-1 棵决策树,每一棵决策树都是有权值的
如下:
第一棵决策树,权值是阿尔法1
第二棵决策树,权值是阿尔法2
。。
第t-1棵决策树,权值是阿尔法t-1
那这样,对于某一个样本Xi ,
第一棵树的预测结果是T1(Xi)
第二棵树的预测结果是T2(Xi)
树不是还有权值嘛
把预测结果与权值相乘相加
换一下记号:
一共有M个样本
相当于我们现在就有了这样的M个数据
现在要算的是: