Vorrei usare GLM e Elastic Net per selezionare quelle caratteristiche rilevanti + costruire un modello di regressione lineare (cioè sia la previsione che la comprensione, quindi sarebbe meglio rimanere con relativamente pochi parametri). L'output è continuo. Sono geni per casi. Ho letto del pacchetto, ma non sono sicuro al 100% dei passaggi da seguire:glmnet
Esegui CV per scegliere lambda:
cv <- cv.glmnet(x,y,alpha=0.5)
(Q1) dati i dati di input, sceglieresti un valore alfa diverso?
(Q2) devo fare qualcos'altro prima di costruire il modello?Adatta il modello:
model=glmnet(x,y,type.gaussian="covariance",lambda=cv$lambda.min)
(Q3) qualcosa di meglio della "covarianza"?
(Q4) Se lambda è stato scelto da CV, perché è necessario questo passaggionlambda=
?
(Q5) è meglio usarelambda.min
olambda.1se
?Ottieni i coefficienti, per vedere quali parametri sono stati esclusi ("."):
predict(model, type="coefficients")
Nella pagina di aiuto ci sono molti
predict
metodi (ad esempio,predict.fishnet
,predict.glmnet
,predict.lognet
, ecc). Ma qualsiasi previsione "semplice" come ho visto su un esempio.
(Q6) Dovrei usarepredict
opredict.glmnet
o altro?
Nonostante ciò che ho letto sui metodi di regolarizzazione, sono abbastanza nuovo in R e in questi pacchetti statistici, quindi è difficile essere sicuri se sto adattando il mio problema al codice. Eventuali suggerimenti saranno i benvenuti.
AGGIORNAMENTO
Basato su "Come precedentemente notato, un oggetto di un treno di classe contiene un elemento chiamato finalModel
, che è il modello adattato con i valori dei parametri di ottimizzazione selezionati mediante ricampionamento. Questo oggetto può essere utilizzato nel modo tradizionale per generare previsioni per nuovi campioni, usando quello funzione di previsione del modello ".
Usando caret
per sintonizzare sia alpha che lambda:
trc = trainControl(method=cv, number=10)
fitM = train(x, y, trControl = trC, method="glmnet")
Non fitM
sostituire precedente punto 2? In tal caso, come specificare le opzioni glmnet ( type.gaussian="naive",lambda=cv$lambda.min/1se
) ora?
E il predict
passaggio seguente , posso sostituire model
a fitM
?
Se lo faccio
trc = trainControl(method=cv, number=10)
fitM = train(x, y, trControl = trC, method="glmnet")
predict(fitM$finalModel, type="coefficients")
ha senso o sto mescolando erroneamente entrambi i termini del pacchetto?