Я немного изо всех сил пытаюсь получить вероятности вместо предсказанных классов, используя пакет gglasso (grouped LASSO) в R.
Предикат .gglasso позволяет только указать type = 'class' или 'link'.
Я использовал сгруппированный пакет лассо для оценки логистической регрессии LASSO. Лямбда была найдена с помощью перекрестной проверки.
Является ли правильный подход для выбора предиката type = 'link', а затем использовать функцию обратной ссылки logit на выходе?
Функция прогнозирования gglasso показана ниже.
gglasso::predict.gglasso
function (object, newx, s = NULL, type = c("class", "link"),
...)
{
type <- match.arg(type)
loss <- class(object)[[2]]
b0 <- t(as.matrix(object$b0))
rownames(b0) <- "(Intercept)"
nbeta <- rbind2(b0, object$beta)
if (!is.null(s)) {
vnames <- dimnames(nbeta)[[1]]
dimnames(nbeta) <- list(NULL, NULL)
lambda <- object$lambda
lamlist <- lambda.interp(lambda, s)
if (length(s) == 1) {
nbeta = nbeta[, lamlist$left, drop = FALSE] * lamlist$frac +
nbeta[, lamlist$right, drop = FALSE] * (1 - lamlist$frac)
}
else {
nbeta = nbeta[, lamlist$left, drop = FALSE] %*% diag(lamlist$frac) +
nbeta[, lamlist$right, drop = FALSE] %*% diag(1 -
lamlist$frac)
}
dimnames(nbeta) <- list(vnames, paste(seq(along = s)))
}
if (is.null(dim(newx)))
newx = matrix(newx, nrow = 1)
nfit <- as.matrix(as.matrix(cbind2(1, newx)) %*% nbeta)
if (loss %in% c("logit", "sqsvm", "hsvm")) {
switch(type, link = nfit, class = ifelse(nfit > 0, 1,
-1))
}
else {
nfit
}
}
Итак, я оценил модель и сделал это, чтобы получить вероятности (пока в выборке)
fit_model1 <- gglasso(x=x,y=y,group=groups_x,loss="logit", lambda = lmbda)
predict_insample <- fit_model1 %>%
predict(newx = x, type = 'link')
probabilities <- (exp(predict_insample)/(1+exp(predict_insample )))
Это правильный подход для получения соответствующих вероятностей?