目录

  • 1. 绪论
  • 2. 分位数回归
  • 3. 分位数回归损失函数
  • 4. (γ−1)(\gamma - 1)(γ−1)的放入
  • 5. 程序代码表达

1. 绪论

对于分位数回归损失函数,最近看到了两种不同的实现。这种实现和 Bing 上检索到的任何一种分位数损失函数表达形式都不一样。

import keras.backend as Kdef QR_error(y_true, y_pred, tau):dy = y_pred - y_truereturn K.mean((1.0 - tau) * K.relu(dy) + tau * K.relu(-dy), axis=-1)
def quantile_loss(q, y, y_p):e = y-y_preturn K.mean(K.maximum(q*e, (q-1)*e))

下面,对这两种形式和检索的损失函数对应分析。


2. 分位数回归

分位数回归是统计学和计量经济学中使用的一种回归分析。最小二乘方法估计的是预测变量的条件平均值,而分位数回归估计的是响应变量的条件中位数(或其他分位数)。分位数回归是线性回归的一种扩展,当线性回归的条件不满足时可以使用分位数回归。

关于什么是分位数回归以及分位数回归的推导,下面这些博客或多或少有介绍,但鲜有对损失函数的实现解析。

  • 分位数回归
  • 分位数回归(quantile regression)简介和代码实现
  • 分位数回归(Quantile Regression)
  • 如何简单明了地理解分位数回归?

在此,本文不再赘述分位数回归理论,重点讲解分位数回归损失函数的代码实现,以及它们的不同形式。


3. 分位数回归损失函数

分位数回归时,所使用的损失函数有这么几种表达形式:

  1. Lγ=∑i=yi<yip(γ−1)⋅∣yi−yip∣+∑i=yi≥yip(γ)⋅∣yi−yip∣L_\gamma=\sum_{i=y_i<y_i^p}(\gamma-1) \cdot\left|y_i-y_i^p\right|+\sum_{i=y_i \geq y_i^p}(\gamma) \cdot\left|y_i-y_i^p\right|Lγ​=∑i=yi​<yip​​(γ−1)⋅∣yi​−yip​∣+∑i=yi​≥yip​​(γ)⋅∣yi​−yip​∣
    来源于回归问题中5种常用损失函数。
  2. Lquantile =1N∑i=1NⅡy>f(x)(1−γ)∣y−f(x)∣+Ⅱy<f(x)γ∣y−f(x)∣L_{\text {quantile }}=\frac{1}{N} \sum_{i=1}^N Ⅱ_{y>f(x)}(1-\gamma)|y-f(x)|+Ⅱ_{y<f(x)} \gamma|y-f(x)|Lquantile ​=N1​∑i=1N​Ⅱy>f(x)​(1−γ)∣y−f(x)∣+Ⅱy<f(x)​γ∣y−f(x)∣
    来源于回归损失函数2 : HUber loss,Log Cosh Loss,以及 Quantile Loss和损失函数 Loss Function 之 分位数损失 Quantile Loss

式中,yiy_iyi​是真实值,ypy^pyp或者f(x)f(x)f(x)为预测值。两式子表示yyy全部取值的分位数损失。

但是,离散随机变量而言,我们经过推导,通过将y−yp{\displaystyle y-y^p}y−yp相对于yp{ y^p}yp的预期损失最小化,可以找到特定的分位数,来源于《QUANTILE REGRESSION》5-6页。可以发现,损失函数是如下形式的:
Lγ=(γ−1)N∑yi<yp(yi−yp)+γN∑yi≥yp(yi−yp)(1)L_\gamma=\frac{(\gamma-1)}{N} \sum_{y_i<y^p}\left(y_i-y^p\right)+\frac{\gamma}{N} \sum_{y_i \geq y^p}\left(y_i-y^p\right) \tag{1} Lγ​=N(γ−1)​yi​<yp∑​(yi​−yp)+Nγ​yi​≥yp∑​(yi​−yp)(1)

