DBDT 基于不同损失函数的算法推导细节
来源:互联网 发布:python网络编程 amazon 编辑:程序博客网 时间:2024/05/01 12:14
Freidman提出了梯度提升算法,该方法是利用最速下降法的近似方法,其关键是利用损失函数的负梯度在当前模型的值
作为回归问题算法中的残差的近似值,拟合一个回归模型。
其算法流程如下:
1.
2. For
3.
4.
5.
6.
7. endFor
endAlgorighm
其中
负梯度只是表示下降的方向,但是下降多少没有确定,5中
回归树
当我们的基本分类器是一个包含J个节点的回归树时,回归树模型可以表示为
其中
利用回归树模型,算法流程6中的公式可以被替换为:
其中
有了下降的方向,我们还需要最好的步长,缩放因子
从上面可以看出,我们是先求的
另
通过优化如下公式来获取最优的系数
由于回归树产生的叶子节点各个区域之间是不相交的,且所有的样本最终都会属于某个叶子节点,所以公式11可以表示为:
给定当前
综上,用回归树作为基本分类器的梯度提升算法流程可以如下表示:
1.
2. For
3.
4.
5.
6.
7. endFor
endAlgorighm
其中3是计算残差(利用损失函数的负梯度在当前模型的值作为残差的近似值),4是拟合一颗含有J个叶子节点的回归树,5是估计回归树叶子节点的值
下面我们看一下二元分类、多元分类、回归中残差的计算、叶子节点值的估计。
Two-class logistic regression and classification
我们用negative binomial log-likehood作为我们的损失函数:
其中
公式13是logit函数,log odds
如上公式是Freidman的论文中使用的公式,我认为使用在逻辑回归中常见的
计算残差:
叶子节点值的估计:
可以通过一步Newton-Raphson来近似公式15,估计结果为:
最终得到的
有了概率之后,我们接下来就可以利用概率进行分类
Multi-class logistic regression and classification
我们使用multi-class log-loss作为损失函数:
其中使用softmax来计算概率:
从公式17可以得出,对于多分类问题,我们需要为每个类别创建一颗回归树
计算残差:
叶子节点值的估计:
可以通过一步Newton-Raphson来近似公式19,估计结果为:
Regression
我们使用Least-squares作为损失函数:
计算残差:
叶子节点值的估计:
容易得出以下结果:
回归树的创建
拟合残数是一个回归问题,所以在分割样本时,我们不会采用基尼指数(Gini)、信息增益(IG)等用于分类的标准。
我们可以选用MSE(mean square error impurity criterion)作为分割样本的标准。
也可是采用Friedman在论文中的the least-squares improvement criterion,公式如下:
其中
本文是针对具体的损失函数进行的相关推导,泛化能力差,大家可以参考xgboost作者的这篇文章,作者进行了更加一般的推导,这一个抽象的形式对于实现机器学习工具也是非常有帮助的。
引用:
Greedy Function Approximation: A Gradient Boosting Machine
- DBDT 基于不同损失函数的算法推导细节
- Logistic的损失函数的推导.
- 关于softmax损失函数的推导
- 斯坦福大学损失函数推导
- softmax 损失函数推导
- 损失函数J的最小二乘思路推导
- SVR(二次损失函数)公式推导
- softmax 损失函数以及梯度推导计算
- 手推SVM(三)-软间隔和损失函数的推导
- 水平集函数演化方程的推导细节
- 交叉熵代价函数(损失函数)及其求导推导
- 交叉熵代价函数(损失函数)及其求导推导
- 交叉熵代价函数(损失函数)及其求导推导
- 交叉熵代价函数(损失函数)及其求导推导
- 交叉熵代价函数(损失函数)及其求导推导
- EM算法似然函数的推导
- 分类算法中的损失函数
- caffe的损失函数
- 博客访问破万纪念
- TabLayout+ViewPager的基本使用
- Httpurl网络获取数据
- 实验3.5 十进制转换
- 从零开始实现线性判别分析(LDA)算法(多类情形)
- DBDT 基于不同损失函数的算法推导细节
- swift方法实现字符串的大小写转换
- Sap BussinessObjects Design Studio-infoChart
- 高手详解SQL性能优化十条经验
- Volume-Docker存储(一)
- JPA-Java Persistence API
- Spring中ApplicationContext和beanfactory区别
- 进程
- 异常捕获的简单了解