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

mlr集成ClusterR的MiniBatchKmeans时par.vals默认值失效

Fix: Default clusters Parameter Not Applied in mlr MiniBatchKmeans Learner

Let's break down why your default clusters value isn't working and how to fix it:

Root Cause

You placed the default clusters value in the par.vals argument of makeRLearnerCluster, but that's not how mlr handles required parameter defaults.

In mlr:

  • Parameters defined in par.set without a default are treated as required—mlr expects users to explicitly set them, and ignores par.vals for these parameters.
  • par.vals is meant for overriding existing default values (from par.set parameters) or passing extra, unregistered parameters to the underlying function.

Solution

Move the default value directly into the makeIntegerLearnerParam definition for clusters, and remove it from par.vals:

#' @export
makeRLearner.cluster.MiniBatchKmeans = function() {
  makeRLearnerCluster(
    cl = "cluster.MiniBatchKmeans",
    package = "ClusterR",
    par.set = makeParamSet(
      # Add default = 2L directly to the parameter definition
      makeIntegerLearnerParam(id = "clusters", lower = 1L, default = 2L),
      makeIntegerLearnerParam(id = "batch_size", default = 10L, lower = 1L),
      makeIntegerLearnerParam(id = "num_init", default = 1L, lower = 1L),
      makeIntegerLearnerParam(id = "max_iters", default = 100L, lower = 1L),
      makeNumericLearnerParam(id = "init_fraction", default = 1, lower = 0),
      makeDiscreteLearnerParam(id = "initializer", default = "kmeans++", values = c("optimal_init", "quantile_init", "kmeans++", "random")),
      makeIntegerLearnerParam(id = "early_stop_iter", default = 10L, lower = 1L),
      makeLogicalLearnerParam(id = "verbose", default = FALSE, tunable = FALSE),
      makeUntypedLearnerParam(id = "CENTROIDS", default = NULL),
      makeNumericLearnerParam(id = "tol", default = 1e-04, lower = 0),
      makeNumericLearnerParam(id = "tol_optimal_init", default = 0.3, lower = 0),
      makeIntegerLearnerParam(id = "seed", default = 1L)
    ),
    # Remove clusters from par.vals since it now has a default in par.set
    par.vals = list(),
    properties = c("numerics", "prob"),
    name = "MiniBatchKmeans",
    note = "Note",
    short.name = "MBatchKmeans",
    callees = c("MiniBatchKmeans", "predict_MBatchKMeans")
  )
}

Verification

After making this change:

  1. When you create the learner without specifying clusters, getLearnerParVals(lrn) will return $clusters [1] 2 as expected.
  2. Calling train(lrn, cluster_task) will automatically pass clusters=2 to the ClusterR function, eliminating the missing argument error.

Quick Note on par.vals Usage

For future reference, par.vals is best used for:

  • Overriding default values defined in par.set (e.g., changing batch_size default from 10 to 20)
  • Passing hidden/untunable parameters that you don't want to expose in the learner's parameter set

内容的提问来源于stack exchange,提问作者prasiddhi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:34:37