Тюнинг GL MNET с использованием млр3 - PullRequest
0 голосов
/ 22 марта 2020

MLR3 действительно круто. Я пытаюсь настроить параметр регуляризации

searchspace_glmnet_trafo = ParamSet$new(list(
  ParamDbl$new("regr.glmnet.lambda", log(0.01), log(10))
))
searchspace_glmnet_trafo$trafo = function(x, param_set) {
  x$regr.glmnet.lambda = (exp(x$regr.glmnet.lambda))
  x
}

, но получаю ошибку

Error in glmnet::cv.glmnet(x = data, y = target, family = "gaussian",  : 
  Need more than one value of lambda for cv.glmnet

Ниже приведен минимальный нерабочий пример. Любая помощь с благодарностью.

library(mlr3verse)
data("kc_housing", package = "mlr3data")

library(anytime)
dates = anytime(kc_housing$date)
kc_housing$date = as.numeric(difftime(dates, min(dates), units = "days"))
kc_housing$zipcode = as.factor(kc_housing$zipcode)
kc_housing$renovated = as.numeric(!is.na(kc_housing$yr_renovated))
kc_housing$has_basement = as.numeric(!is.na(kc_housing$sqft_basement))

kc_housing$id = NULL
kc_housing$price = kc_housing$price / 1000
kc_housing$yr_renovated = NULL
kc_housing$sqft_basement = NULL
lrnglm=lrn("regr.glmnet")
kc_housing
tsk = TaskRegr$new("sales", kc_housing, target = "price")
fencoder = po("encode", method = "treatment",
              affect_columns = selector_type("factor"))
pipe = fencoder %>>% lrnglm

glearner = GraphLearner$new(pipe)
glearner$train(tsk)


searchspace_glmnet_trafo = ParamSet$new(list(
  ParamDbl$new("regr.glmnet.lambda", log(0.01), log(10))
))
searchspace_glmnet_trafo$trafo = function(x, param_set) {
  x$regr.glmnet.lambda = (exp(x$regr.glmnet.lambda))
  x
}
inst = TuningInstance$new(
  tsk, glearner,
  rsmp("cv"), msr("regr.mse"),
  searchspace_glmnet_trafo, term("evals", n_evals = 100)
)
gsearch = tnr("grid_search", resolution = 100)
gsearch$tune(inst)

1 Ответ

0 голосов
/ 22 марта 2020

lambda должен быть векторным параметром, а не единственным значением (как говорится в сообщении).

Я предлагаю не настраивать cv.glmnet. Этот алгоритм выполняет внутреннюю 10-кратную оптимизацию CV и использует собственную последовательность для lambda. Обратитесь к странице помощи учащегося за дополнительной информацией.

Вы можете применить свою собственную настройку (настройку параметра s, а не lambda) на glmnet::glmnet(). Однако этот алгоритм (пока) недоступен для использования с {mlr3}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...