題:
k折交叉驗證後如何選擇預測模型?
Berk U.
2013-03-15 07:21:38 UTC
view on stackexchange narkive permalink

我想知道在進行K折交叉驗證後如何選擇預測模型。

這句話可能有些笨拙,所以讓我更詳細地解釋一下:每當我執行K折交叉驗證時,我都會使用K個訓練數據子集,最後得到K個不同的模型。

我想知道如何選擇K個模型之一,以便可以將其呈現給某人並說“這是我們可以生產的最好的模型”。

可以選擇K個模型中的任何一個嗎?還是涉及某種最佳實踐,例如選擇實現中值測試誤差的模型?

您可能會發現以下問題的答案很有幫助:http://stats.stackexchange.com/questions/2306/feature-selection-for-final-model-when-performing-cross-validation-in-machine?rq=1
您將需要重複5倍CV 100次並取平均結果以獲得足夠的精度。 @bogdanovist的答案就在現場。您可以通過更少的模型擬合從引導程序獲得相同的精度估計精度。
@Frank Harrell,為什麼您說100次重複是必要的(我通常在10折上使用10次重複),這是經驗法則,因為OP沒有提供任何細節嗎?
對於10折簡歷,最好重複$ \ geq 50 $次。 5倍需要更多重複。這些是經驗法則。一個10倍的簡歷會給出一個不穩定的答案,即重複10次拆分,您將獲得足夠多的其他答案供您擔心。
幾乎完全相同:http://stats.stackexchange.com/questions/11602,其中包含許多有價值的答案。也許這些線程應該合併,但是我不確定哪個方向。雙方都接受了非常好的答案。但是另一個比較老,並且有更多的視圖/投票,因此將這個合併到另一個可能是有意義的。
六 答案:
Bogdanovist
2013-03-15 07:53:12 UTC
view on stackexchange narkive permalink

我認為您在理解交叉驗證的目的上仍然缺少一些東西。

讓我們直接講一些術語,通常當我們說“模型”時,我們指的是一種特定的方法描述一些輸入數據與我們試圖預測的內容之間的關係。通常,我們通常不會將該方法的特定實例稱為不同的模型。因此,您可能會說“我有線性回歸模型”,但是不會將兩組不同的訓練係數稱為不同模型。至少不是在模型選擇的情況下。

因此,當您進行K折交叉驗證時,您正在測試模型能夠被某些數據訓練到何種程度,然後預測其尚無數據的能力。沒看到。我們為此使用交叉驗證,因為如果您使用所擁有的所有數據進行訓練,那麼您將沒有任何可用於測試的數據。您可以執行一次此操作,例如使用80%的數據進行訓練而使用20%的數據進行測試,但是如果您碰巧選擇要測試的20%的數據恰好包含一堆特別容易(或特別困難)的點,該怎麼辦?預測?我們不會對模型的學習和預測能力提出最佳的估計。

我們想使用所有數據。因此,繼續上面的80/20分割示例,我們將通過對80%的數據進行5次訓練並對20%的數據進行測試,進行5次交叉驗證。我們確保每個數據點最終一次進入20%測試集中。因此,我們已經使用了每個數據點,以幫助理解我們的模型如何良好地執行從某些數據中學習並預測一些新數據的任務。

但是交叉驗證的目的不是提出我們的最​​終模型。我們不會使用我們訓練後的模型的這5個實例來進行任何實際的預測。為此,我們要使用所有數據,我們必須提供最佳模型。交叉驗證的目的是模型檢查,而不是模型構建。

現在,說我們有兩個模型,例如線性回歸模型和神經網絡。我們如何說哪種模式更好?我們可以進行K折交叉驗證,看看哪一種方法在預測測試設定點方面更有效。但是,一旦我們使用交叉驗證選擇了性能更好的模型,便會在所有數據上訓練該模型(無論是線性回歸還是神經網絡)。對於最終的預測模型,我們不會使用在交叉驗證中訓練的實際模型實例。

請注意,有一種稱為引導聚合(通常簡稱為“裝袋”)的技術會以某種方式使用以與交叉驗證相似的方式生成的模型實例來構建集成模型,但這是一種超出您問題範圍的高級技術。