不是上述两式子中的任何一个,因为,他们并不包含绝对值。但是可以将(γ−1)(\gamma - 1)(γ−1)放入在求和号内。


4. (γ−1)(\gamma - 1)(γ−1)的放入

需要注意的是,式(1),两个求和号是满足条件的求和。

对于单个值,其分位数损失计算方式,按照上式执行。令yi−yip=δyy_i-y_i^p=\delta yyi​−yip​=δy,当δy<0\delta y<0δy<0
ργ(δy)=(γ−1)⋅δy=(1−γ)(−δy)=(1−γ)∣δy∣(2)\rho _{\gamma}(\delta y)=(\gamma-1)\cdot \delta y=(1-\gamma) (-\delta y)=(1-\gamma )|\delta y| \tag{2} ργ​(δy)=(γ−1)⋅δy=(1−γ)(−δy)=(1−γ)∣δy∣(2)

当δy>0\delta y>0δy>0:
ργ(δy)=γ⋅δy(3)\rho_{\gamma}(\delta y)= \gamma \cdot\delta y \tag{3} ργ​(δy)=γ⋅δy(3)
因此,对于NNN个随机变量,他们的总共的分位数损失为:
Lγ=1N[∑i=yi<yip(1−γ)⋅∣yi−yip∣+∑i=yi>yipγ⋅∣yi−yip∣](4)L_\gamma = \frac{1}{N} \left[\sum_{i=y_i < y_i^p} (1-\gamma) \cdot\left|y_i-y_i^p\right|+\sum_{i=y_i > y_i^p}\gamma \cdot\left|y_i-y_i^p\right|\right] \tag{4} Lγ​=N1​⎣⎡​i=yi​<yip​∑​(1−γ)⋅∣yi​−yip​∣+i=yi​>yip​∑​γ⋅∣yi​−yip​∣⎦⎤​(4)

5. 程序代码表达

为了最大化的利用 Python 中 Torch 或者 Keras 的函数库,方便自动求导,我们可以将条件求和变为取最大值函数
同样,我们令yi−yip=δyy_i-y_i^p=\delta yyi​−yip​=δy,上式用伪代码可以写为:

mean(max{tau*dy, (tau-1)*dy})

当δy<0\delta y<0δy<0时,是取得 (tau-1)*dy ,也就是ργ(δy)=(γ−1)⋅δy\rho_{\gamma}(\delta y)=(\gamma-1)\cdot \delta yργ​(δy)=(γ−1)⋅δy ;
当δy>0\delta y>0δy>0时,是取得 tau*dy ,也就是ργ(δy)=γ⋅δy\rho_{\gamma}(\delta y)= \gamma \cdot\delta yργ​(δy)=γ⋅δy ;
最后求和取均值,得到最终的LγL_\gammaLγ​。因此,利用程序,即可表达为:

def quantile_loss(q, y, y_p):e = y-y_preturn tf.keras.backend.mean(tf.keras.backend.maximum(q*e, (q-1)*e))

同理,下面的代码也是等效的:

import keras.backend as Kdef QR_error(y_true, y_pred, tau):dy = y_pred - y_truereturn K.mean((1.0 - tau) * K.relu(dy) + tau * K.relu(-dy), axis=-1)

不过,一定注意,dy的定义dy = y_pred - y_truee = y-y_p刚好相反,因此,代码中tau-1也要反过来。

