损失函数与梯度提升树
来源:互联网 发布:手机淘宝悬浮红包设置 编辑:程序博客网 时间:2024/05/17 04:52
上一篇文章简单介绍了几种集成方法,以随机森林为代表的平均方法,以adaboost、提升树为代表的提升方法。本文继续提升树的讨论,采用梯度提升算法,分析更一般的损失函数下的分类、回归问题。首先介绍几种在机器学习算法中常见的损失函数,继而介绍GBDT算法。
1、 损失函数
1.1、 分类问题损失函数
在二分类中把
1.1.1、 0-1损失
表达式为:
或者
即只对误分类样本进行惩罚,类似有后列几种损失。
1.1.2、 指数损失
表达式:
Adaboost算法就是用的此种损失函数。在上一篇文章中有介绍。
1.1.3、 log损失
表达式:
在逻辑回归中用到的损失函数。
1.1.4、均方损失
表达式:
1.1.5、hinge损失
表达式:
在支持向量机中使用。
1.1.6、偏差损失函数
考虑K分类问题,假设在第k类的概率:
则多项式偏差:
在gbdt分类中默认使用此损失函数。
1.2、 回归问题损失函数
下面介绍三种回归问题中常见的的损失函数。
1.2.1、 均方损失
表达式:
1.2.2、绝对损失
表达式:
1.2.3、Huber 损失
表达式:
Huber损失相对于前两种损失更具有鲁棒性。
2、 GBDT算法
上篇文章已经介绍,当分类问题是指数损失,回归问题是均方损失时,用提升树算法很简单。当损失函数更为一般时,可以使用梯度提升的方法快速迭代,即为GBDT算法。在R中的包名为gbm,在python中的sklearn.ensemble目录下对应GradientBoostingRegressor和GradientBoostingClassifier。
2.1、 分类问题
GBDT在分类中的损失函数可选偏差损失和指数损失,默认是偏差损失,当选择指数损失时则还原为adaboost算法。前文已经介绍这两种损失,主要介绍偏差损失下K分类算法。
根据偏差损失:
则负梯度:
梯度提升树K分类算法
1. 初始化
2. for (m=1:M):
(a)计算:
(b)for (k=1:K):
i. 计算
ii. 对
iii. 计算:
iv. 更新:
3. 输出
说明:
2(a)得到第k类的概率,类似多项逻辑回归。
特别地当处理二分类问题时,只需生成一颗回归树。
2.2、 回归问题
当提升树处理损失函数是均方损失的回归问题时,每次迭代拟合当前的残差生成一颗回归树。更一般的情况,根据加法模型
因此,若每次新增的树在损失函数负梯度方向上,则能够令损失函数最速下降。
梯度提升树回归算法:
1. 初始化
2. for (m=1:M):
(a) for(i=1:N),计算
(b) 根据
(c)for (
(d)更新
3. 输出
说明:当损失函数为均方损失时,2(c)中
- 损失函数与梯度提升树
- 逻辑回归:损失函数与梯度下降
- 梯度下降,损失函数
- softmax 损失函数以及梯度推导计算
- 机器学习算法中的假设函数与损失函数以及梯度
- 模型训练-损失函数的来源-最大似然与梯度下降
- mllib之随机森林与梯度提升树
- 损失函数与风险函数
- 最优化基础:损失函数可视化、折页损失函数 & 梯度计算
- 多类 SVM 的损失函数及其梯度计算
- 损失函数梯度对比-均方差和交叉熵
- logstic回归损失函数及梯度下降公式推导
- 梯度提升树GBDT原理
- Spark MLLib 梯度提升树
- 梯度提升树GBDT原理
- 梯度提升树(GBDT)原理
- 梯度提升树GBDT原理
- 梯度提升树GBDT原理
- 数据结构实验之查找五:平方之哈希表
- spark 源码学习之打印线程堆栈
- 欢迎使用CSDN-markdown编辑器
- 贴片电阻分类、阻值、功率、封装、尺寸
- 第十六周--项目1-验证算法(6)堆排序
- 损失函数与梯度提升树
- Java - How to create new Entry (key, value)
- poj1149 PIGS
- Redis 学习笔记(二)
- android 反编译、反调试方法总结
- Googlel离线安装
- 二分查找与拉格朗日差值查询
- 一次性配置OpenCV的正确姿势
- JAVA经典算法50题