cv.glmnet
используется в большинстве исследовательских работ и компаний. При создании аналогичной функции, такой как cv.glmnet
для glmnet.cr
(похожий пакет, который реализует лассо для порядковой регрессии отношения продолжения), я столкнулся с этой проблемой в cv.glmnet
.
`cv.glmnet` first fits the model:
glmnet.object = glmnet(x, y, weights = weights, offset = offset,
lambda = lambda, ...)
После того, как объект glmnet
создан с полными данными, следующий шаг выглядит следующим образом: извлекается lambda
из полной подогнанной модели.
lambda = glmnet.object$lambda
Теперь они следят за тем, чтобы количество сгибов было больше 3.
if (nfolds < 3)
stop("nfolds must be bigger than 3; nfolds=10 recommended")
Список создается для хранения результатов перекрестной проверки.
outlist = as.list(seq(nfolds))
for loop
выполняется для соответствия различным частям данных в соответствии с теорией перекрестной проверки.
for (i in seq(nfolds)) {
which = foldid == i
if (is.matrix(y))
y_sub = y[!which, ]
else y_sub = y[!which]
if (is.offset)
offset_sub = as.matrix(offset)[!which, ]
else offset_sub = NULL
#using the lambdas for the complete data
outlist[[i]] = glmnet(x[!which, , drop = FALSE],
y_sub, lambda = lambda, offset = offset_sub,
weights = weights[!which], ...)
}
}
Итак, что происходит. После подгонки данных к полным данным выполняется перекрестная проверка с использованием лямбда-выражений из полных данных. Может ли кто-нибудь сказать мне, как это может быть не подгонка данных? При перекрестной проверке мы хотим, чтобы у модели не было информации об оставшейся части данных. Но cv.glmnet
жульничает!
lambdas
видели полные данные, что неверно.lambda
является функцией данных, а не данные являются функциейlambda
. - person Chamberlain Foncha   schedule 20.02.2014