Chciałbym użyć GLM i elastycznej sieci, aby wybrać te istotne cechy + zbudować model regresji liniowej (tj. Zarówno przewidywanie, jak i zrozumienie, więc lepiej byłoby pozostawić stosunkowo niewiele parametrów). Wyjście jest ciągłe. To genów na przypadków. Czytałem o pakiecie, ale nie jestem w 100% pewien kroków, które należy wykonać:glmnet
Wykonaj CV, aby wybrać lambda:
cv <- cv.glmnet(x,y,alpha=0.5)
(Q1) biorąc pod uwagę dane wejściowe, czy wybrałbyś inną wartość alfa?
(Q2) Czy muszę zrobić coś innego przed zbudowaniem modelu?Dopasuj model:
model=glmnet(x,y,type.gaussian="covariance",lambda=cv$lambda.min)
(Q3) coś lepszego niż „kowariancja”?
(Q4) Jeśli lambda została wybrana przez CV, dlaczego ten krok jest potrzebnynlambda=
?
(Q5) czy lepiej jest użyćlambda.min
czylambda.1se
?Uzyskaj współczynniki, aby zobaczyć, które parametry wypadły („.”):
predict(model, type="coefficients")
Na stronie pomocy istnieje wiele
predict
metod (na przykładpredict.fishnet
,predict.glmnet
,predict.lognet
itp). Ale wszelkie „proste” przewidują, jak widziałem na przykładzie.
(Q6) należy używaćpredict
lubpredict.glmnet
lub inny?
Pomimo tego, co przeczytałem o metodach regularyzacji, jestem całkiem nowy w R i w tych pakietach statystycznych, więc trudno jest się upewnić, czy dostosowuję mój problem do kodu. Wszelkie sugestie będą mile widziane.
AKTUALIZACJA
Na podstawie „Jak wcześniej wspomniano, obiekt klasy pociągu zawiera element o nazwie finalModel
, który jest dopasowanym modelem z wartościami parametrów strojenia wybranymi przez ponowne próbkowanie. Obiekt ten można wykorzystać w tradycyjny sposób do generowania prognoz dla nowych próbek, używając tego funkcja przewidywania modelu ”.
Używając caret
do dostrojenia zarówno alfa, jak i lambda:
trc = trainControl(method=cv, number=10)
fitM = train(x, y, trControl = trC, method="glmnet")
Czy fitM
zastępuje poprzedni krok 2? Jeśli tak, to jak teraz określić opcje glmnet ( type.gaussian="naive",lambda=cv$lambda.min/1se
)?
A następnego predict
kroku, mogę wymienić model
się fitM
?
Jeśli zrobię
trc = trainControl(method=cv, number=10)
fitM = train(x, y, trControl = trC, method="glmnet")
predict(fitM$finalModel, type="coefficients")
czy to ma w ogóle sens, czy niewłaściwie mieszam oba słownictwo z pakietu?
caret
to pakiet otoki R, który otacza interfejsy funkcyjne z ponad 100 pakietów ML, aby był bardziej spójny i dodaje CV, gridsearch, modyfikuje szalone ustawienia domyślne parametrów itp. Nie jest pozbawiony dziwactw, ale jest całkiem dobry i szeroko stosowany.cva.glmnet(..)
zamiast po prostucv.glmnet(...)
dostroić alfa i lambda w tym samym czasie. Następnie możesz uruchomić,minlossplot(cva.fit)
aby zobaczyć, która alfa daje najlepszy wynik. Obie są częścią glmnetUtils