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.setwithout adefaultare treated as required—mlr expects users to explicitly set them, and ignorespar.valsfor these parameters. par.valsis meant for overriding existing default values (frompar.setparameters) 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:
- When you create the learner without specifying
clusters,getLearnerParVals(lrn)will return$clusters [1] 2as expected. - Calling
train(lrn, cluster_task)will automatically passclusters=2to 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., changingbatch_sizedefault from 10 to 20) - Passing hidden/untunable parameters that you don't want to expose in the learner's parameter set
内容的提问来源于stack exchange,提问作者prasiddhi
相关产品推荐
相关产品推荐