我完全同意這一點,並考慮使用所有數據。就是說,如果我們使用整個數據集訓練最終模型,那麼這是否會導致過度擬合併破壞未來的預測?
沒有!過擬合與模型的複雜性有關,與用於訓練模型的數據量無關。模型的複雜性與模型使用的方法有關,而與參數所採用的值無關。例如,是否在回歸模型中包括x ^ 2係數以及x係數。
@Bogdanovist:我要說的是,過度擬合與模型太複雜而訓練案例太少有關。因此,它(也)與培訓案例的數量有關。但是,擁有更多的培訓案例將減少過度擬合的風險(對於恆定的模型複雜性)。
@Bogdanovist我完全同意您的觀點!您能推荐一些解釋此內容的論文(或書籍章節)嗎?
我相信您已經把我遺失的那一塊拼圖給了我!非常感謝!
@Bogdanovist`為此,我們要使用所有數據,因此我們必須盡可能地得出最佳模型。在整個訓練數據上擬合模型,然後使用測試集評估泛化性能?
@arun,,如果您使用了k倍交叉驗證並選擇了具有最佳參數和超參數的最佳模型,那麼在將最終模型擬合到訓練集之後,則無需使用測試集再次檢查性能。這是因為您已經檢查了帶有指定參數的模型在看不見的數據上的表現。
您將使用哪種測試指標來比較兩個不同的模型,例如回歸模型和神經網絡?如果回歸使最小平方誤差最小,那麼如果使用平方誤差測試指標,它是否可能會比測試數據的神經網絡好呢?
在我看來,“為此,我們要使用所有數據,必須盡可能地得出最佳模型。”這就是為什麼我們會遇到過度擬合的問題。
如果我們對整個數據進行訓練,那麼我們將報告什麼是測試錯誤或性能錯誤?我們是否將在交叉驗證中獲得的結果報告為所選模型的性能指標?
我相信@arun提出的問題是有意義的,而我不同意以下答案:交叉驗證可幫助我們從一組模型中進行選擇,並且應在一組訓練中進行。為了評估我們選擇的最佳模型是否具有預測性,應在獨立的測試集(即未執行交叉驗證的測試集)上進行測試。參見,例如: http://scikit-learn.org/stable/modules/cross_validation.html
@Bogdanovist感謝您提供有用的答案。在某些應用中,具有驗證集對於模型訓練至關重要,例如對於較早的停止而言。在這種情況下,由於缺少驗證集,最終培訓(針對整個數據)可能無法正確完成。例如在訓練深度神經網絡或GBM中應用了早期停止的情況下就是這種情況。所以我的問題是,如何在整個數據上訓練模型,而又沒有任何標準知道在哪裡停止訓練(這可能導致過度擬合)?
-1
我對@M.Reza也有同樣的疑問。如果我們使用整個數據集來重新訓練模型,則意味著我們缺少有效的集合。在某些情況下,例如沒有有效設置的梯度增強,該模型將嚴重過擬合。有什麼建議 ?謝謝
博格達諾夫主義者的答案對於一般情況是正確的;CV平均誤差是對所有數據訓練的模型的最佳估計。沒有理由認為驗證集上的結果是更好的估計,實際上,由於方差較大,因此對於較小的數據集,準確性可能較低。@M.Reza和Catbuilts提出的問題是該規則的例外,僅是因為提前停止方法的邏輯需要獨立的有效集。
@ Bogdanovist-我們能否將不同的超參數設置視為不同的模型。例如。具有不同隱藏層的NN作為不同模型,還是具有不同高度的決策樹作為不同模型?
那麼,我們通常所說的“假設”是什麼意思?
cbeleites unhappy with SX
2013-03-15 17:22:58 UTC
view on stackexchange narkive permalink

除了博格達諾夫主義者的答案

,我要講幾分,就像您說的那樣,您訓練$ 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

當您說“選擇最佳模型”是數據驅動的優化時,您和Bogdanovist意見不一致,您需要使用新的未知數據來驗證(衡量性能)此選擇的模型。交叉驗證中的測試集不是獨立的,因為它是用來選擇替代模型的。”他說,“但是一旦我們使用交叉驗證來選擇性能更好的模型,我們便會訓練該模型(是否為線性回歸或神經網絡)。這非常普遍,並且指定標準化方法至關重要
特別是對於小型數據集,其中可能遺漏了CV數據是不可行的,但是過擬合模型的風險也很高!需要參考來澄清此問題。
@jpcgandre:我沒有任何分歧。Bogdanovist解釋瞭如何根據通過交叉驗證選擇的超參數實際計算選擇的模型,我補充說,選擇之後,模型需要進行另一個(外部)獨立驗證級別。換句話說,例如嵌套驗證設計:用於選擇超參數的內部驗證循環,用於測試所選模型的外部循環(如果碰巧有足夠的情況,您也可以使用獨立的測試集)。
內部/外部驗證設置是用於交叉驗證的,稱為雙重或嵌套交叉驗證,我也看到它也稱為交叉模型驗證(http://dx.doi.org/10.1016/j.chemolab.2006.04.021)。對於獨立的測試集,它對應於三組拆分:訓練/(優化)驗證/測試(=最終驗證)。如果您遇到的情況很少,您就不能遺漏第二級CV的數據,那麼我認為您應該通過其他方法來修復您的超參數,而不是嘗試通過選擇其中一個超參數來進行優化。
@cbeleites我有一個問題。然後,要獲取最終模型參數,您是否需要從每個外部折疊中獲取超參數的平均值,並使用該平均超參數重新訓練整個數據集?還是在常規CV中進行超參數搜索,然後使用重複的嵌套CV確認此方法的穩定性,還是可行的?
@Michelle:我將內部簡歷視為培訓過程的一部分。從這個角度來看,對整個數據集進行訓練意味著對整個數據集進行了另一個超參數優化。我敢肯定,我前段時間對此寫了一個更長的答案,但現在找不到。
Patrick Ng
2018-01-13 12:56:38 UTC
view on stackexchange narkive permalink

我發現這篇出色的文章如何訓練最終機器學習模型對於消除我在機器學習中使用CV的所有困惑非常有幫助。

基本上,我們使用CV(例如80/20拆分,k倍等)來評估整個過程(包括數據工程,模型(即算法)選擇和超參數等)的執行情況關於未來看不見的數據。一旦您選擇了獲勝的“程序”,CV的擬合模型即已達到目的,現在可以丟棄。然後,您使用相同的獲勝“過程”,並使用整個數據集訓練最終模型。

Canhua Li
2017-01-04 13:40:26 UTC
view on stackexchange narkive permalink

這是一個非常有趣的問題。為了清楚起見,我們應該了解模型和模型評估的區別。我們使用完整的訓練集來構建模型,我們希望該模型最終可以使用。

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
 
Saeed
2018-10-21 18:39:28 UTC
view on stackexchange narkive permalink

為什麼要使用k倍交叉驗證?

交叉驗證是一種在看不見的數據上估算方法技巧的方法。就像使用火車測試拆分一樣。

交叉驗證系統地創建和評估數據集多個子集上的多個模型。 這又提供了一系列績效指標

  • 我們可以計算這些度量的平均值來了解how 該程序平均執行良好。
  • 我們可以計算這些度量的標準偏差,以得出 的想法該程序的技能預計會在多少 實踐.

當您嘗試選擇要使用的算法和數據準備程序時,這也有助於將一個過程與另一個過程進行更細微的比較。

此外,此信息非常有用,因為您可以使用平均值和分佈來給出實踐中機器學習過程的預期性能的置信區間。

參考

DataExplorer
2014-11-05 22:59:47 UTC
view on stackexchange narkive permalink

我不確定以上討論是否完全正確。在交叉驗證中,我們可以針對每次運行將數據分為培訓和測試。僅使用訓練數據,就需要擬合模型並在所考慮的每一類模型中選擇調整參數。例如,在神經網絡中,調整參數是神經元的數量和激活功能的選擇。為了做到這一點,一個人單獨對培訓數據進行交叉驗證。

一旦找到每個類別中的最佳模型,就會使用測試數據評估最佳擬合模型。 “外部”交叉驗證循環可用於更好地評估測試數據性能以及評估可變性。然後,討論可以比較不同類別(例如神經網絡與SVM)的測試性能。選擇一個模型類,並固定模型大小,現在使用全部數據來學習最佳模型。

現在,如果作為機器學習算法的一部分,您想要不斷地選擇最佳模型類別(例如每週一次),那麼即使是這種選擇也需要在訓練數據中進行評估!如果測試數據測量是動態選項,則不能用來判斷模型類別的選擇。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...