A função R cv.glm (library: boot) calcula o erro de previsão de validação cruzada estimado em dobras K para modelos lineares generalizados e retorna delta. Faz sentido usar essa função para uma regressão do laço (library: glmnet) e, em caso afirmativo, como pode ser realizada? A biblioteca glmnet usa uma validação cruzada para obter o melhor parâmetro de rotação, mas não encontrei nenhum exemplo que valide cruzadamente a equação glmnet final.
r
regression
cross-validation
lasso
glmnet
kalakaru
fonte
fonte
Respostas:
Um exemplo de como fazer baunilha validação cruzada simples para lasso no
glmnet
nomtcars
conjunto de dados.Carregar conjunto de dados.
Prepare recursos (variáveis independentes). Eles devem ser de
matrix
classe. A maneira mais fácil de converterdf
contendo variáveis categóricas emmatrix
é através demodel.matrix
. Lembre-se, por padrão,glmnet
se encaixa na interceptação, então é melhor descartar a interceptação da matriz do modelo.Prepare a resposta (variável dependente). Vamos codificar carros com acima da média
mpg
como eficiente ('1') e o restante como ineficiente ('0'). Converta essa variável em fator.Execute a validação cruzada via
cv.glmnet
. Ele captaráalpha=1
osglmnet
parâmetros padrão , que é o que você pediu: regressão do laço.Examinando a saída da validação cruzada, você pode estar interessado em pelo menos duas informações:
lambda, que minimiza erros de validação cruzada.
glmnet
realmente fornece 2 lambdas:lambda.min
elambda.1se
. É seu julgamento como estatístico praticante que você deve usar.coeficientes regularizados resultantes.
Por favor, veja o código R de acordo com as instruções acima:
Comentários finais:
note que a saída do modelo não diz nada sobre a significância estatística dos coeficientes, apenas valores.
O penalizador l1 (laço), que você pediu, é notório por instabilidade, como evidenciado nesta postagem do blog e nesta pergunta de stackexchange . Uma maneira melhor poderia ser a validação cruzada
alpha
também, o que permitiria decidir sobre a combinação adequada de penalizadores l1 e l2.uma maneira alternativa de fazer a validação cruzada pode ser recorrer ao sinal de intercalação
train( ... method='glmnet')
e, finalmente, a melhor maneira de aprender mais sobre
cv.glmnet
e seus padrõesglmnet
é, obviamente,?glmnet
no console do R)))fonte