Eu gostaria de usar o GLM e o Elastic Net para selecionar esses recursos relevantes + criar um modelo de regressão linear (ou seja, previsão e entendimento, para que seja melhor ficar com relativamente poucos parâmetros). A saída é contínua. São genes por casos. Eu tenho lido sobre o pacote, mas não tenho 100% de certeza sobre as etapas a seguir:glmnet
Execute o CV para escolher lambda:
cv <- cv.glmnet(x,y,alpha=0.5)
(Q1) dados os dados de entrada, você escolheria um valor alfa diferente?
(Q2) preciso fazer outra coisa antes de construir o modelo?Encaixar no modelo:
model=glmnet(x,y,type.gaussian="covariance",lambda=cv$lambda.min)
(Q3) algo melhor que "covariância"?
(Q4) Se o lambda foi escolhido pelo CV, por que essa etapa precisanlambda=
?
(Q5) é melhor usarlambda.min
oulambda.1se
?Obtenha os coeficientes para ver quais parâmetros caíram ("."):
predict(model, type="coefficients")
Na página de ajuda existem muitos
predict
métodos (por exemplo,predict.fishnet
,predict.glmnet
,predict.lognet
, etc.). Mas qualquer previsão "simples" como eu vi em um exemplo.
(Q6) Devo usarpredict
oupredict.glmnet
ou outro?
Apesar do que li sobre métodos de regularização, sou bastante novo no R e nesses pacotes estatísticos, por isso é difícil ter certeza se estou adaptando meu problema ao código. Todas as sugestões serão bem-vindas.
UPDATE
Com base em "Como observado anteriormente, um objeto de trem de classe contém um elemento chamado finalModel
, que é o modelo ajustado com os valores dos parâmetros de ajuste selecionados por reamostragem. Esse objeto pode ser usado da maneira tradicional para gerar previsões para novas amostras, usando o função de previsão do modelo ".
Usando caret
para ajustar alpha e lambda:
trc = trainControl(method=cv, number=10)
fitM = train(x, y, trControl = trC, method="glmnet")
Será que fitM
substitua a etapa anterior 2? Se sim, como especificar as opções glmnet ( type.gaussian="naive",lambda=cv$lambda.min/1se
) agora?
E o seguinte predict
passo, eu posso substituir model
a fitM
?
Se eu fizer
trc = trainControl(method=cv, number=10)
fitM = train(x, y, trControl = trC, method="glmnet")
predict(fitM$finalModel, type="coefficients")
faz algum sentido ou estou misturando incorretamente o vocabulário de ambos os pacotes?
caret
é um pacote de wrapper R que agrupa interfaces de função de mais de 100 pacotes ML para ser mais consistente e adiciona CV, pesquisa de grade, modifica padrões de parâmetros insanos etc. Não é sem suas peculiaridades, mas é muito bom e amplamente usado.cva.glmnet(..)
vez de apenascv.glmnet(...)
e ajustar alfa e lambda ao mesmo tempo. Então você pode correrminlossplot(cva.fit)
para ver qual alfa dá o melhor resultado. Isso faz parte do glmnetUtils