2013-12-09 28 views
12

Ich wurde aufgefordert, das Caret-Paket zu verwenden, um Support Vector Machine Regression mit 10-facher Kreuzvalidierung auf einen Datensatz, den ich habe, durchzuführen. Ich zeichne meine Antwortvariable gegen 151 Variablen auf. Ich habe die folgenden: -SVM mit Kreuzvalidierung in R mit Caret

> ctrl <- trainControl(method = "repeatedcv", repeats = 10) 
> set.seed(1500) 
> mod <- train(RT..seconds.~., data=cadets, method = "svmLinear", trControl = ctrl) 

in denen bekam ich

C RMSE Rsquared RMSE SD Rsquared SD 
    0.2 50 0.8  20  0.1   
    0.5 60 0.7  20  0.2   
    1 60 0.7  20  0.2 

Aber ich möchte einen Blick auf meine Falten haben zu können, und für jeden von ihnen, wie nahe die vorhergesagten Werte waren die tatsächlichen Werte. Wie sehe ich das an?

Auch heißt es, dass: -

RMSE was used to select the optimal model using the smallest value. 
The final value used for the model was C = 0. 

Ich habe mich nur gefragt, was das bedeutete und was das C steht für die in der Tabelle oben?

RT (seconds) 76_TI2 114_DECC 120_Lop 212_PCD 236_X3Av 
38 4.086 1.2 2.322 0 0.195 
40 2.732 0.815 1.837 1.113 0.13 
41 4.049 1.153 2.117 2.354 0.094 
41 4.049 1.153 2.117 3.838 0.117 
42 4.56 1.224 2.128 2.38 0.246 
42 2.96 0.909 1.686 0.972 0.138 
42 3.237 0.96 1.922 1.202 0.143 
44 2.989 0.8 1.761 2.034 0.11 
44 1.993 0.5 1.5 0 0.102 
44 2.957 0.8 1.761 0.988 0.141 
44 2.597 0.889 1.888 1.916 0.114 
44 2.428 0.691 1.436 1.848 0.089 

Dies ist ein Snipet meines Datensatzes. Ich versuche, RT Sekunden gegen 151 Variablen zu kippen.

Dank

Antwort

16

Sie haben Ihren Lebenslauf Vorhersagen über die "savePred" Option in Ihrem trainControl Objekt zu speichern. Ich bin nicht sicher, welches Paket Ihrer „Kadetten“ Daten aus, aber hier ist ein triviales Beispiel Iris mit:

> library(caret) 
> ctrl <- trainControl(method = "cv", savePred=T, classProb=T) 
> mod <- train(Species~., data=iris, method = "svmLinear", trControl = ctrl) 
> head(mod$pred) 
     pred  obs  setosa versicolor virginica rowIndex .C Resample 
1  setosa  setosa 0.982533940 0.009013592 0.008452468  11 0.25 Fold01 
2  setosa  setosa 0.955755054 0.032289120 0.011955826  35 0.25 Fold01 
3  setosa  setosa 0.941292675 0.044903583 0.013803742  46 0.25 Fold01 
4  setosa  setosa 0.983559919 0.008310323 0.008129757  49 0.25 Fold01 
5  setosa  setosa 0.972285699 0.018109218 0.009605083  50 0.25 Fold01 
6 versicolor versicolor 0.007223973 0.971168170 0.021607858  59 0.25 Fold01 

EDIT: Die „C“ ist eine der Tuning-Parameter für die SVM. Weitere Informationen finden Sie in der Hilfe zur ksvm-Funktion im kernlab-Paket.

EDIT2: Trivial Regression Beispiel

> library(caret) 
> ctrl <- trainControl(method = "cv", savePred=T) 
> mod <- train(Sepal.Length~., data=iris, method = "svmLinear", trControl = ctrl) 
> head(mod$pred) 
     pred obs rowIndex .C Resample 
1 4.756119 4.8  13 0.25 Fold01 
2 4.910948 4.8  31 0.25 Fold01 
3 5.094275 4.9  38 0.25 Fold01 
4 4.728503 4.8  46 0.25 Fold01 
5 5.192965 5.3  49 0.25 Fold01 
6 5.969479 5.9  62 0.25 Fold01 
+0

Hallo Danke für die Antwort. Ich habe das Bit im trainControl zu genau diesem geändert, und ich habe einen Teil des Datensatzes, den ich gerade betrachte (den Datensatz der Kadetten), hinzugefügt. Ich weiß nicht, wie man das Kopfbit (mod $ pred) ändert, so dass ich die RT (Sekunden) betrachten kann, die von dem gerade erstellten Modell vorhergesagt wurden, während ich RT Sekunden gegen 151 Deskriptorvariablen modelliere. Wie würde ich es in diesem Fall tun? Ich hoffe, das macht Sinn – user2062207

+0

Sie sollten den 'mod $ pred' Teil nicht ändern müssen. Ihr "Mod" -Objekt ist Ihr Caret-Modell, das eine Liste enthält, die ein Element namens "pred" enthält, das Ihre CV-Vorhersagen enthält. – David

+0

Ich bekomme immer NULL, jedes Mal wenn ich das versuche, das aber. Wird nicht mod $ pred für die Klassifizierung verwendet? Ich versuche eine Regression zu machen, die erklären könnte, warum das passiert. – user2062207

Verwandte Themen