分位数回归损失函数代码实现解析相关推荐

  1. 机器学习初学者都应该知道的5类回归损失函数

    来源: https://heartbeat.fritz.ai/5-regression-loss-functions-all-machine-learners-should-know-4fb140e9 ...

  2. 收藏 | 机器学习中常用的5种回归损失函数

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作分享,不代表本公众号立场,侵权联系删除 转载于:机器猫 AI博士笔记系列推荐 周志华<机器学习>手推 ...

  3. 基于分位数回归的动态CoVaR计算 案例与代码

    关注公众号卧新实验室,并回复关键数字获取本文帮助文档.例如:20003 原文链接:基于分位数回归的动态CoVaR模型计算与操作 报名已结束:CCtalk 实时互动教育平台-专业的知识分享与在线教育平台 ...

  4. 基于分位数回归的静态CoVaR计算 案例与代码

    关注公众号卧新实验室,并回复关键数字获取本文帮助文档.例如:20002 原文链接:https://bbs.pinggu.org/thread-7925441-1-1.html 一.静态CoVaR模型介 ...

  5. 怎么求中位数和分位数 概率密度函数_张晓峒分位数回归讲义解析.doc

    第15章 分位数回归模型 15.1 总体分位数位数 15.位数的估计 .3 分位数回归 .4 分位数回归模型的估计 .5 分位数回归模型的 15.6 分位数的计算分位数回归的 15.7 分位数回归的 ...

  6. 如何为模型选择合适的损失函数?所有ML学习者应该知道的5种回归损失函数

    作者 | Prince Grover 译者 | 张建军 整理 | 阿司匹林.Jane 出品 | AI科技大本营 [导读]没有一个损失函数可以适用于所有类型的数据.损失函数的选择取决于许多因素,包括是否 ...

  7. Sklearn 损失函数如何应用到_机器学习大牛最常用的5个回归损失函数,你知道几个?...

    "损失函数"是机器学习优化中至关重要的一部分.L1.L2损失函数相信大多数人都早已不陌生.那你了解Huber损失.Log-Cosh损失.以及常用于计算预测区间的分位数损失么?这些可 ...

  8. 【R】【课程笔记】07 分位数回归与VaR(ES)计算

    本文是课程<数据科学与金融计算>第7章的学习笔记,主要介绍计算VaR/ES风险测度的各种方法和极值理论等,用于知识点总结和代码练习,Q&A为问题及解决方案. 往期回顾: 博文 内容 ...

  9. fasterrcnn论文_FasterRCNN 损失函数到全局解析

    0 前言 Faster R-CNN是很多人进行目标检测领域学习的必经之路.本文将从实战的角度出发,对 Faster R-CNN 的结构.损失函数以及令人难以理解的 anchor 进行详细说明.本文将结 ...

最新文章

  1. 一起学设计模式 - 代理模式
  2. 吴恩达:人工智能寒冬不会到来,但我们太乐观了
  3. 【深度学习篇】--Windows 64下tensorflow-gpu安装到应用
  4. 易语言逐条读access数据_易语言对ACCESS数据库基础(适合新手)
  5. 弱口令的分析和爆破工具使用
  6. F5 LTM设备降级实战
  7. 用键盘全局钩子[Hook]监视多进程键盘操作
  8. JZOJ 4061. 【JSOI2015】字符串树
  9. Face++ 论文解读:一种新的行人重识别度量学习方法 | PaperDaily #20
  10. Android的debug.keystore拒绝访问导致的生成异常及解决方案
  11. QPushButton hover配置
  12. 练习-图书馆管理系统
  13. javaw java_java与javaw区别
  14. python程序设计基础董付国 pdf-Python程序设计基础与应用(高等教育规划教材)
  15. 红旗 Linux 5.0 正式版下载地址
  16. Python类型说明符、格式限定符(格式说明符)
  17. Redis3.0.0集群一键脚本 -by古斌
  18. 最有用的期货技术 — 无招胜有招
  19. 无法定位程序输入点_invalid_parameter_noinfo_noreturn于动态链接库 MSVCR100.dll上
  20. 这些算法可视化网站助你轻松学算法

热门文章

  1. Windows 中各种 dll 的导出功能
  2. 修改Windows MySQL数据库存储位置
  3. 移动网络技术--名词介绍
  4. 如何在90天内学会一门语言
  5. LNG储罐用什么材料保温?
  6. 7-2 删除字符串中指定字符 (10分)
  7. Android集成阿里百川(AndroidStudio 4.2.1+gradle 6.7.1+gradle tool 4.2.1)
  8. strongswan常用命令解析(二)
  9. 一次排队就餐带来的思考
  10. 一个人的旅行——最短路