能否修改mlr3预定义学习器代码?以regr.svm移除指定依赖为例
mlr3预定义学习器本地修改可行方案
你之前调用trace()失败是因为该函数需要传入待修改的对象/方法,而非源代码文件名,以下是三种经过验证的修改方案:
方案1:派生自定义学习器(最推荐,无侵入)
直接基于官方regr.svm学习器的R6类派生新的自定义学习器,仅重写你需要调整的参数依赖部分,不会修改原包代码,也不会随包更新丢失修改:
library(mlr3) library(mlr3learners) library(R6) # 继承官方回归SVM学习器类 LearnerRegrSVMNoDeps = R6Class( "LearnerRegrSVMNoDeps", inherit = LearnerRegrSVM, public = list( initialize = function() { super$initialize() # 移除cost、epsilon对应的参数依赖规则 self$param_set$deps = self$param_set$deps[!on %in% c("cost", "epsilon")] # 也可以根据需求自定义其他参数规则 } ) ) # 注册自定义学习器到mlr3学习器列表 mlr_learners$add("regr.svm.nodeps", LearnerRegrSVMNoDeps) # 调用示例 lrn_custom = lrn("regr.svm.nodeps")
方案2:直接修改本地包源代码
适合临时调试使用,修改会随包更新被覆盖:
- 首先找到本地安装的mlr3learners包对应文件路径:
system.file("R", "LearnerRegrSVM.R", package = "mlr3learners")
- 打开该文件调整指定行的依赖规则后保存,重启R会话即可生效。
方案3:正确使用trace()函数临时修改
修改仅在当前R会话生效,重启后自动恢复:
# 传入官方学习器的初始化方法作为trace的修改对象 trace(what = LearnerRegrSVM$public_methods$initialize, edit = TRUE) # 在弹出的编辑窗口中修改对应行的依赖配置,保存后即可生效
内容的提问来源于stack exchange,提问作者Eduardo A. Sánchez Torres
相关产品推荐
相关产品推荐

