H2O-3 早停参数 stopping_tolerance 深度解析:相对改进容差与收敛判定原理

发布时间:2026/10/15 2:48:05

H2O-3 早停参数 stopping_tolerance 深度解析:相对改进容差与收敛判定原理 机器学习深度学习AutoML大数据后端【免费下载链接】h2o-3H2O is an Open Source, Distributed, Fast Scalable Machine Learning Platform: Deep Learning, Gradient Boosting (GBM) XGBoost, Random Forest, Generalized Linear Modeling (GLM with Elastic Net), K-Means, PCA, Generalized Additive Models (GAM), RuleFit, Support Vector Machine (SVM), Stacked Ensembles, Automatic Machine Learning (AutoML), etc.项目地址https://gitcode.com/gh_mirrors/h2/h2o-3点击查看免费下载导读stopping_tolerance是 H2O-3 机器学习平台中控制早停early stopping收敛灵敏度的核心参数它定义了模型在停止训练之前必须达到的相对改进下限。本指南以官方参数文档h2o-docs/src/product/data-science/algo-params/stopping_tolerance.rst为主线结合 H2O-3 源码中早停判定引擎、参数校验逻辑与 AutoML 自适应默认值实现帮助你彻底理解该参数的判定公式、各算法默认值差异并掌握在 R 与 Python 客户端中的实战配置方法。参数概览适用算法与定位stopping_tolerance是一个训练早停控制参数可在以下算法中使用GBM梯度提升机DRF分布式随机森林Deep Learning深度学习GLM广义线性模型GAM广义加性模型AutoML自动机器学习XGBoostIsolation Forest孤立森林该参数同时也是一个超参数Hyperparameter: yes可以纳入网格搜索。不过需要注意由于它控制的是早停行为而非模型结构官方文档明确建议在网格搜索中通常保持固定值而不是作为网格维度进行遍历——改变模型结构类参数如树深度、学习率对效果的影响远比调整容差有意义。关于早停类参数的网格搜索规范可参考官方文档中 stopping_rounds 参数 与 stopping_metric 参数 的说明。工作原理移动平均与相对改进判定该参数的含义是模型在训练停止之前必须达到的改进容差tolerance。当模型在连续若干次评分scoring event中相对改进不再超过该容差时训练提前结束。官方文档给出了一个典型组合示例stopping_rounds3stopping_metricmisclassificationstopping_tolerance1e-3在此配置下系统会计算最近 4 个 stopping rounds 的简单移动平均simple moving average——其中第一个移动平均值作为参考值reference value其余 3 个移动平均值与它进行比较。模型将在满足以下条件时停止训练对于越小越好的指标如 misclassification最佳移动平均与参考移动平均的比值 ≥ 1-1e-3时停止对于越大越好的指标如 AUC最佳移动平均与参考移动平均的比值 ≤ 11e-3时停止。这些早停选项的核心价值在于提升性能通过限制实际构建的模型数量显著降低训练开销。源码级的判定实现H2O-3 的早停判定核心位于 h2o-core/src/main/java/hex/ScoreKeeper.java 的stopEarly()方法第 319-395 行。从源码可以看出完整的算法流程最少评分次数约束当k stopping_rounds时需要至少2k次评分事件len 2*k时直接返回false不触发早停——前k次用于建立参考窗口后k次用于检验改进。代码注释中给出了具体示例20 次评分、k3 时movingAvg[0]基于索引 14-16 的事件参考值movingAvg[1..3]分别基于 15-17、16-18、17-19 的事件。窗口移动平均计算对最近k1次评分事件每次取长度为k的滑动窗口计算算术平均。方向感知的比较逻辑ConvergenceStrategy枚举MORE_IS_BETTER/LESS_IS_BETTER/NON_DIRECTIONAL第 402-443 行分别对应不同指标的收敛判定指标方向判定公式源码第 410-428 行越大越好如 AUC、AUCPRratio maxInLastK / lastBeforeK当ratio 1 rel_improvement时停止越小越好如 misclassification、logloss、MSEratio minInLastK / lastBeforeK当ratio 1 - rel_improvement时停止其中rel_improvement就是用户传入的stopping_tolerance。同时源码还有两个保护性检查若移动平均中出现NaN或窗口内发生**零值穿越zero-crossing符号不一致**则暂不判定早停避免出现除以零或畸形的相对改进计算。ScoreKeeper.StoppingMetric枚举第 147-168 行为每个指标绑定收敛策略AUC/AUCPR/lift_top_group等绑定MORE_IS_BETTERdeviance/logloss/MSE/RMSE/MAE/RMSLE/misclassification/mean_per_class_error等绑定LESS_IS_BETTERanomaly_score绑定NON_DIRECTIONAL适用于 Isolation Forest。以 XGBoost 为例训练过程中正是通过 h2o-extensions/xgboost/src/main/java/hex/tree/xgboost/XGBoost.java 调用ScoreKeeper.stopEarly(..., _parms._stopping_tolerance, ...)来周期性检查收敛并决定是否提前终止迭代。默认值与各算法的差异通用默认值0.001对于除 AutoML 和 Isolation Forest 之外的所有支持算法stopping_tolerance默认值为0.001。该默认值定义于 h2o-core/src/main/java/hex/Model.javaprotected double defaultStoppingTolerance() { return 1e-3; }参数声明第 494 行即public double _stopping_tolerance defaultStoppingTolerance();。Isolation Forest0.01Isolation Forest 的默认容差为0.01。从源码看h2o-algos/src/main/java/hex/tree/isofor/IsolationForestModel.java 覆写了默认值Override protected double defaultStoppingTolerance() { return 0.01; // (inherited value 0.001 would be too low for the default criterion anomaly_score) }注释表明原因Isolation Forest 的默认早停指标是anomaly_score非方向性指标0.001 对它的收敛判定过于严格。AutoML基于数据集的自适应默认值AutoML 的行为比较特殊其默认值取决于训练数据规模与质量若数据集至少 100 万行默认值为0.001否则默认值由**数据集规模与非 NA 比率non-NA-rate**共同决定取值会更大。这个自适应逻辑在源码中有明确实现。h2o-core/src/main/java/hex/grid/HyperSpaceSearchCriteria.java 中提供了default_stopping_tolerance_for_frame()public static double default_stopping_tolerance_for_frame(Frame frame) { return Math.min(0.05, Math.max(0.001, 1/Math.sqrt((1 - frame.naFraction()) * frame.numRows()))); }即默认容差被限定在[0.001, 0.05]区间内取1 / sqrt(行数 × 非NA比率)。这与 Python/R 客户端文档中描述的 computed as 1/sqrt(nrows * non-NA-rate) 完全一致。其设计意图在源码注释中说明尤其对于小样本small N需要给出一个更宽松更大的容差否则早停会过于严苛、难以触发。在 h2o-automl/src/main/java/ai/h2o/automl/AutoML.java 中AutoML 构建流程会判断用户是否使用AUTO_STOPPING_TOLERANCE哨兵值若使用则调用set_default_stopping_tolerance_for_frame(refFrame)基于训练帧自动计算并记录事件日志若用户显式设置的值小于0.7 × defaultTolerance还会给出警告提示。Deep Learning 的例外源码细节从源码看Deep Learning 对默认容差的处理有所不同h2o-algos/src/main/java/hex/deeplearning/DeepLearningModel.java 中defaultStoppingTolerance()返回0同时其_stopping_rounds默认值为 5。这意味着在未显式设置stopping_tolerance时Deep Learning 的早停要求严格改进容差为 0。这与官方参数文档中通用默认 0.001的描述存在实现层面的差异实际使用 Deep Learning 时建议显式指定该参数以获得可预期的行为。参数校验与使用前提stopping_tolerance不是独立生效的它必须与stopping_rounds配合使用。H2O-3 在 h2o-core/src/main/java/hex/ModelBuilder.java 的参数校验阶段有明确约束if (_parms._stopping_tolerance 0) { error(_stopping_tolerance, Stopping tolerance must be 0.); } if (_parms._stopping_tolerance 1) { error(_stopping_tolerance, Stopping tolerance must be 1.); } if (_parms._stopping_rounds 0) { if (_parms._stopping_metric ! ScoreKeeper.StoppingMetric.AUTO) warn(_stopping_metric, Stopping metric is ignored for _stopping_rounds0.); if (_parms._stopping_tolerance ! _parms.defaultStoppingTolerance()) warn(_stopping_tolerance, Stopping tolerance is ignored for _stopping_rounds0.); } else if (_parms._stopping_rounds 0) { error(_stopping_rounds, Stopping rounds must be 0.); }归纳为以下三条使用前提取值范围stopping_tolerance必须满足0 value 1否则直接报错。必须启用stopping_rounds只有stopping_rounds 0时stopping_metric和stopping_tolerance才会生效若stopping_rounds 0这两个参数都会被忽略并产生警告。指标与问题类型匹配分类问题不能使用devianceGLM 除外回归问题不能使用仅限分类的指标如misclassification、mean_per_class_error若使用自定义指标custom/custom_increasing进行早停还必须同时定义custom_metric_func见 h2o-core/src/main/java/hex/ModelBuilder.java。此外h2o-core/src/main/java/water/api/schemas3/ModelParametersSchemaV3.java 中该参数的 REST API 定义也沿用了同一套语义长度 k 的简单移动平均在 kstopping_rounds 次评分事件内未按 stopping_tolerance 改进则停止。与相关参数的关系早停三件套中stopping_tolerance与另外两个参数协同工作参数作用关联文档stopping_metric决定用哪个指标评估收敛如 AUC、logloss、misclassification、deviance 等其越大越好/越小越好方向决定了容差比较公式stopping_metric 参数文档stopping_rounds决定观察多少个评分事件内的移动平均容差只有在stopping_rounds 0时才生效stopping_rounds 参数文档stopping_tolerance决定相对改进要达到多少才算有进步数值越小要求越严格、训练越久本文档三者共同定义了一个收敛判定在连续stopping_rounds个评分窗口内stopping_metric的相对改进未超过stopping_tolerance即停止。在 AutoML 中该参数同时作用于单个模型的训练与整个 AutoML 搜索流程的提前终止见 h2o-py/h2o/automl/_estimator.py 的参数说明R 端则映射到build_control$stopping_criteria$stopping_tolerance见 h2o-r/h2o-package/R/automl.R。完整实战示例R 与 Python以下示例继承自官方参数文档使用经典航空公司航班延误数据集allyears2k_headers.zip训练 GBM 分类模型演示stopping_tolerance与stopping_metric、stopping_rounds的配合使用。目标是根据航班特征预测IsDepDelayed航班是否延误。R 版本library(h2o) h2o.init() # import the airlines dataset: # This dataset is used to classify whether a flight will be delayed YES or not NO # original data can be found at http://www.transtats.bts.gov/ airlines - h2o.importFile(http://s3.amazonaws.com/h2o-public-test-data/smalldata/airlines/allyears2k_headers.zip) # convert columns to factors airlines[Year] - as.factor(airlines[Year]) airlines[Month] - as.factor(airlines[Month]) airlines[DayOfWeek] - as.factor(airlines[DayOfWeek]) airlines[Cancelled] - as.factor(airlines[Cancelled]) airlines[FlightNum] - as.factor(airlines[FlightNum]) # set the predictor names and the response column name predictors - c(Origin, Dest, Year, UniqueCarrier, DayOfWeek, Month, Distance, FlightNum) response - IsDepDelayed # split into train and validation airlines_splits - h2o.splitFrame(data airlines, ratios 0.8, seed 1234) train - airlines_splits[[1]] valid - airlines_splits[[2]] # try using the stopping_tolerance metric: # train your model, where you specify the stopping_metric, stopping_rounds, # and stopping_tolerance airlines_gbm - h2o.gbm(x predictors, y response, training_frame train, validation_frame valid, stopping_metric AUC, stopping_rounds 3, stopping_tolerance 1e-2, seed 1234) # print the auc for the validation data print(h2o.auc(airlines_gbm, valid TRUE))Python 版本import h2o from h2o.estimators.gbm import H2OGradientBoostingEstimator h2o.init() h2o.cluster().show_status() # import the airlines dataset: # This dataset is used to classify whether a flight will be delayed YES or not NO # original data can be found at http://www.transtats.bts.gov/ airlines h2o.import_file(https://s3.amazonaws.com/h2o-public-test-data/smalldata/airlines/allyears2k_headers.zip) # convert columns to factors airlines[Year] airlines[Year].asfactor() airlines[Month] airlines[Month].asfactor() airlines[DayOfWeek] airlines[DayOfWeek].asfactor() airlines[Cancelled] airlines[Cancelled].asfactor() airlines[FlightNum] airlines[FlightNum].asfactor() # set the predictor names and the response column name predictors [Origin, Dest, Year, UniqueCarrier, DayOfWeek, Month, Distance, FlightNum] response IsDepDelayed # split into train and validation sets train, valid airlines.split_frame(ratios [.8], seed 1234) # try using the stopping_tolerance metric: # train your model, where you specify the stopping_metric, stopping_rounds, # and stopping_tolerance # initialize the estimator then train the model airlines_gbm H2OGradientBoostingEstimator(stopping_metric auc, stopping_rounds 3, stopping_tolerance 1e-2, seed 1234) airlines_gbm.train(x predictors, y response, training_frame train, validation_frame valid) # print the auc for the validation data airlines_gbm.auc(validTrue)示例中stopping_tolerance 1e-2表示当验证集 AUC 的相对改进在连续 3 轮评分窗口内未超过 1% 时GBM 停止生长新树。Python 端该参数在各类估算器上均有标准属性接口例如 h2o-py/h2o/estimators/gbm.py 中的stopping_tolerancegetter/setterR 端对应的h2o.gbm()参数定义见 h2o-r/h2o-package/R/gbm.R。参数选择实操建议基于上述源码机制配置stopping_tolerance时可参考以下原则默认 0.001 适用于大多数中大规模数据集该值既能有效抑制过拟合模型不会在收敛平台期无限迭代又不至于过早终止训练。小数据集建议放宽容差可以参考 AutoML 的公式1/sqrt(行数 × 非NA比率)钳制在[0.001, 0.05]为小样本手动设置更大的容差否则早停几乎不可能触发等于白付额外训练时间。与stopping_rounds联动调整stopping_rounds决定观察窗口长度容差决定改进多少算数。窗口越长、容差越严训练越充分但耗时越长反之训练更快但可能过早收敛。网格搜索中保持固定由于该参数控制的是早停而非模型结构官方文档建议在网格搜索中将其固定把搜索预算留给树结构、正则化等真正影响模型容量的超参数。Isolation Forest 无需手动调小其默认 0.01 已针对anomaly_score指标校准过小的容差会让默认收敛判定形同虚设。赞分享机器学习深度学习AutoML大数据后端【免费下载链接】h2o-3H2O is an Open Source, Distributed, Fast Scalable Machine Learning Platform: Deep Learning, Gradient Boosting (GBM) XGBoost, Random Forest, Generalized Linear Modeling (GLM with Elastic Net), K-Means, PCA, Generalized Additive Models (GAM), RuleFit, Support Vector Machine (SVM), Stacked Ensembles, Automatic Machine Learning (AutoML), etc.项目地址https://gitcode.com/gh_mirrors/h2/h2o-3点击查看免费下载相关推荐H2O-3 CoxPH 收敛控制参数 lre_min 深度解析对数相对误差与迭代停止机制H2O 3 CoxPH 收敛控制参数 lre_min 深度解析对数相对误差与迭代停止机制 本文以 H2O 3 官方参数文档 lre_min.rst https机器学习深度学习AutoML大数据后端h2o-3 中 GLM/GAM 的 objective_epsilon 收敛判据原理、默认值启发式与源码级解析h2o 3 中 GLM/GAM 的 objective_epsilon 收敛判据原理、默认值启发式与源码级解析 objective_epsilon 是 h2o机器学习深度学习AutoML大数据后端H2O-3 中 score_tree_interval 参数详解让早停Early Stopping可控、可复现H2O 3 中 score_tree_interval 参数详解让早停Early Stopping可控、可复现 本文围绕 H2O 3 树模型的 score机器学习深度学习AutoML大数据后端上一篇抖音无水印批量下载与高效管理完整方案从内容备份到价值挖掘下一篇Windows 11 卡顿、启动慢用 Win11Debloat 一键完成 Windows 11 优化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/15 2:48:05

