不能求二阶导的metrics,不是好的objective?!

请添加图片描述

请添加图片描述接上一篇。

今天我们要分析 MAPE 这个函数在论文中的使用。以此为契机,适当深入一点机器学习的原理,讲以下两个知识点:

1. 损失函数和度量函数
2. XGBoost模型,因子数据是否要标准化

损失函数与度量函数

在机器学习中,有两类重要的函数,一类是目标函数(objective function),又称损失函数(loss function);一类是度量函数(metrics)

75%

损失函数用于模型训练。在训练过程中,通过梯度下降等方法,使得损失函数的值不断减小,直到无法继续下降为止,模型就训练完成。

训练完成之后的模型,将在test数据集上进行测试,并将预测的结果与真实值进行对比。为了将这个对比过程数值化,我们就引入了度量函数(metrics)

在sklearn中,提供了大量的损失函数和度量函数。下图列举了部分Sklearn提供的损失函数和度量函数:

可以看出,度量函数的个数远多于损失函数,这是为什么呢?

在论文中,论文作者并没有披露他通过xgboost训练的具体过程,只是说直接使用了xgboost的database,这个表述有点奇怪,我们可以理解为在参数上使用了XGBoost的默认值好了。但是他重点提到了使用MAPE,从过程来看,是在把MAPE当成度量函数进行事后评估。

在XGBoost中,如果没有特别指定目标函数,那么默认会使用带正则惩罚的RMSE(rooted mean square error)函数。RMSE也可以作为度量函数,在论文中,作者没有使用RMSE作为度量函数,而是选择了MAPE(mean absolute percentage error),原因何在?如果MAPE在这个场景下比RMSE更好,又为何不在训练中使用MAPE?

看上去无论目标函数也好,度量函数也好,都要使得预测值与真实值越接近越好。既然都有这个特性,为什么还需要区分这两类函数呢?

要回答这些问题,就要了解XGBoost的训练原理,核心是:它是如何求梯度下降的。

XGBoost:二阶泰勒展开

XGBoost是一种提升(Boosting)算法,它通过多个弱学习器叠加,构成一个强学习器。每次迭代时,新的树会修正现有模型的残差,即预测值与真实值之间的差异。这个差异的大小,就由目标函数来计算。

在XGBoost中,多个弱学习器的叠加采用了加法模型,即最终的预测是所有弱学习器输出的加权和。这种模型允许我们使用泰勒展开来近似损失函数,从而进行高效的优化。

XGBoost对目标函数的优化是通过泰勒二阶展开,再求二阶导来实现的。使用二阶导数,XGBoost可以实现更快速的收敛,因为它不仅考虑了梯度的方向,还考虑了损失函数的形状。

f(x)≈f(a)+f′(a)(x−a)+f′′(a)2!(x−a)2 f(x) \approx f(a) + f'(a)(x-a) + \frac{f''(a)}{2!}(x-a)^2 f(x)f(a)+f(a)(xa)+2!

<think>首先,用户的问题是:“标准接口(如Prometheus的/metrics) 是什么?”我需要用中文回答这个问题。 关键点是用户提到的Prometheus的/metrics接口。Prometheus是一个监控工具,它的/metrics端点是一个用于暴露监控数据的标准接口。具体来说,它遵循OpenMetrics格式,用于提供度量数据的HTTP端点。 标准接口指的是标准化通用的接口,以便于不同的系统集成。在Prometheus的上下文中,/metrics接口允许Prometheus服务器定期抓取目标服务的度量数据。 我的回答应该简洁解释这个接口是什么: - 定义:/metrics是一个HTTP端点,用于暴露服务的度量数据。 - 用途:在Prometheus监控系统中,应用程序通过暴露/metrics接口来提供监控指标。 - 格式:数据通常以文本格式(如Prometheus格式或OpenMetrics)呈现。 回答后,我必须提出3-5个相关问题。问题必须以“§§相关问题§§”开头,后跟数字列表(1. 2. 3. ...),每个问题用数字加点格式。不能换行分散,所以要在一行中输出所有相关内容。 输出格式: 1. 先用中文回答问题。 2. 然后输出“§§相关问题§§”,单独一行。 3. 接着列出3-5个相关问题,每个问题以数字点开头。 相关问题必须基于用户的问题我的回答。用户的问题是“标准接口(如Prometheus的/metrics)是什么?”,所以我应该提出相关的问题,比如: - 其他类似接口(如OpenMetrics)。 - 如何实现/metrics接口。 - Prometheus的相关概念。 - 监控系统中的标准接口。 列出3-5个相关问题: 1. Prometheus的/metrics接口如何工作? 2. 什么是OpenMetrics格式? 3. 如何在应用程序中实现/metrics接口? 4. 除了Prometheus,还有哪些系统使用标准接口? 确保问题有用且相关。 最终输出结构: - 回答部分。 - 然后“§§相关问题§§” - 然后1. ... 2. ... 3. ... 用中文输出。 草拟回答: 回答:标准接口如Prometheus的/metrics是一个HTTP端点,用于暴露服务的度量数据。在Prometheus监控系统中,应用程序通过这个接口提供监控指标,数据格式通常为Prometheus或OpenMetrics格式,便于Prometheus服务器抓取存储。 然后: §§相关问题§§ 1. Prometheus是如何抓取/metrics接口的数据的? 2. OpenMetrics格式与Prometheus格式有什么区别? 3. 如何在Python应用程序中实现/metrics接口? 4. 除了/metrics,还有哪些常见的监控接口标准? 5. 标准监控接口在微服务架构中的重要性是什么? 我需要3-5个,所以我选4个或5个。示例中是3个,但我可以灵活处理。 确保所有内容符合规则。 </think>标准接口如Prometheus的/metrics是一个HTTP端点,用于暴露应用程序的监控度量数据。它遵循标准化的格式(如Prometheus自身的文本格式或OpenMetrics),允许监控系统(如Prometheus)定期抓取分析服务的性能指标,例如CPU使用率、请延迟等。这种接口简化了监控集成,确保数据的一致性可读性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量化风云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值