2013-12-09 27 views
12

我被告知要使用插入符號包來執行支持向量機迴歸,並對數據集進行10次交叉驗證。我正在對151個變量繪製我的響應變量。我做了以下內容: -在R中使用插入符號進行交叉驗證的SVM

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

中,我得到了

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 

但我希望能看看我的褶皺,併爲他們每個人的預測值有多接近人到實際值。我怎麼去看這個?

此外,它說: -

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

我只是想知道這意味着什麼,什麼C代表在上面的表?

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 

這是我的數據集snipet。我試圖將RT秒數對151個變量進行調整。

感謝

回答

16

你必須通過你的trainControl對象中的「savePred」選項來保存你的簡歷的預測。我不知道你的「學員」的數據是從什麼包,但這裏是使用虹膜一個簡單的例子:

> 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 

編輯:「C」是爲您的SVM調整參數之一。查看kernlab軟件包中ksvm函數的幫助以獲取更多詳細信息。

EDIT2:平凡迴歸例如

> 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

您好感謝您的答覆。我已經將trainControl中的位更改爲這個,並且包含了我正在查看的部分數據集(學員數據集)。我不知道如何修改head(mod $ pred)位,以便我可以查看從我剛創建的模型預測的RT(秒),因爲我正在對151個描述符變量建模RT秒。在這種情況下我會怎麼做?我希望這是有道理的 – user2062207

+0

你不應該修改'mod $ pred'部分。您的「mod」對象是您的脫字符號模型,它是一個包含名爲「pred」的元素的列表,其中包含您的CV預測。 – David

+0

但是我每次嘗試這樣做時都會收到NULL的回報。是不是用於分類的mod $ pred?我試圖做迴歸,這可能解釋爲什麼會發生這種情況 – user2062207