ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

H2O GLM `control_variables` 参数详解:训练保留、评分剔除的控制变量机制

H2O GLM `control_variables` 参数详解:训练保留、评分剔除的控制变量机制 机器学习深度学习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 的广义线性模型GLM中control_variables提供了一种特殊的预测变量处理方式这些变量完整参与模型训练但在推理/评分阶段被自动排除从而让模型既能看见某些环境因素以校正系数估计又不会在线上预测时受这些不可观测因素干扰。本文基于 control_variables.rst 官方文档结合 GLM 源码与客户端实现系统讲解该参数的定义、运行机制、与remove_offset_effects的协同用法、R/Python 实战代码以及全部使用限制。一、control_variables是什么control_variables是 H2O GLM 的可选参数GLMParameters中对应字段为_control_variables定义见 GLMModel.java注释为 control variables definition, list of column names它接收一个列名列表用于指定一批控制变量。核心语义可以概括为一句话训练时纳入评分时剔除。也就是说这些列会作为普通预测变量参与系数估计但在模型对外输出预测值时其效应会被移除不进入最终预测结果。这一机制在以下场景中尤其有价值校正批次效应 / 实验条件数据来自多个批次、多个站点或多种实验环境训练时让模型吸收批次差异评分时不再受批次列影响控制混杂变量如年龄、地区等混杂因素在训练集中存在但线上预测时未必可得或不想让其影响预测值纳入不可用的固定效应某些固定效应只在训练阶段可观测预测时天然缺失通过控制变量即可让模型学习其影响又不在评分阶段依赖它。该参数属于超参数开关性质在官方文档中标注为Hyperparameter: no即它不参与超参数搜索网格。二、运行机制双模型评分与系数归零2.1 受限模型与无限制模型并存从 GLM 的训练流程代码可以看出GLM.java当control_variables或remove_offset_effects被启用时H2O 会在训练完成后额外执行一次受限评分通过_model._useControlVariables标志切换将控制变量对应的 beta 系数清零后再计算预测与指标。这意味着指定control_variables后模型会同时维护两套输出模型视角评分时是否包含控制变量效应对应输出受限模型restricted否控制变量系数被置零默认的training_metrics/validation_metrics、默认scoring_history、默认varimp无限制模型unrestricted是保留全部系数_training_metrics_unrestricted_model/_validation_metrics_unrestricted_model、_scoring_history_unrestricted_model源码中两套打分历史分别由_scoringHistory与_scoringHistoryUnrestrictedModel维护见 GLM.java模型输出对象GLMOutput中也同时存有_scoring_history_unrestricted_model等字段见 GLMModel.java。变量重要性同样被拆分受限模型中控制变量的系数被强制视为 0因此在变量重要性表中控制变量的相对重要性为 0只有切换到无限制模型才能看到包含控制变量在内的完整变量重要性排序。这一行为在测试 pyunit_glm_control_variables_unrestricted_model.py 中有明确断言受限模型中year变量的relative_importance 0而无限制模型中 0。2.2 底层实现要点从源码可以进一步看清评分时剔除的落地方式控制变量索引映射GLMOutput.mapControlVariables()GLMModel.java将控制变量列名映射为适应后数据框中的列索引排序后保存在_control_values_idxs_in_adapted_frame系数归零getControlValBeta(beta)GLMModel.java返回一份将控制变量对应 beta 置零后的系数副本评分计算eta时若_useControlVariables为真即用该副本替代完整系数见 GLMModel.javaMOJO / POJO 导出GLM 的 MOJO 写入器在启用控制变量时写入的是剔除控制变量效应后的 beta 数组The Control Variables Coefficients见 GLMMojoWriter.javahaveMojo()/havePojo()也会相应做兼容性检查不支持交互项、multinomial/ordinal 等见 GLMModel.javaAIC/度量口径在计算 GLM 度量时控制变量会使有效自由度估计产生差异GLMMetricBuilder会针对控制变量 beta 为 0 的情况调整 k 值见 GLMMetricBuilder.java。三、获取无限制模型make_unrestricted_glm_model受限模型是默认视角而无限制模型包含控制变量效应的完整模型需要通过派生接口单独获取Pythonglm.make_unrestricted_glm_model(destNone)Rh2o.make_unrestricted_glm_model(model, destination_key NULL)其底层 REST 端点是POST /3/MakeUnrestrictedGLMModel服务端由MakeGLMModelHandler.make_unrestricted_model()实现MakeGLMModelHandler.java。从实现上看该接口本质上是对make_derived_model的封装设置remove_offset_effectsfalse、remove_control_variables_effectsfalse生成一个与主模型共享系数、但输出带上无限制指标的新模型默认 key 为原模型key_unrestricted_model。客户端侧同样有前置校验若源模型既未启用control_variables也未启用remove_offset_effectsPython 端会抛出H2OValueError见 glm.pyR 端对应stopifnot检查见 glm.R。四、与remove_offset_effects协同双特性模型与派生模型4.1 同时启用时的行为control_variables的密切关联参数是 remove_offset_effects移除 offset 对评分与指标计算的影响GLMParameters._remove_offset_effects见 GLMModel.java。二者可以同时开启此时默认模型的指标与打分历史按两个特性同时生效计算即评分时同时剔除 offset 效应和控制变量效应训练流程会额外维护多套受限打分历史_scoringHistoryRemoveOffsetEnabled仅去除 offset 效应与_scoringHistoryControlValEnabled仅去除控制变量效应详见 GLM.java 与 GLM.java 中对不同组合分别用GLMResDevTask重算目标函数的过程。4.2 通过派生模型只开启其中一个特性如果只想得到仅开启其中一个特性的模型可以使用make_derived_glm_modelPythonglm.make_derived_glm_model(destNone, remove_control_variables_effectsFalse, remove_offset_effectsFalse)Rh2o.make_derived_glm_model(model, destination_key NULL, remove_control_variables_effects FALSE, remove_offset_effects FALSE)对应 REST 端点为POST /3/MakeDerivedGLMModel服务端实现见 MakeGLMModelHandler.java要点如下仅当源模型同时启用control_variables与remove_offset_effects时才允许设置remove_control_variables_effects或remove_offset_effects为真否则抛出异常remove_control_variables_effects与remove_offset_effects不能同时为真——那样产出的模型与主模型完全一致没有意义生成的派生模型会复用源模型对应视角的训练/验证指标与打分历史如_training_metrics_restricted_model_contr_vals、_scoring_history_restricted_model_ro等默认 key 分别为原模型key_remove_control_variables_effects/原模型key_remove_offset_effects。4.3 性能代价官方文档特别提醒当两个特性同时启用且score_each_iterationTrue或generate_scoring_historyTrue时大数据的训练可能显著变慢——指标计算的复杂度是标准 GLM 的 4 倍。原因是训练过程中要为双特性都生效 / 仅控制变量 / 仅 offset / 无限制等多个视角分别维护打分历史与指标。源码中ScoringHistory对象的数量普通、无限制、仅控制变量、仅 offset 共四套见 GLM.java直观印证了这一复杂度来源。五、使用限制与注意事项control_variables目前标注为experimental实验性特性且存在以下硬性限制参数校验逻辑集中在GLMParameters.validate()见 GLMModel.java不支持多分类multinomial、有序ordinal与自定义custom分布校验时会直接报错 The multinomial/ordinal/custom distribution is not supported with control variables不能与交叉验证cross validation同时使用即nfolds 0或指定fold_column时不可用不能与 Lambda search 同时使用即lambda_searchTrue时不可用不能与交互项interactions / interaction_pairs同时使用控制变量列的合法性约束控制变量必须是训练帧中真实存在的列不能同时作为权重列weights_column、偏移列offset_column、响应列response_column或被列入ignored_columns否则会抛出对应错误。六、实战示例航空公司延误预测R 与 Python官方文档给出了完整的端到端示例使用航空公司延误数据集allyears2k_headers.zip来自公开的 BTS 统计数据预测航班是否延误IsDepDelayed并将Year、DayOfWeek设为控制变量——它们参与训练但在评分时被排除。Python 版本import h2o from h2o.estimators.glm import H2OGeneralizedLinearEstimator h2o.init() # 导入航空公司数据集 airlines h2o.import_file(https://s3.amazonaws.com/h2o-public-test-data/smalldata/airlines/allyears2k_headers.zip) # 将列转换为因子 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() # 设置预测变量与响应列 predictors [Origin, Dest, Year, UniqueCarrier, DayOfWeek, Month, Distance, FlightNum] response IsDepDelayed # 划分训练集与验证集 train, valid airlines.split_frame(ratios[.8]) # 使用 control_variables 参数训练 GLM airlines_glm H2OGeneralizedLinearEstimator(familybinomial, remove_collinear_columnsTrue, score_each_iterationTrue, generate_scoring_historyTrue, control_variables[Year, DayOfWeek]) airlines_glm.train(xpredictors, yresponse, training_frametrain, validation_framevalid) # 打印验证集 AUC print(airlines_glm.auc(validTrue)) # 查看系数表 coeff_table airlines_glm._model_json[output][coefficients_table] coeff_table.as_data_frame() # 查看学习曲线 airlines_glm.learning_curve_plot() # 获取无限制 GLM 模型 unrestricted_airlines_glm airlines_glm.make_unrestricted_glm_model() # 对比受限模型与无限制模型的变量重要性 varimp airlines_glm.varimp() varimp_unrestricted unrestricted_airlines_glm.varimp()R 版本library(h2o) h2o.init() # 导入航空公司数据集 airlines - h2o.importFile(http://s3.amazonaws.com/h2o-public-test-data/smalldata/airlines/allyears2k_headers.zip) # 将列转换为因子 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]) # 设置预测变量与响应列 predictors - c(Origin, Dest, Year, UniqueCarrier, DayOfWeek, Month, Distance, FlightNum) response - IsDepDelayed # 划分训练集与验证集 airlines_splits - h2o.splitFrame(data airlines, ratios 0.8) train - airlines_splits[[1]] valid - airlines_splits[[2]] # 使用 control_variables 参数训练 GLM airlines_glm - h2o.glm(family binomial, x predictors, y response, training_frame train, validation_frame valid, remove_collinear_columns TRUE, score_each_iteration TRUE, generate_scoring_history TRUE, control_variables c(Year, DayOfWeek)) # 打印验证集 AUC print(h2o.auc(airlines_glm, valid TRUE)) # 查看系数表 airlines_glmmodel$coefficients_table # 查看学习曲线 h2o.learning_curve_plot(airlines_glm) # 获取无限制 GLM 模型 unrestricted_airlines_glm - h2o.make_unrestricted_glm_model(airlines_glm) # 对比受限模型与无限制模型的变量重要性 varimp - h2o.varimp(airlines_glm) varimp_unrestricted - h2o.varimp(unrestricted_airlines_glm)如何解读示例结果h2o.auc(airlines_glm, validTRUE)得到的是受限模型在验证集上的 AUC即控制变量Year、DayOfWeek效应被排除后的性能coefficients_table中仍包含控制变量的完整系数它们确实参与了训练但默认评分与默认变量重要性会忽略其效应unrestricted_airlines_glm提供的是保留全部变量效应的完整视角适合做模型解释、变量重要性分析和 AIC 比较。七、参数速查属性说明可用算法仅 GLM是否超参数否不参与网格搜索类型List[str]Python/ 字符向量R列名列表默认值None/NULL不启用状态实验性experimental主要客户端 APIcontrol_variables构造参数make_unrestricted_glm_model()/make_derived_glm_model()派生接口不兼容项多分类/有序/自定义分布、交叉验证、Lambda search、交互项、与权重/偏移/响应/忽略列冲突关联参数remove_offset_effects八、延伸阅读官方参数文档control_variables.rst本文依据、remove_offset_effects.rst核心实现GLM.java双/多套打分历史与受限评分流程、GLMModel.java参数校验、getControlValBeta、MOJO/POJO 兼容性、MakeGLMModelHandler.java无限制/派生模型 REST 实现、GLMMojoWriter.javaMOJO 系数写入客户端 APIglm.pyPython 属性与派生方法、glm.RR 端h2o.make_unrestricted_glm_model/h2o.make_derived_glm_model测试用例pyunit_glm_control_variables_unrestricted_model.py、pyunit_glm_make_derived_model.py、runit_GLM_control_variables.R 等可用于对照验证本文所述行为。赞分享机器学习深度学习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点击查看免费下载相关推荐atomic_write_json 指数退避重试Webnovel Writer 如何优雅处理文件占用atomic_write_json 指数退避重试Webnovel Writer 如何优雅处理文件占用 Webnovel Writer 是一个基于 Claude机器学习深度学习AutoML大数据后端H2O-3 GBM 训练中检查点间隔控制in_training_checkpoints_tree_interval 参数完全指南H2O 3 GBM 训练中检查点间隔控制in_training_checkpoints_tree_interval 参数完全指南 H2O 3 的 in_tra机器学习深度学习AutoML大数据后端Composio 合规、数据保留与模型训练零数据保留、Dont store data 机制与 Enterprise 边界解析Composio 合规、数据保留与模型训练零数据保留、Dont store data 机制与 Enterprise 边界解析 本文是 Composio人工智能AI Agent工具调用MCP 服务MCP Clients上一篇3分钟学会专业网络拓扑图绘制从零到精通的完整指南下一篇5分钟免费绕过iPhone激活锁applera1n工具终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表