我有一個巨大的數據集,我對R很新,所以我能想到的自己實現100倍CV的唯一方法是通過許多for和如果這對我的龐大數據集來說效率極低,甚至可能需要幾個小時才能編譯。我開始尋找能夠做到這一點的軟件包,並且在stackoverflow上發現了很多與CV有關的主題,並且我一直在嘗試使用我發現的那些主題,但是他們都沒有爲我工作,我想知道我在做什麼錯誤這裏。R嶺迴歸的100倍交叉驗證
例如,從DAAG
包驗證碼:
cv.lm(data=Training_Points, form.lm=formula(t(alpha_cofficient_values)
%*% Training_Points), m=100, plotit=TRUE)
..gives我下面的錯誤:
Error in formula.default(t(alpha_cofficient_values)
%*% Training_Points) : invalid formula
我試圖做核嶺迴歸,所以我有阿爾法系數值已計算。因此,爲了得到預測結果,我只需要做t(alpha_cofficient_values)%*% Test_Points
或簡單地crossprod(alpha_cofficient_values,Test_Points)
,這會給我所有對未知值的預測。所以我假設爲了測試我的模型,我應該做同樣的事情,但對於已知值,因此我需要使用我的Training_Points數據集。
我的Training_Points數據集有9000列和9000行。我可以編寫for和if,並且每次將100行作爲test_data執行100-fold並保留8900行進行訓練,直到整個數據集完成,然後取平均值,然後與我的已知值進行比較。但是沒有一套方案能做到這一點嗎? (如果可能,理想情況下也將預測值與已知值進行比較並繪製它們)
請原諒我的基本問題,我對R和交叉驗證都很新,所以我可能會缺少一些基本的點。
我不太明白你是如何擁有係數的,因爲這100個不同的模型會有所不同。那麼你有9000×100的係數矩陣嗎? – timcdlucas
您可以使用插入符號包(我會在檢查運行時間後添加一個答案)。具有9k個預測變量不可避免地使其變得相當緩慢。你需要做100倍交叉驗證嗎? 10倍合理嗎? – timcdlucas
呵呵,caret並沒有內建的kernel ridge迴歸,你必須添加它。 – timcdlucas