- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用训练 API 在 LightGBM 中运行二元分类,并希望停止在自定义指标上,同时仍跟踪一个或多个内置指标。不过,尚不清楚这是否可行。
在这里我们可以禁用默认的 binary_logloss
指标,只跟踪我们的自定义指标:
import lightgbm as lgb
def my_eval_metric(...):
...
d_train = lgb.Dataset(...)
d_validate = lgb.Dataset(...)
params = {
"objective": "binary",
"metric": "custom",
}
evals_result = {}
model = lgb.train(
params,
d_train,
valid_sets=[d_validate],
feval=my_eval_metric,
early_stopping_rounds=10,
evals_result=evals_result,
)
如果我们让 metric
成为默认值,我们也会跟踪 binary_logloss
,但我们会停止在 both 指标上,而不是仅仅在我们的指标上自定义指标:
params = {
"objective": "binary",
# "metric": "custom",
}
我们可以在 params
中设置 first_metric_only
,但现在我们将在 binary_logloss
上停止 only 显然,这是第一个指标:
params = {
"objective": "binary",
"first_metric_only": True,
}
其他可能有效但看起来很痛苦的事情:
binary_logloss
并将其作为自定义评估指标与我的其他自定义指标一起传递到列表中,并使用 first_metric_only
;但是,我似乎不必那样做。不起作用的东西:
feval=[my_eval_metric, 'binary_logloss']
在 lgb.train
调用中。提示一个字符串不可调用。metric:params
集中的 [my_eval_metric, 'binary_logloss']
。警告 Unknown parameter: my_eval_metric
,然后在训练开始时出现错误 ValueError: For early stopping, at least an dataset and eval metric is required for evaluation
。我是否遗漏了一些明显的东西,或者这是 LightGBM API 中的一个小漏洞?
这是在版本 3.2.1 上。在 3.0.0 版本中,似乎完全不可能在训练 API 中传递多个自定义评估指标。我不确定那里的 sklearn API。
最佳答案
如果您问“我如何根据自定义评估指标函数执行提前停止?”,可以通过将参数 metric
设置为字符串 “无”
。这将导致 LightGBM 跳过基于目标函数(binary_logloss
,在您的示例中)的默认评估指标,并且仅对您在 feval
.
下面的示例在 Python 3.8.8 上使用
lightgbm==3.2.1
和 scikit-learn==0.24.1
重现了此行为。
import lightgbm as lgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=42)
dtrain = lgb.Dataset(
data=X_train,
label=y_train
)
dvalid = lgb.Dataset(
data=X_test,
label=y_test,
reference=dtrain
)
def _constant_metric(dy_true, dy_pred):
"""An eval metric that always returns the same value"""
metric_name = 'constant_metric'
value = 0.708
is_higher_better = False
return metric_name, value, is_higher_better
evals_result = {}
model = lgb.train(
params={
"objective": "binary",
"metric": "None",
"num_iterations": 100,
"first_metric_only": True,
"verbose": 0,
"num_leaves": 8
},
train_set=dtrain,
valid_sets=[dvalid],
feval=_constant_metric,
early_stopping_rounds=5,
evals_result=evals_result,
)
您可以在日志中看到,我提供的自定义指标函数是针对验证集进行评估的,训练在 early_stopping_rounds
连续几轮后停止,没有任何改进。
[LightGBM] [Warning] Auto-choosing col-wise multi-threading, the overhead of testing was 0.000846 seconds.
You can set `force_col_wise=true` to remove the overhead.
[1] valid_0's constant_metric: 0.708
Training until validation scores don't improve for 5 rounds
[2] valid_0's constant_metric: 0.708
[3] valid_0's constant_metric: 0.708
[4] valid_0's constant_metric: 0.708
[5] valid_0's constant_metric: 0.708
[6] valid_0's constant_metric: 0.708
Early stopping, best iteration is:
[1] valid_0's constant_metric: 0.708
Evaluated only: constant_metric
如果您问 “我如何向 lgb.train()
提供内置指标和自定义评估函数的组合并评估所有指标,但仅使用自定义一个用于提前停止?”...那么是的,从 lightgbm
3.2.1 开始不支持。
关于python - 为 LightGBM 提供额外的自定义指标以实现提前停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69137780/
我在 Azure 中找不到几个 SQL 指标。任何人都可以帮助如何设置以下主题的指标。 1)产能利用率不足 2)池外的数据库数量 3)扩大规模 4)连接超时 提前致谢。 最佳答案 实际上,这些并不是
我要监控的应用程序提供了一个用于健康检查的 api 端点,它以 json 格式响应指标。例如: $ curl https://example.com/api/stats {"status":"suc
我正在考虑用于分析软件开发工作的软件指标。当我考虑在面向对象的软件中使用类似功能点的指标时,我遇到了一个有趣的挑战/问题。 考虑一个业务规则引擎。它是一种应用程序,由运行业务规则所需的组件组成,然后将
我要监控的应用程序提供了一个用于健康检查的 api 端点,它以 json 格式响应指标。例如: $ curl https://example.com/api/stats {"status":"suc
因此,我正在将旧的数据可视化转换为新平台,但我对他们的社区排序功能有点困惑。在原始代码中,作者似乎使用了带有余弦相似度计算器的凝聚聚类。我认为在 Javascript 中解决这个问题的最佳方法是使用
我不是专业程序员,但我正在尝试改变一些技术指标在名为 TradeStation 的金融图表包中的显示方式(与特定图表供应商无关)。 这就是问题所在:大多数指标都是围绕零点绘制的,有时它们会靠近零点摆动
我们存储了大量来 self 们服务的指标(大约 8000 万个事件)。我们必须根据数据生成报告。 我的问题比较笼统,哪些工具可以满足您的指标/报告需求?有什么推荐的吗? 我们使用 Apache 编写日
我们网站上的页面的 CLS 一直接近于零。这是有道理的,因为它们是服务器呈现的 HTML 页面,具有简单的静态布局。 最近我们添加了 content-visibility: auto 的使用,如下所示
我能想到几种方法来转这种类型的矩阵(数据框): dat = data.frame( x1 = rep(c('a', 'b'), 100), x2 = rep(c('x', 'y
我正在使用 codahale 指标(现在是 dropwizard 指标)来监控我系统中发生的一些“事件”。我正在使用 counters跟踪“事件”发生次数的指标。 我检查了记者为我的计数器指标打印的值
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 11 个月前关闭。 Improve this que
在不使用 Heapster 的情况下,有没有办法收集有关 Kubernetes 集群中节点的 CPU 或磁盘指标? Heapster 最初是如何收集这些指标的? 最佳答案 Kubernetes 监控在
对于二元分类问题,我有一个略微不平衡的数据集,正负比为 0.6。 我最近从这个答案中了解到了 auc 指标:https://stats.stackexchange.com/a/132832/12822
为了做一些参数调整,我喜欢用 Keras 循环一些训练函数。但是,我意识到在使用 tensorflow.keras.metrics.AUC() 时作为度量,对于每个训练循环,都会将一个整数添加到 au
我使用 Azure,现在我想在特定情况下添加短信通知。 当我使用基于日志的指标时,它效果很好,但我想针对特定异常创建通知。 下一个流程:抛出异常 => Azure 知道识别它 => Azure 发送有
我正在尝试访问给定cloudService的指标 我有以下代码: var metricsClient = new MetricsClient(new CertificateCloudCredentia
我正在尝试使用 R 和 xgboost 来研究我的模型。训练模型总体上效果很好,但对于插入符来说,度量存在一些问题。 我尝试为类列设置一个因子,但仍然没有结果。 我的数据 ID var1var2TA
我对编程还很陌生,有时它会用非常基本的概念来困扰我。我在我的 tableviewcontroller 中定义了一个 Activity 指示器作为 Outlet。 @IBOutlet weak var
我正在训练一个进行序列预测的模型。例如,给定某人之前写过的 10 个单词,我正在训练 LSTM 来预测他们将写的下一个单词。我有一个有时可以工作的模型,因此我想创建一个指标来跟踪模型通过词性标签预测下
我正在尝试使用 hystrix 来监控某个网络调用。但我尝试监控的所有指标始终为空。我做错了什么? 我通过实现一个(某种程度上)RESTful 接口(interface)来模拟网络调用,该接口(int
我是一名优秀的程序员,十分优秀!