来源:机器学习算法那些事本文约1100字,建议阅读5分钟 本文深入浅出的总结了Hessian矩阵在XGboost算法中的两种应用,即权重分位点算法和样本权重和算法 。

前言


Hessian矩阵最常见的应用是牛顿法最优化算法,其主要思想是搜寻一阶导数为0的函数极值点,本文深入浅出的总结了Hessian矩阵在XGboost算法中的两种应用,即权重分位点算法和样本权重和算法 。

目录


  1. Hessian矩阵的定义

  2. 样本权重和算法

  3. 权重分位点算法

  4. 总结

1.Hessian矩阵的定义

Hessian矩阵(Hessian matrix或Hessian)是一个自变量为向量的实值函数的二阶导偏导数组成的方块矩阵,此实值函数如下:

自变量为向量:

因此,Hessian矩阵H(f),定义为:

2. 最小叶子节点样本权重和算法

官方文档对XGBoost算法参数最小叶子节点样本权重和 (min_child_weitht) 的定义:

minimum sum of instance weight (hessian) needed in a child. If the tree partition step results in a leaf node with the sum of instance weight less than min_child_weight, then the building process will give up further partitioning. In linear regression mode, this simply corresponds to minimum number of instances needed to be in each node. The larger, the more conservative the algorithm will be.

翻译:min_child_weight定义为最小叶子节点样本权重(hessian)和,如果树分裂步骤产生的叶子节点上所有样本权重和小于min_child_weight,就停止分裂 。在线性回归的模型中,最小样本个数反映了最小叶子节点样本权重和 。min_child_weight越大,模型越保守,即降低了模型的复杂度 ,避免过拟合 。

下面讨论树模型和线性模型用hessian表示节点样本权重的含义 。

还记得hessian矩阵的定义吗? hessian是函数值对变量的二阶导,xgboost算法中用损失函数对预测值的二阶导表示hessian,如下:

其中,L 表示损失函数,y和分别表示真实值和预测值 。

2.1 线性回归模型

若某一节点的样本数为n,其损失函数:

对(2.1)式求二阶导:

因此,线性回归模型中,节点的样本数表示了样本权重和 。

2.2 树模型

树模型中用Hessian表示样本权重,决定某一节点是否切分的条件是比较该节点的样本权重和与min_child_weight的大小,若大于,则切分;反之则不切分(假设其他条件满足切分)。

为了加深理解,本节用二分类逻辑回归举例:

二分类逻辑回归的损失函数:

(2.7)式表示节点所有样本的权重和,可以定性的画出(2.7)式与min_child_weight的关系:

由上图可知,样本数与样本权重成正相关的关系,因此树模型的样本权重和在一定程度上反映了样本数 。

由xgboost算法的性质可知:

(1)、当yi为1时,越大,损失函数越小,(2.7)式越接近于0 。

(2)、当yi为0时,越小,损失函数越小,(2.7)式越接近于0 。

因此,(2.7)式也可以表示某一节点的纯度(purity),若纯度大于 min_child_weight,那么可继续对该节点切分;纯度小于 min_child_weight,则不切分 。

3. 权重分位点算法

对损失函数的二阶导值进行排序,然后根据分位点进行切分,选择最佳切分点 。这里不展开了,具体算法请参考XGBoost切分点算法 。

4. 总结

XGBoost算法用损失函数的二阶导(Hessian)表示样本权重,这一思想在线性回归模型中反映了节点的样本个数,在树模型中反映了该节点的纯度 。

参考:
https://stats.stackexchange.com/questions/317073/explanation-of-min-child-weight-in-xgboost-algorithm#

编辑:于腾凯

