You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:57:04