gglasso: предсказать тип «ответ» - PullRequest
0 голосов
/ 04 июля 2019

Я немного изо всех сил пытаюсь получить вероятности вместо предсказанных классов, используя пакет 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 )))

Это правильный подход для получения соответствующих вероятностей?

...