LOOCV बनाम k- गुना CV एक ही परिणाम की ओर जाता है
मैं एक रैखिक प्रतिगमन मॉडल का निर्माण करता हूं और इसका उपयोग आउट-ऑफ-सैंपल की भविष्यवाणी करने के लिए करता हूं। इस संदर्भ में, मैं LOOCV और k- गुना CV (5) का उपयोग करता हूं। हालाँकि, दोनों विधियाँ समान परिणाम की ओर ले जाती हैं। इन दो तरीकों के बीच एकमात्र मामूली अंतर इन-सैंपल अनुमानों के लिए सटीकता उपायों के लिए थोड़ा भिन्न मूल्य है (नीचे परिणाम देखें)।
यहाँ क्या हो रहा है; क्या मुझे एक बिंदु याद आ रहा है?
library(mlbench)
library(caret)
data(BostonHousing)
df <- BostonHousing
######
set.seed(12345)
train.index <- createDataPartition(df$medv, p = 0.75, list = FALSE)
train <- df[train.index, ]
test <- df[-train.index, ]
#####
fitControl <- trainControl(method = "LOOCV")
mod1 <- train(medv ~ crim + zn + rm,
data = train,
method = "lm",
trControl = fitControl)
preds1 <- predict(mod1, newdata = test)
#####
fitControl2 <- trainControl(method = "repeatedcv", number = 5, repeats = 10)
mod2 <- train(medv ~ crim + zn + rm,
data = train,
method = "lm",
trControl = fitControl2)
preds2 <- predict(mod2, newdata = test)
परिणाम निम्नानुसार हैं:
गुणांक:
coef(summary(mod1))
coef(summary(mod2))
LOOCV k-fold
(Intercept) -28.74077696 -28.74077696
crim -0.23736504 -0.23736504
zn 0.04259996 0.04259996
rm 8.21720224 8.21720224
इन-सैंपल फिट:
mod1$results mod2$results
LOOCV k-fold
RMSE 6.16378 6.083234
Rsquared 0.5437839 0.5727744
MAE 4.176978 4.174368
आउट-ऑफ-सैंपल फिट:
postResample(preds1, obs = test$medv) postResample(preds2, obs = test$medv)
LOOCV k-fold
RMSE 4.1298679 4.1298679
Rsquared 0.5489697 0.5489697
MAE 4.1298679 4.1298679
जवाब
सबसे पहले, दो कारणों से आपके विशेष मामले में अंतिम मॉडल ( mod1$finalModel
और mod1$finalModel
) समान हैं:
आप वास्तव में धुन नहीं करते हैं, आप एक एकल मॉडल को प्रशिक्षित करते हैं जो रैखिक मॉडल है
intercept = TRUE
)।टेल्टेल लाइन का आउटपुट है
print(mod2)
:ट्यूनिंग पैरामीटर 'इंटरसेप्ट' को TRUE के मान पर स्थिर रखा गया था
आप इसे भी देख सकते हैं
mod2$results
:intercept RMSE Rsquared MAE RMSESD RsquaredSD MAESD 1 TRUE 6.121066 0.5568386 4.187102 0.9087823 0.1089092 0.4691107
इसकी तुलना करें:
mod3 <- train(medv ~ crim + zn + rm, data = train, method = "lm", tuneGrid = data.frame (intercept = c(FALSE, TRUE)), trControl = fitControl) mod3 # [...snip...] # Resampling results across tuning parameters: # # intercept RMSE Rsquared MAE # FALSE 6.818821 0.4592127 4.844369 # TRUE 6.163780 0.5437839 4.176978 # # RMSE was used to select the optimal model using the smallest value. # The final value used for the model was intercept = TRUE. mod3$results # intercept RMSE Rsquared MAE # 1 FALSE 6.818821 0.4592127 4.844369 # 2 TRUE 6.163780 0.5437839 4.176978
ट्यूनिंग परिणाम के दौरान इनर क्रॉस सत्यापन हाइपरपरमीटर सेट में होता है, लेकिन अभी तक अंतिम मॉडल में नहीं है। अंतिम मॉडल इस हाइपरपरमीटर सेट और सभी डेटा के साथ प्रशिक्षण द्वारा प्राप्त किया जाता है जिसे सौंप दिया गया था
train()
।चाहे आपके द्वारा चुने गए क्रॉस सत्यापन / बूटस्ट्रैप रूटीन के बावजूद, जब तक ट्यून किए गए हाइपरपरमेट सेट समान होते हैं, अंतिम मॉडल भी समान होगा (कम से कम नियतात्मक प्रशिक्षण दिनचर्या जैसे
lm()
)।तो, अगर आपने ट्यून किया था, तब भी एक ही मॉडल का परिणाम होगा: एक के साथ
intercept = TRUE
।