iOS生物识别检测:Touch ID与Face ID能力判断实战

1. 生物识别能力检测的底层逻辑与设计思路做iOS开发的朋友大概率都遇到过这种需求:App里要加一个指纹解锁或者面容解锁的入口,但产品经理不会管你设备到底支不支持,他只管让你把按钮画出来。这时候如果你不做任何判断,直接调用生物…

2026/10/15 2:48:05

千亿时序数据存储与写入攻坚:人大金仓KES时序引擎底层优化实战

工业互联网、电力采集场景下,时序数据呈现高基数、持续暴涨、长周期归档特征。传统数据库在千亿级时序数据场景面临存储成本高、历史数据迁移慢、时间范围查询低效等痛点。本文拆解KES时序引擎核心技术,从多算法自适应压缩、分布式批量高速写入、时序超表…

2026/10/15 4:03:08

家长怎么远程控制孩子手机 家长控制孩子手机的方法

家长怎么远程控制孩子手机?很多家长日常工作忙碌,无法时刻陪伴孩子,难以实时掌握孩子的手机使用情况,管控十分被动。家长怎么远程控制孩子手机呢?无需复杂设备和繁琐设置,无界趣连2.0适配亲子远程管控场景&…

2026/10/15 4:03:08

Android 计算器开发实战:从界面设计到核心逻辑