Hessian矩阵在XGBoost算法的应用小结相关推荐

  1. 关于Hessian矩阵的图像增强

    文章目录 1. 数字图像处理之尺度空间理论 2. 基于尺度理论的Hessian简化算法 3. 基于Hessian矩阵的图像增强 本文是关于图像增强方面的知识. 关于Retinex图像增强, [请点击] ...

  2. Jacobin和Hessian矩阵

    参考  Jacobin和Hessian矩阵 - 云+社区 - 腾讯云 有时我们需要计算输入和输出都为向量和函数的所有偏导数.包含所有这样的偏导数的矩阵被称为Jacobian矩阵.具体来说,如果我们有一 ...

  3. 机器学习中的数学——Jacobian矩阵和Hessian矩阵

    分类目录:<机器学习中的数学>总目录 有时我们需要计算输入和输出都为向量的函数的所有偏导数.包含所有这样的偏导数的矩阵被称为Jacobian矩阵.具体来说,如果我们有一个函数f:Rm→Rn ...

  4. Steger算法(Line_Gauss)-光条中心线提取(基于Hessian矩阵)

    Steger算法(Line_Gauss)-光条中心线提取(基于Hessian矩阵) 算法背景介绍 Hessian 矩阵与泰勒多项式 关于求t 导数与中心点.亚像素点 高斯函数作用 文献 算法背景介绍 ...

  5. 眼底图像血管增强与分割--(5)基于Hessian矩阵的Frangi滤波算法

    在最优化里面提到过的hessian矩阵(http://blog.csdn.net/piaoxuezhong/article/details/60135153),本篇讲的方法主要是基于Hessian矩阵 ...

  6. Datawhale集成学习笔记:XGBOOST算法

    引用:Datawhale XGBoost算法 XGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进,被广泛应用在Kaggle竞赛及其他许多机器学 ...

  7. xgboost算法_详解xgboost算法的样本不平衡问题

    XGBoost官方文档对参数scale_pos_weight的定义: 翻译: 调节正负样本权重的平衡 ,常用来处理不平衡的正负样本数据 . 典型值算法: scale_pos_weight = 负样本总 ...

  8. Jacobian矩阵和Hessian矩阵的理解

    深度学习中梯度向量的计算,Jacobian矩阵和Hessian矩阵是基础的知识点. 求微分其实就是线性化,导数其实就是线性空间之间的线性变换,Jaocibian矩阵本质上就是导数. 比如,映射在处的导 ...

  9. Python机器学习笔记:XgBoost算法(亲测)

    前言 1,Xgboost简介 Xgboost是Boosting算法的其中一种,Boosting算法的思想是将许多弱分类器集成在一起,形成一个强分类器.因为Xgboost是一种提升树模型,所以它是将许多 ...

最新文章

  1. python打开json文件变为字典_Python json读写方式和字典相互转化
  2. python下载安装教程3.8.1-Linux安装Python 3.8.1
  3. OO第四单元博客作业
  4. c# opencv 轮廓检测_C#中OpenCVSharp实现轮廓检测
  5. java8新特性(6)— 日期与时间
  6. CSS 实现必填项前/后添加红色星号
  7. java erlang 游戏_游戏中最近可达点(用erlang写一个简单算法)
  8. npm run dev报错_React + TypeScript 从零开发Popup组件并发布到 npm
  9. PostgreSQL的pg_hba.conf文件讲解
  10. 埃文科技教你如何验证IP地址定位的准确率
  11. 【PMP】PMBOK 笔记 第11章 项目风险管理
  12. 信安从业者认证一览【建议收藏】
  13. LabVIEW与西门子1200,1500系列Sanp7协议通讯案例+QMH标准框架编写,非常实用,长期测试通讯无误。
  14. C/C++笔试题(很多)
  15. linux 下vim中关于删除某段,某行,或全部删除的命令
  16. 5种RS485切换方向的方法及优劣势分析
  17. char byte java_java byte与char互转原理-转 | 学步园
  18. TheFourthJavaText
  19. Centos下数据写入MySQL数据库汉字是????
  20. c mvc mysql_c mvc 连接数据库

热门文章

  1. java 开发工具_Java开发工具和环境,你了解多少?
  2. Oracle: 三、Oracle的隐藏事务与视图的创建
  3. sosoApi 环境搭建
  4. 设计模式系列8--策略模式
  5. OpenStack平台功能性测试工具Tempest安装
  6. Swift语言指南(十)--字符串与字符
  7. C语言运算符优先级-----从没像现在这样深刻体会
  8. 想写点什么留下点念想
  9. 用Python解“计算圆周率”题
  10. python主辅线程_python主线程捕获子线程的方法