我想知道在進行K折交叉驗證後如何選擇預測模型。
這句話可能有些笨拙,所以讓我更詳細地解釋一下:每當我執行K折交叉驗證時,我都會使用K個訓練數據子集,最後得到K個不同的模型。
我想知道如何選擇K個模型之一,以便可以將其呈現給某人並說“這是我們可以生產的最好的模型”。
可以選擇K個模型中的任何一個嗎?還是涉及某種最佳實踐,例如選擇實現中值測試誤差的模型?
我想知道在進行K折交叉驗證後如何選擇預測模型。
這句話可能有些笨拙,所以讓我更詳細地解釋一下:每當我執行K折交叉驗證時,我都會使用K個訓練數據子集,最後得到K個不同的模型。
我想知道如何選擇K個模型之一,以便可以將其呈現給某人並說“這是我們可以生產的最好的模型”。
可以選擇K個模型中的任何一個嗎?還是涉及某種最佳實踐,例如選擇實現中值測試誤差的模型?
我認為您在理解交叉驗證的目的上仍然缺少一些東西。
讓我們直接講一些術語,通常當我們說“模型”時,我們指的是一種特定的方法描述一些輸入數據與我們試圖預測的內容之間的關係。通常,我們通常不會將該方法的特定實例稱為不同的模型。因此,您可能會說“我有線性回歸模型”,但是不會將兩組不同的訓練係數稱為不同模型。至少不是在模型選擇的情況下。
因此,當您進行K折交叉驗證時,您正在測試模型能夠被某些數據訓練到何種程度,然後預測其尚無數據的能力。沒看到。我們為此使用交叉驗證,因為如果您使用所擁有的所有數據進行訓練,那麼您將沒有任何可用於測試的數據。您可以執行一次此操作,例如使用80%的數據進行訓練而使用20%的數據進行測試,但是如果您碰巧選擇要測試的20%的數據恰好包含一堆特別容易(或特別困難)的點,該怎麼辦?預測?我們不會對模型的學習和預測能力提出最佳的估計。
我們想使用所有數據。因此,繼續上面的80/20分割示例,我們將通過對80%的數據進行5次訓練並對20%的數據進行測試,進行5次交叉驗證。我們確保每個數據點最終一次進入20%測試集中。因此,我們已經使用了每個數據點,以幫助理解我們的模型如何良好地執行從某些數據中學習並預測一些新數據的任務。
但是交叉驗證的目的不是提出我們的最終模型。我們不會使用我們訓練後的模型的這5個實例來進行任何實際的預測。為此,我們要使用所有數據,我們必須提供最佳模型。交叉驗證的目的是模型檢查,而不是模型構建。
現在,說我們有兩個模型,例如線性回歸模型和神經網絡。我們如何說哪種模式更好?我們可以進行K折交叉驗證,看看哪一種方法在預測測試設定點方面更有效。但是,一旦我們使用交叉驗證選擇了性能更好的模型,便會在所有數據上訓練該模型(無論是線性回歸還是神經網絡)。對於最終的預測模型,我們不會使用在交叉驗證中訓練的實際模型實例。
請注意,有一種稱為引導聚合(通常簡稱為“裝袋”)的技術會以某種方式使用以與交叉驗證相似的方式生成的模型實例來構建集成模型,但這是一種超出您問題範圍的高級技術。
,我要講幾分,就像您說的那樣,您訓練$ k $不同的模型。它們的區別在於,訓練數據的1 /(k-1)與其他情況進行了交換。這些模型有時稱為替代模型,因為針對這些模型測得的(平均)性能被視為對在所有情況下訓練的模型的性能的替代。
現在,那裡是此過程中的一些假設。
假設1:替代模型等效於“整個數據”模型。
這種假設很常見,其症狀是眾所周知的k倍交叉驗證(或其他基於重採樣的驗證方案)的悲觀偏見。如果學習曲線仍具有正斜率(即較少的訓練樣本導致較差的模型),則替代模型的性能平均比“整體數據”模型的性能差。
假設2是假設1的較弱版本:即使代理模型平均比整個數據模型差,我們仍假定它們彼此等效。這樣就可以將$ k $替代模型的測試結果匯總為一個平均性能。
模型不穩定性導致這種假設的破裂:在$ N \ frac {k-1} {k} $上訓練的模型的真實性能培訓案例差異很大。您可以通過對$ k $倍交叉驗證進行迭代/重複(對$ k $子集進行新的隨機分配)並查看同一情況下不同代理模型的預測之間的方差(隨機差異)來衡量這一點。
有限數量的案例意味著性能測試將由於有限數量的測試案例而受到隨機誤差(方差)的影響。這種差異來源不同於(並因此增加了)模型不穩定差異。
觀察到的性能差異是由於這兩種差異來源引起的。
>您所考慮的“選擇”是一個數據集選擇:選擇一個替代模型意味著選擇一個訓練樣本子集,並聲稱該訓練樣本子集會導致一個高級模型。儘管可能確實如此,但是通常“偽造”是虛假的。無論如何,由於選擇“最佳”替代模型是數據驅動的優化,因此您需要使用新的未知數據來驗證(衡量性能)該選擇的模型。交叉驗證中的測試集不是獨立的,因為它是用來選擇代理模型的。
您可能想看一下我們的論文,它是關於分類的,通常情況比回歸要糟糕。但是,它顯示了這些方差和偏差的來源是如何相加的。
Beleites,C.和Neugebauer,U.和Bocklitz,T.和Krafft,C.和Popp,J .:分類模型的樣本大小規劃。 Anal Chim Acta,2013,760,25-33。
DOI:10.1016 / j.aca.2012.11.007
arXiv上接受的手稿:1211.1323
我發現這篇出色的文章如何訓練最終機器學習模型對於消除我在機器學習中使用CV的所有困惑非常有幫助。
基本上,我們使用CV(例如80/20拆分,k倍等)來評估整個過程(包括數據工程,模型(即算法)選擇和超參數等)的執行情況關於未來看不見的數據。一旦您選擇了獲勝的“程序”,CV的擬合模型即已達到目的,現在可以丟棄。然後,您使用相同的獲勝“過程”,並使用整個數據集訓練最終模型。
這是一個非常有趣的問題。為了清楚起見,我們應該了解模型和模型評估的區別。我們使用完整的訓練集來構建模型,我們希望該模型最終可以使用。
K倍交叉評估將建立K模型,但所有模型都將被刪除。 K模型僅用於評估。它只是產生了指標,以告訴您該模型與數據的擬合程度。
例如,您選擇LinearRegression算法並在同一訓練集上執行兩項操作:一項具有10倍交叉驗證,另一項具有20倍交叉驗證。回歸(或分類器)模型應該相同,但相關係數和根相對平方誤差不同。
下面是兩次使用weka進行10倍和20倍交叉驗證的運行
1st運行10倍
===運行信息===
測試模式:10倍交叉驗證
...
===分類器模型(完整的訓練集)===
線性回歸模型< ----這個模型是相同的
日期= 844769960.1903 *旅客編號-711510446549.7296
建立模型所需的時間:0秒
===交叉驗證=== < ----此後產生了不同的指標
===摘要===
相關係數0.9206
平均絕對誤差35151281151.9807
均方根誤差42707499176.2097
相對絕對誤差37.0147%
根相對平方誤差38.9596%
實例總數144
2次跑20倍
===運行信息===
...
測試模式:20倍交叉驗證
===分類器模型(完整的訓練集)===
線性回歸模型< ----這個模型是相同的
日期= 844769960.1903 *旅客編號-711510446549.7296
建立模型所需的時間:0秒
===交叉驗證=== < ----此後產生了不同的指標
===摘要===
相關係數0.9203
平均絕對誤差35093728104.8746
均方根誤差42790545071.8199
相對絕對誤差36.9394%
根相對平方誤差39.0096%
實例總數144
為什麼要使用k倍交叉驗證?
交叉驗證是一種在看不見的數據上估算方法技巧的方法。就像使用火車測試拆分一樣。
交叉驗證系統地創建和評估數據集多個子集上的多個模型。 這又提供了一系列績效指標。
當您嘗試選擇要使用的算法和數據準備程序時,這也有助於將一個過程與另一個過程進行更細微的比較。
此外,此信息非常有用,因為您可以使用平均值和分佈來給出實踐中機器學習過程的預期性能的置信區間。
我不確定以上討論是否完全正確。在交叉驗證中,我們可以針對每次運行將數據分為培訓和測試。僅使用訓練數據,就需要擬合模型並在所考慮的每一類模型中選擇調整參數。例如,在神經網絡中,調整參數是神經元的數量和激活功能的選擇。為了做到這一點,一個人單獨對培訓數據進行交叉驗證。
一旦找到每個類別中的最佳模型,就會使用測試數據評估最佳擬合模型。 “外部”交叉驗證循環可用於更好地評估測試數據性能以及評估可變性。然後,討論可以比較不同類別(例如神經網絡與SVM)的測試性能。選擇一個模型類,並固定模型大小,現在使用全部數據來學習最佳模型。
現在,如果作為機器學習算法的一部分,您想要不斷地選擇最佳模型類別(例如每週一次),那麼即使是這種選擇也需要在訓練數據中進行評估!如果測試數據測量是動態選項,則不能用來判斷模型類別的選擇。