摘要:本文手把手带你从零构建一个基于 Android 的计算器应用。内容涵盖项目环境搭建与分层架构规划、界面布局与组件设计、核心状态变量管理、按钮事件监听、屏幕显示更新、输入合法性校验、用户提示机制,以及独立计算类的封装与联调测试。通过完整流程,你将掌握 Android 开…

2026/10/15 4:03:08

Java 项目实战: 交友项目 - 开工任务书

概述 我们开工前要准备 “继续往下写代码的资格”:把一个空目录变成能跑起来的多模块微服务工程,并在上面跑通手机号加验证码登录。 纲要 本章目标:从空工程到可运行的微服务骨架与登录闭环五个板块的任务书:认识项目 / 工程准…

2026/10/14 11:31:03

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/14 17:41:07

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/14 2:32:55

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/15 0:02:22

防关联浏览器哪个好?三款产品实测差异解析

新手做多店铺,最纠结的就是防关联浏览器选哪个。飞跨、网易、站斧这三款被问得最多,先给结论:要一体化省心、长期便宜,选站斧;要网易招牌和稳,选网易;预算紧做东南亚 Lazada,选飞跨。…

2026/10/15 0:02:22

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成 一、技术背景 大模型(LLM)在通用场景下表现强大,但当我们将 GPT-4 或 Qwen 直接用于生成影刀RPA操作指令和 XPath 定位时,准确率通常只有 40%-60%。原因…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