2013-12-09 9 views
12

Mi è stato detto di utilizzare il pacchetto di accento circonflesso per eseguire la regressione di Support Vector Machine con una convalida incrociata di 10 volte su un set di dati che ho. Sto tracciando la mia variabile di risposta su 151 variabili. Ho fatto la seguente: -SVM con convalida incrociata in R utilizzando l'accento circonflesso

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

in cui ho avuto

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 

ma voglio essere in grado di dare un'occhiata alle mie pieghe, e per ciascuno di essi come chiudere i valori previsti dovessero i valori attuali. Come faccio a guardarlo?

Inoltre, si dice che: -

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

Mi stavo chiedendo cosa questo significasse e quale la C sta per nella tabella di cui sopra?

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 

Questo è uno snipet del mio set di dati. Sto provando a riempire RT secondi contro 151 variabili.

Grazie

risposta

16

Devi salvare le previsioni CV tramite l'opzione "savePred" nel tuo trainControl oggetto. Non sono sicuro di quale pacchetto dati "cadetti" è da, ma ecco un esempio banale utilizzando iride:

> 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: La "C" è uno dei parametri di ottimizzazione per il vostro SVM. Consulta la guida per la funzione ksvm nel pacchetto kernlab per maggiori dettagli.

Edit2: esempio di regressione Trivial

> 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

Ciao, grazie per la risposta. Ho modificato il bit in trainControl proprio per questo, e ho incluso parte del set di dati che sto guardando (il dataset dei cadets). Non so come modificare il bit head (mod $ pred) in modo che possa guardare gli RT (secondi) che sono stati previsti dal modello che ho appena creato mentre sto modellando RT secondi contro 151 variabili descrittive. Come lo farei in questo caso? Spero che questo abbia senso – user2062207

+0

Non dovresti modificare la parte 'mod $ pred'. Il tuo oggetto "mod" è il tuo modello di accento circonflesso che è un elenco che contiene un elemento denominato "pred" che contiene le tue previsioni del CV. – David

+0

Continuo a ricevere NULL ogni volta che cerco di farlo comunque. Non è mod $ pred usato per la classificazione? Sto cercando di fare una regressione che potrebbe spiegare perché questo sta accadendo – user2062207