资讯动态

H2O 中 sample_rate 行采样率参数详解:GBM、DRF、XGBoost 与 Isolation Forest 的默认值、源码校验与调参实战

发布时间:2026/10/16 22:59:24 来源:尧图企业网站定制
机器学习深度学习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点击查看免费下载sample_rate是 H2O 树类算法GBM、DRF、XGBoost、Isolation Forest、Uplift DRF中控制每棵树行行维度即样本无放回采样率的核心超参数取值范围为 0.0 到 1.0。本文基于 H2O 官方算法参数文档sample_rate.rst结合开源仓库中的 schema 定义、参数校验与采样执行代码系统讲解该参数在各算法中的默认值差异、与sample_rate_per_class/col_sample_rate的互斥与配合关系并给出可直接运行的 R 与 Python 完整示例及网格搜索调参方案帮助你在实际建模中合理设置行采样以提升泛化能力。一、参数定义与适用范围sample_rate的官方定义见 sample_rate.rst可用算法GBM、DRF、XGBoost、Isolation Forest、Uplift DRF属性超参数Hyperparameter: yes即可以参与网格搜索grid search含义指定行x-axis采样率无放回抽样without replacement取值范围0.0 到 1.0作用行采样与列采样col_sample_rate都可以提高模型的泛化能力降低验证集与测试集误差。对于大型数据集两个参数的经验最优值通常在 0.70.8 之间即对 70%80% 的数据采样因为更高的采样率一般会提升训练精度从而存在与泛化之间的权衡。各算法中的默认值文档明确指出不同算法的默认值不同这一点在源码中可以得到印证算法默认sample_rate源码依据GBM1.0GBMModel.java 中_sample_rate 1.0XGBoost1官方文档说明参数别名subsampleDRF0.6320000291官方文档说明与 OOB 理论的1 - 1/e相关Isolation Forest-1表示禁用改用sample_sizeIsolationForestV3.java 参数帮助文本在 GBM 的 Python 客户端中也可以看到相同的默认值gbm.py 构造函数签名为def __init__(self, ... sample_rate1.0, # type: float sample_rate_per_classNone, # type: Optional[List[float]] col_sample_rate1.0, # type: float ...而在 GBM 的 REST API schema 中该参数被声明为可网格搜索的超参数GBMV3.javaAPI(help Row sample rate per tree (from 0.0 to 1.0), gridable true) public double sample_rate; API(helpColumn sample rate (from 0.0 to 1.0), level API.Level.critical, gridable true) public double col_sample_rate;需要注意措辞上的区别GBM 中它是“每棵树的行采样率”Row sample rate per tree——对每棵树的训练样本进行一次无放回采样DRF 中采样率还直接关联到袋外out-of-bag估计。二、源码级机制校验、告警与采样执行1. 取值范围与互斥校验SharedTree 基类GBM、DRF、Uplift DRF 等树算法共享SharedTree的参数校验逻辑。在 SharedTree.java 中可以看到如下关键校验if (!(0.0 _parms._sample_rate _parms._sample_rate 1.0)) error(_sample_rate, sample_rate should be in interval ]0,1] but it is _parms._sample_rate .); if (_parms._sample_rate_per_class ! null) { warn(_sample_rate, _sample_rate is ignored if _sample_rate_per_class is specified.); if (_parms._sample_rate_per_class.length ! nclasses()) error(_sample_rate_per_class, _sample_rate_per_class must have nclasses() values (one per class).); for (int i0;i_parms._sample_rate_per_class.length;i) { if (!(0.0 _parms._sample_rate_per_class[i] _parms._sample_rate_per_class[i] 1.0)) error(_sample_rate_per_class, sample_rate_per_class for class response().domain()[i] should be in interval ]0,1] but it is _parms._sample_rate_per_class[i] .);由此可以确认文档中两条规则的实现细节合法区间是 (0, 1]左开右闭即sample_rate不能为 0只能取到 1若指定了sample_rate_per_classsample_rate会被忽略代码中直接warn后不再使用并且每个类别的采样率也必须满足 (0, 1]。这正是文档中 “Note: Ifsample_rate_per_classis specified, thensample_ratewill be ignored” 的源码依据。2. 每棵树如何执行采样在 GBM.java 的训练循环中每构建一棵树之前都会调用Sample分布式任务ss[k] new Sample(ktrees[k], _parms._sample_rate, _parms._sample_rate_per_class) .dfork(null, new Frame(vec_nids(_train, k), _response), _parms._build_tree_one_node);_parms._sample_rate被传入Sample任务按树编号ktrees[k]作为随机种子的一部分生成无放回行索引。DRF 中是相同的模式DRF.javaif (ktrees[k] ! null) ss[k] new Sample(ktrees[k], _parms._sample_rate, _parms._sample_rate_per_class) .dfork(null, new Frame(vec_nids(_train,k), vec_resp(_train)), _parms._build_tree_one_node);而 Uplift DRF 的 UpliftDRF.java 也以相同方式将_parms._sample_rate与_parms._sample_rate_per_class传给Sample。这说明“每棵树独立采样一行子集”是这几个算法统一的底层实现。3. DRF / Uplift DRF 的 OOB 告警DRF 与 Uplift DRF 依赖袋外out-of-bag样本来估计训练数据上的误差。当sample_rate为 1 且没有验证集/交叉验证时不存在 OOB 数据源码会显式告警DRF.javaif (_parms._sample_rate 1f _valid null _parms._nfolds 0) warn(_sample_rate, Sample rate is 100% and no validation dataset and no cross-validation. There are no out-of-bag data to compute error estimates on the training data!);Uplift DRF 有类似告警UpliftDRF.java。这解释了为什么 DRF 的默认值是约 0.632 而不是 1只有采样率低于 1每棵树才有一部分行从未被采样、可以构成 OOB 估计。如果你显式把 DRF 的sample_rate设为 1应记得提供验证集或交叉验证否则训练指标无法评估。4. XGBoost 中的别名在 XGBoostV3.java 中sample_rate与 XGBoost 原生参数subsample互为别名sample_rate, subsample, ... public double sample_rate; API(help (same as sample_rate) Row sample rate per tree (from 0.0 to 1.0), gridable true, level API.Level.expert)因此 XGBoost 中该参数同样是“每棵树的行采样率”取值 0.0 到 1.0文档所述默认值为 1。5. Isolation Forest 的特殊语义Isolation Forest 的sample_rate语义与其他树算法略有不同IsolationForestV3.javaAPI(help Number of randomly sampled observations used to train each Isolation Forest tree. Only one of parameters sample_size and sample_rate should be defined. If sample_rate is defined, sample_size will be ignored., gridable true) // sample_size API(help Rate of randomly sampled observations used to train each Isolation Forest tree. Needs to be in range from 0.0 to 1.0. If set to -1, sample_rate is disabled and sample_size will be used instead., gridable true) public double sample_rate;即Isolation Forest 中sample_rate与sample_size二选一若sample_rate设为 -1则禁用行采样率而改用sample_size。使用时要注意这一例外。三、与 sample_rate_per_class 的关系面向类别不平衡的分层采样对于高度不平衡的分类数据集基于响应类别成员身份的分层行采样stratified row sampling有助于提升预测精度。它由sample_rate_per_class一个数组按响应类别的字典序每类一个比率配置。文档中明确如果指定了sample_rate_per_class则sample_rate会被忽略——这一点在SharedTree的校验代码中得到直接印证见上节warn(_sample_rate, ...)。配合关系总结sample_rate全局的行采样率简单、对所有类统一sample_rate_per_class每个类别独立的行采样率适用于类别不平衡场景指定后sample_rate失效col_sample_rate列特征维度的采样率可与行采样同时生效二者叠加进一步降低方差详见 col_sample_rate.rstsample_rate_per_class的详细说明见 sample_rate_per_class.rst。四、调参建议0.70.8 的经验区间文档给出的实用建议是对于大型数据集sample_rate与col_sample_rate的良好通用取值都在 0.70.8即对 70%80% 的数据采样因为更高的采样率一般会提升训练精度从而需要在训练精度与泛化之间做权衡。结合源码可以补充两点理解由于采样发生在每一棵树之前GBM/DRF/Uplift DRF 中Sample任务的种子包含树编号不同树看到的行子集彼此独立因此sample_rate本质上是在树与树之间注入多样性降低集成模型对特定行的过拟合该参数gridable trueGBMV3.java因此最适合的做法是用网格搜索在候选值之间做实证比较而不是直接套用经验值——下面的示例正是这一流程。五、R 语言实战示例airlines 航班延误分类以下完整继承自 sample_rate.rst 的 R 示例加载 H2O、导入 airlines 数据集、构造 8:2 训练/验证划分、用sample_rate 0.7训练 GBM并对sample_rate ∈ {0.7, 0.8, 1}做笛卡尔网格搜索。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 sample_rate parameter: airlines_gbm - h2o.gbm(x predictors, y response, training_frame train, validation_frame valid, sample_rate 0.7 , seed 1234) # print the AUC for the validation data print(h2o.auc(airlines_gbm, valid TRUE)) # Example of values to grid over for sample_rate hyper_params - list( sample_rate c(0.7, 0.8, 1) ) # this example uses cartesian grid search because the search space is small # and we want to see the performance of all models. For a larger search space use # random grid search instead: list(strategy RandomDiscrete) # this GBM uses early stopping once the validation AUC doesnt improve by at least 0.01% for # 5 consecutive scoring events grid - h2o.grid(x predictors, y response, training_frame train, validation_frame valid, algorithm gbm, grid_id air_grid, hyper_params hyper_params, stopping_rounds 5, stopping_tolerance 1e-4, stopping_metric AUC, search_criteria list(strategy Cartesian), seed 1234) ## Sort the grid models by AUC sorted_grid - h2o.getGrid(air_grid, sort_by auc, decreasing TRUE) sorted_grid要点说明sample_rate 0.7直接作为h2o.gbm的超参数传入网格搜索使用Cartesian策略遍历全部 3 个候选值搜索空间小、想看每个模型的完整表现搜索空间大时应改用RandomDiscrete随机搜索提前停止配置为验证 AUC 连续 5 次评分事件提升不足 0.01% 时停止stopping_rounds 5、stopping_tolerance 1e-4、stopping_metric AUC最后用h2o.getGrid(..., sort_by auc, decreasing TRUE)按 AUC 降序比较三个模型。六、Python 实战示例sklearn 风格 API同样的流程在 Python 客户端h2o-py中的写法如下示例同样继承自官方文档import h2o from h2o.estimators.gbm import H2OGradientBoostingEstimator 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.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 sample_rate parameter: # initialize your estimator airlines_gbm H2OGradientBoostingEstimator(sample_rate .7, seed 1234) # then train your model airlines_gbm.train(x predictors, y response, training_frame train, validation_frame valid) # print the auc for the validation data print(airlines_gbm.auc(validTrue)) # Example of values to grid over for sample_rate # import Grid Search from h2o.grid.grid_search import H2OGridSearch # select the values for sample_rate to grid over hyper_params {sample_rate: [.7, .8, 1]} # this example uses cartesian grid search because the search space is small # and we want to see the performance of all models. For a larger search space use # random grid search instead: {strategy: RandomDiscrete} # initialize the GBM estimator # use early stopping once the validation AUC doesnt improve by at least 0.01% for # 5 consecutive scoring events airlines_gbm_2 H2OGradientBoostingEstimator(seed 1234, stopping_rounds 5, stopping_metric AUC, stopping_tolerance 1e-4) # build grid search with previously made GBM and hyper parameters grid H2OGridSearch(model airlines_gbm_2, hyper_params hyper_params, search_criteria {strategy: Cartesian}) # train using the grid grid.train(x predictors, y response, training_frame train, validation_frame valid) # sort the grid models by decreasing AUC sorted_grid grid.get_grid(sort_by auc, decreasing True) print(sorted_grid)在 Python 客户端中sample_rate是H2OGradientBoostingEstimator构造函数的显式参数默认 1.0并通过 property setter 做数值类型断言后写入_parms见 gbm.pysample_rate.setter def sample_rate(self, sample_rate): assert_is_type(sample_rate, None, numeric) self._parms[sample_rate] sample_rate七、总结与使用注意sample_rate是 GBM、DRF、XGBoost、Isolation Forest、Uplift DRF 共用的行维度无放回采样率超参数取值 (0, 1]REST/Java 层校验区间为]0,1]XGBoost 中与原生参数subsample等价默认值因算法而异GBM/XGBoost 为 1DRF 为约 0.632保证 OOB 数据Isolation Forest 中 -1 表示禁用并回退到sample_size指定sample_rate_per_class按类别字典序的数组后sample_rate被忽略这是处理类别不平衡数据的分层采样入口大数据集上建议从 0.70.8 起步并用Cartesian/RandomDiscrete网格搜索配合早停stopping_rounds、stopping_tolerance、stopping_metric实证选择DRF/Uplift DRF 若把sample_rate设为 1 且没有验证集或交叉验证源码会直接告警“无 OOB 数据可估计误差”因此这两类算法下应保留低于 1 的采样率或显式提供验证集行采样与列采样col_sample_rate可以叠加使用二者共同构成树集成模型控制方差、提升泛化的主要手段可对照 col_sample_rate.rst 与 sample_rate_per_class.rst 进一步阅读。赞分享机器学习深度学习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 GBM learn_rate 参数详解学习率原理、取值范围与实战调优H2O 3 GBM learn_rate 参数详解学习率原理、取值范围与实战调优 learn_rate 学习率是 H2O 3 中 GBM、XGBoost机器学习深度学习AutoML大数据后端H2O-3 GBM 学习率退火learn_rate_annealing参数详解原理、公式与实战调参H2O 3 GBM 学习率退火learn_rate_annealing参数详解原理、公式与实战调参 learn_rate_annealing 是 H2O机器学习深度学习AutoML大数据后端最完整Bark采样率配置SAMPLE_RATE参数全解析最完整Bark采样率配置SAMPLE_RATE参数全解析 你是否遇到过Bark生成音频杂音大、音质模糊的问题采样率SAMPLE_RATE参数可能是关键所人工智能语音音频媒体生成大模型基础模型上一篇TanStack Table 的 FilterFn 接口自定义列过滤函数的核心类型契约与实现原理下一篇Shotcut 的 Windows 崩溃调试利器Dr. Mingw JIT 调试器与 ExcHndl 异常处理集成指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