2015-11-02 27 views
6

讓我首先說我已經閱讀了很多有關交叉驗證的文章,看起來有很多困惑。我的理解僅僅是這樣的:使用插入符號包應用k-fold交叉驗證模型

  1. 進行k倍交叉驗證,即10倍,以瞭解10倍的平均誤差。
  2. 如果可以接受,則在整個數據集上訓練模型。

我正在嘗試使用R中的rpart構建決策樹並利用caret包。以下是我正在使用的代碼。

# load libraries 
library(caret) 
library(rpart) 

# define training control 
train_control<- trainControl(method="cv", number=10) 

# train the model 
model<- train(resp~., data=mydat, trControl=train_control, method="rpart") 

# make predictions 
predictions<- predict(model,mydat) 

# append predictions 
mydat<- cbind(mydat,predictions) 

# summarize results 
confusionMatrix<- confusionMatrix(mydat$predictions,mydat$resp) 

我有一個關於脫字符串應用程序的問題。我已閱讀A Short Introduction to the caret Package列車部分,它在重新採樣過程中指出「最佳參數集」已確定。

在我的例子中,我是否正確地編碼了它?我是否需要在我的代碼中定義rpart參數或者我的代碼是否足夠?

回答

15

當您執行k-fold交叉驗證時,您已經對每個樣本進行了預測,只是超過10個不同的模型(假設k = 10)。 無需對完整的數據進行預測,因爲您已經從k個不同的模型中預測它們。

你可以做的是:

train_control<- trainControl(method="cv", number=10, savePredictions = TRUE) 

然後

model<- train(resp~., data=mydat, trControl=train_control, method="rpart") 
如果你想看到

所觀察到的,並在一個不錯的格式預測你只需鍵入:

model$pred 

對於你的問題的第二部分,插入符號應該處理所有的參數。如果您願意,您可以手動嘗試調整參數。

1

在插頁軟件包short introduction document的第一頁中提到了跨參數選擇最佳模型。 作爲一個起點,我們必須明白,交叉驗證是選擇最佳建模方法的過程,而不是模型本身CV - Final model selection。插入符使用tuneGrid提供網格搜索選項,您可以在其中提供要測試的參數值列表。最終模型在訓練完成後將具有優化的參數。

3

這裏要注意的一個重要的事情不是混淆模型選擇和模型誤差估計。

您可以使用交叉驗證來估計模型超參數(例如正則化參數)。

通常這是通過10倍交叉驗證完成的,因爲它是偏差 - 方差權衡的良好選擇(2倍可能導致高偏差模型,留下一個CV可能導致具有高方差/過擬合)。

之後,如果你沒有獨立的測試集,你可以使用交叉驗證來估計一些性能指標的經驗分佈:一旦你發現了最好的超參數,你可以使用它們來估計de cv錯誤。

請注意,在此步驟中,超參數是固定的,但模型參數在交叉驗證模型中可能不同。