2017-10-09 1 views
0

Ich habe ein paar verschiedene Regressionsmodelle mit dem Caret-Paket in R erstellt, um Vorhersagen darüber zu treffen, wie bestimmte genetische Sequenzen unter bestimmten experimentellen Bedingungen fluoreszieren.Wie erstellt man Regressionsmodelle und vergleicht sie dann mit den Daten, die aus dem Modell-Trainingstest stammen?

Ich habe das grundlegende Protokoll der Aufspaltung meiner Daten in zwei Sätze verfolgt: einen "Trainings-Test-Satz" (80%) und einen "Hold-Out-Satz" (20%), von denen der erstere verwendet werden würde Erstellen Sie die Modelle, und die letztere würde verwendet werden, um sie zu testen, um das endgültige Modell basierend auf Metriken wie ihre R-Quadrat- und RMSE-Werte zu vergleichen und auszuwählen. Eine solche Anleitung der vielen, denen ich folgte, kann hier gefunden werden (http://www.kimberlycoffey.com/blog/2016/7/16/compare-multiple-caret-run-machine-learning-models).

Allerdings renne ich in einen Block, in dem ich nicht weiß, wie man die verschiedenen Modelle prüft und vergleicht, basierend darauf, wie gut sie die Punkte im Holdout-Set vorhersagen können. In der Anleitung, die ich oben verlinkt habe, verwendet der Autor eine ConfusionMatrix, um die Spezifität und Genauigkeit für jedes Modell zu berechnen, nachdem ein predict.train Objekt erstellt wurde, das die kürzlich erstellten Modelle auf den Hold-out-Datensatz anwendete (test) in der Verbindung). ConfusionMatrix kann jedoch nur auf Klassifikationsmodelle angewandt werden, bei denen das Ergebnis (oder die Antwort) ein kategorischer Wert ist (soweit meine Forschungsergebnisse angegeben haben. Bitte korrigieren Sie mich, wenn dies nicht korrekt ist, da ich nicht zweifelsfrei schließen konnte) dass dies der Fall ist).

Ich habe festgestellt, dass die resamples Verfahren zum Vergleichen mehrerer Modelle gegeneinander (Quelle: https://www.rdocumentation.org/packages/caret/versions/6.0-77/topics/resamples) in der Lage ist, aber es kann nicht berücksichtigen, wie die neuen Modelle mit den Daten passen, die ich aus den Trainings-Testsitzungen ausgeschlossen.

Ich versuchte predict Objekte mithilfe der neu gebauten Modelle und Hold-out-Daten, dann berechnet Rsquared und RMSE-Werte mit caret des R2 und RMSE Methoden zu erstellen. Aber ich bin mir nicht sicher, ob ein solcher Ansatz der beste Weg ist, das beste Modell zu vergleichen und auszuwählen.

An dieser Stelle sollte ich beachten, dass alle von mir verwendeten Modellbau-Methoden auf linearer Regression basieren, da ich in der Lage sein muss, die Koeffizienten zu extrahieren und sie in einem separaten Python-Skript anzuwenden. Eine andere Option, die ich in Erwägung zog, war das Setzen eines Schwellenwerts in meinem Ergebnis, wobei jede genetische Sequenz, die einen Fluoreszenzwert über 100 aufwies, als nützlich angesehen wurde, während Sequenzen, die Werte unter 100 bewerteten, dies nicht waren. Dies würde mir erlauben, die ConfusionMatrix zu verwenden. Aber ich bin nicht sicher, wie ich das innerhalb meines R-Codes implementieren sollte, um diese beiden Klassen in meiner Ergebnisvariable zu machen. Ich bin darüber hinaus besorgt, dass dieser Ansatz es schwierig machen könnte, meine Regressionsmodelle auf andere Daten anzuwenden und Vorhersagen zu treffen.

Für was es wert ist, ist jeder der Prädiktoren entweder eine Ganzzahl oder ein Float und haben Bereiche, die normalerweise nicht verteilt sind. Hier

ist der Code, den ich bisher gewesen mit:

library(caret) 

data <- read.table("mydata.csv") 

sorted_Data<- data[order(data$fluorescence, decreasing= TRUE),] 

splitprob <- 0.8 

traintestindex <- createDataPartition(sorted_Data$fluorescence, p=splitprob, list=F) 
holdoutset <- sorted_Data[-traintestindex,] 
trainingset <- sorted_Data[traintestindex,] 

traindata<- trainingset[c('x1', 'x2', 'x3', 'x4', 'x5', 'fluorescence')] 

cvCtrl <- trainControl(method = "repeatedcv", number= 20, repeats = 20, verboseIter = FALSE) 

modelglmStepAIC <- train(fluorescence~., traindata, method = "glmStepAIC", preProc = c("center","scale"), trControl = cvCtrl) 

model_rlm <- train(fluorescence~., traindata, method = "rlm", preProc = c("center","scale"), trControl = cvCtrl) 

pred_glmStepAIC<- predict.lm(modelglmStepAIC$finalModel, holdoutset) 

pred_rlm<- predict.lm(model_rlm$finalModel, holdoutset) 

glmStepAIC_r2<- R2(pred_glmStepAIC, holdoutset$fluorescence) 
glmStepAIC_rmse<- RMSE(pred_glmStepAIC, holdoutset$fluorescence) 

rlm_r2<- R2(pred_rlm, holdoutset$fluorescence) 
rlm_rmse<- RMSE(pred_rlm, holdoutset$fluorescence) 
+0

Gibt es eine Programmierfrage? Ansonsten scheint dies für stats.stackexchange.com besser geeignet zu sein. – Roland

+1

Betrachten Sie die Aufmerksamkeitsspanne von Lesern und die Reproduzierbarkeit eines Beispiels als wichtigste Faktoren, um eine richtige Antwort zu erhalten. –

+0

@Roland Ich habe hier gepostet, weil ich nicht wusste, welchen Code ich implementieren soll, um meine endgültigen Modelle zu vergleichen und auszuwählen. Ich habe nicht bei CrossValidated gepostet, weil sie sehr wählerisch bei Fragen sind, die sich auf Statistiken konzentrieren und nicht so sehr auf den eigentlichen Codierungsaspekt. Davon abgesehen, könnte ich diesen Posten ablegen und auf CrossValidated legen, wenn Sie meinen, dass er es akzeptieren könnte. –

Antwort

1

Die Out-of-Sample-Maßnahmen angeboten von Caret sind RMSE, MAE und quadriert Korrelation zwischen Einbau und beobachteten Werten (zum Verwechseln genannt R2). Weitere Informationen finden Sie hier https://topepo.github.io/caret/measuring-performance.html

Zumindest im Zeitreihegressionskontext ist RMSE das Standardmaß für die Out-of-Sample-Performance von Regressionsmodellen.

Ich würde davon abraten, kontinuierliche Ergebnisvariable zu diskretisieren, weil Sie im Wesentlichen Informationen durch Diskretisierung wegwerfen.

+1

Schön, ich habe in der Dokumentation die Existenz der Methode 'postResample' komplett verpasst, die es Ihnen ermöglicht, Rsquared, RMSE und MAE eines Modells mit den Hold-out-Daten (d.h. Testdaten) zu berechnen. Ich kann jetzt diese Zahlen nehmen und sie sogar in einen Datenrahmen für den weiteren Vergleich setzen. Vielen Dank! –

Verwandte Themen