Beachten Sie, dass die ursprüngliche Frage, die Sie gepostet haben, sich um das timeSlicing kümmert und Sie timeSlices nicht manuell erstellen müssen.
Hier ist jedoch, wie createTimeSlices
zum Teilen der Daten und dann zum Training und Testen eines Modells zu verwenden.
Schritt 0: die Daten einrichten und trainControl
: (aus Ihrer Frage)
library(caret)
library(ggplot2)
library(pls)
data(economics)
Schritt 1: Erstellen der Zeitscheiben für den Index der Daten:
timeSlices <- createTimeSlices(1:nrow(economics),
initialWindow = 36, horizon = 12, fixedWindow = TRUE)
Dies erzeugt eine Liste von Trainings- und Testzeiten.
> str(timeSlices,max.level = 1)
## List of 2
## $ train:List of 431
## .. [list output truncated]
## $ test :List of 431
## .. [list output truncated]
Zum leichteren Verständnis, bin ich sie in separater Variable speichern:
trainSlices <- timeSlices[[1]]
testSlices <- timeSlices[[2]]
Schritt 2: Training auf dem ersten von dem trainSlices
:
plsFitTime <- train(unemploy ~ pce + pop + psavert,
data = economics[trainSlices[[1]],],
method = "pls",
preProc = c("center", "scale"))
Schritt 3: Testen auf der erste der trainSlices
:
pred <- predict(plsFitTime,economics[testSlices[[1]],])
Schritt 4: Plotten:
true <- economics$unemploy[testSlices[[1]]]
plot(true, col = "red", ylab = "true (red) , pred (blue)", ylim = range(c(pred,true)))
points(pred, col = "blue")
Sie können dies dann tun für alle Scheiben:
for(i in 1:length(trainSlices)){
plsFitTime <- train(unemploy ~ pce + pop + psavert,
data = economics[trainSlices[[i]],],
method = "pls",
preProc = c("center", "scale"))
pred <- predict(plsFitTime,economics[testSlices[[i]],])
true <- economics$unemploy[testSlices[[i]]]
plot(true, col = "red", ylab = "true (red) , pred (blue)",
main = i, ylim = range(c(pred,true)))
points(pred, col = "blue")
}
Wie bereits erwähnt, ist diese Art von Zeitschlitzen durch Ihre ursprüngliche Funktion in einem Schritt durchgeführt wird:
> myTimeControl <- trainControl(method = "timeslice",
+ initialWindow = 36,
+ horizon = 12,
+ fixedWindow = TRUE)
>
> plsFitTime <- train(unemploy ~ pce + pop + psavert,
+ data = economics,
+ method = "pls",
+ preProc = c("center", "scale"),
+ trControl = myTimeControl)
> plsFitTime
Partial Least Squares
478 samples
5 predictors
Pre-processing: centered, scaled
Resampling: Rolling Forecasting Origin Resampling (12 held-out with a fixed window)
Summary of sample sizes: 36, 36, 36, 36, 36, 36, ...
Resampling results across tuning parameters:
ncomp RMSE Rsquared RMSE SD Rsquared SD
1 1080 0.443 796 0.297
2 1090 0.43 845 0.295
RMSE was used to select the optimal model using the smallest value.
The final value used for the model was ncomp = 1.
Hoffe, das hilft !!
Es würde helfen, wenn Sie definiert, was Sie unter „Modellevaluierung“ bedeuten. – topepo
Ich habe meine Frage bearbeitet. Vielleicht ist es jetzt einfacher zu verstehen? –
1. Paket 'pls' muss installiert werden 2. Wenn Sie nur über die Reihenfolge der Proben besorgt sind (nicht den Monat oder Jahr spezifisch), könnten Sie ihnen eine numerische ID geben und Sie könnten immer noch bootstrapping 3. Warum nicht etwas so einfaches wie ein Glm verwenden? –