2014-01-27 48 views
1

我有一個506行的數據集,我正在執行Leave-one-out交叉驗證,一旦得到均方誤差,我計算均方差的均值我發現錯誤。每次運行它都會改變。這是預期的嗎?如果是這樣,有人可以解釋爲什麼每次運行它時都會改變它?在R中使用lm函數留下一個交叉驗證

爲此留出一個簡歷,我第一次洗牌的行,df是數據幀

df <-df[sample.int(nrow(df)),] 

然後,我分裂數據幀到506個的數據幀,並將其發送到LM(),並得到了MSE對於每一個數據幀(在這種情況下,每一行)

fit <- lm(train[,lastcolumn] ~.,data = train) 
pred <- predict(fit,test) 
pred <- mean((pred - test[,lastcolumn])^2) 

然後我把我得到的所有中小企業的意思。

每次我運行所有這些,我有不同的意思。這是預期的嗎?

+1

請提供一個可重現的例子。 –

+0

@MatthewLundberg,希望這個編輯有幫助 – pa1geek

+0

可重複的手段提供樣本數據。如果更方便,您也可以使用其中一個內置數據集(請參閱'?data')。 –

回答

2

一次性交叉驗證是一種驗證範例。你必須說明你正在使用什麼算法進行預測,並且必須查看預測算法中是否有一些隨機初始化參數。如果該初始化隨機更改,則每次運行底層算法時都可以解釋不同的結果。您必須提及您正在使用哪種估算器/預測算法。如果您使用高斯混合模型,例如對於平均值和協方差的不同初始化進行分類,這將成爲LOOCV中性能不一定總是相同的可能算法。高斯混合模型和K均值算法通常隨機選擇數據點來表示均值。如果我用一個信息理論標準來估計高斯數,混合體中的高斯數也可以隨着不同的初始化而變化。