交叉驗證-驗證列法使用驗證列法進行交叉驗證時,我們將數據集分為訓練集、驗證集和測試集。 該分流比由用戶指定。 是否有任何指導/參考來決定分流比(例如 60:20:20 / 70:15:15 / 50:25:25 / 80 :10:10)。 是否還根據觀察總數 -N 來選擇?
數據混合和清理預測建模和機器學習回复:交叉驗證 - 驗證列方法對於您最初的問題,不,對於要遺漏多少數據沒有具體規則。 在 JMP Education 分析課程中,我們建議您保留您願意接受的盡可能多的數據,至少保留 20%。 如果您覺得訓練集太小而無法容納那麼多行,請考慮 k 折交叉驗證。 您願意犧牲多少行來進行驗證? 使用 k = n / 那麼多行。 如果使用該公式 k < 5,請考慮留一法交叉驗證。
回复:交叉驗證 - 驗證列方法不客氣@sreekumarp 。
如果您將其中一個或多個答案視為解決方案,請立即將它們標記為解決方案,以幫助 JMP 社區的訪問者更輕鬆地找到他們正在尋找的答案。
如果您有更多問題或需要一些建議的具體案例,請隨時回答該主題或創建一個新主題。
回复:交叉驗證 - 驗證列方法感謝您在交叉驗證欄中提供的意見。
斯里庫瑪·蓬納皮利
回复:交叉驗證 - 驗證列方法感謝您提供有關機器學習中數據集分割的詳細信息。 我相信這會對我的研究有所幫助。
斯里庫瑪·蓬納皮利
回复:交叉驗證 - 驗證列方法你好@Victor_G ,
是的,我認為可能存在某種誤解。 也許我應該說有一個保留數據集而不是測試數據集。 保留數據集是從未在訓練、驗證或從給定算法(測試集)中選擇模型時使用的數據。 我使用這個保留集來比較不同的算法,看看哪種算法表現最好。 JMP 的模型比較平台對於使用保留集來比較不同算法非常有幫助。 這允許對不同算法進行公正且無洩漏的比較。 因此,它成為一種“測試”數據集,因為保留數據集用於查看哪種不同算法在此“純”數據集上表現最好。
這是我所知道的在 JMP 中相互比較不同算法的唯一方法。 我的意思是,這是 JMP 將神經網絡算法與 XGBoost 算法進行比較的唯一方法。 我永遠不會使用,也不建議使用保留數據集來比較平台內的不同模型。 我不會使用保留集來比較引導森林平台中的 20 個不同的調整模型,這將是測試數據集的目的。
所以,如果有任何誤解/困惑,我們深表歉意。 從現在開始,我將嘗試將其稱為保留集,以避免與測試集混淆。
感謝您的討論!,
DS
回复:交叉驗證 - 驗證列方法分層抽樣的優點@SDF1 !
抱歉,我們沒有使用相同的命名,否則會產生誤解。
如果您在測試集中引入多個模型來比較它們(並選擇一個),那麼無論使用什麼平台或模型,這都是一個問題,而不是該組的目的。 比較模型應該在驗證集上進行(以保持清晰和“純粹”的測試集,沒有任何信息洩漏或偏見),因此我之前的回答與有關該主題的一些資源。
請參閱 JMP 幫助,其中還強調了集合之間的差異:“測試集檢查模型的預測能力後已選擇模型。” : https://www.jmp.com/support/help/en/17.1/index.shtml#page/jmp/overview-of-the-make-validation-column-platform.shtml#ww269465
這也是良好定義不同集並固定它們或方法的重要性的原因,以便在同一驗證集(或相同方法)上正確評估不同模型。
回复:交叉驗證 - 驗證列方法你好@Victor_G ,
抱歉,如果不清楚,但我們實際上指的是同一件事。 當我之前提到模型時,我指的是使用相同的測試/驗證設置生成模型,而且還可以在 JMP 中跨不同平台生成模型。 我從不考慮任何一種平台來構建模型,而是使用不同的平台(例如 NN、BT、Bootstrap Forest、SVM、KNN 和 XGBoost)生成和調整模型,並使用訓練集和驗證集進行交叉驗證。 然後,在生成不同的模型後,我比較了它們在保留(測試)數據集上進行預測的能力,該數據集是所有模型在訓練和驗證步驟中都沒有見過的數據集。 有時 NN 效果最好,有時是 XGBoost 或其他平台。
最後@sreekumarp我在上一篇文章中忘記提到的一件事是,它確實有助於使用輸出列(您嘗試預測的列)對交叉驗證列進行分層。 這為您的訓練、驗證和測試數據集保留了類似的分佈結構。 有時這是無法做到的,特別是對於高度不平衡的數據集,但如果可能的話,我強烈推薦它。 如果不是,數據會隨機放置在每種類型的數據集中,這可能會導致驗證列劃分不合理,這通常會導致模型很差。
DS
回复:交叉驗證 - 驗證列方法你好@SDF1 ,
對您提供的重要補充的一個小修正:驗證集是用於模型比較和選擇的集合,而不是測試集(但有時測試和驗證名稱交替使用或混淆)。
這兩組有非常不同的目的:
- 測試集是數據的保留部分,未使用前選擇模型,以便提供模型泛化和預測性能的無偏估計。
- 驗證集是用於模型微調和模型比較的數據的一部分,以選擇最佳候選模型。
這裡給出一個解釋:機器學習 - 我可以使用測試數據集來選擇模型嗎? - 數據科學堆棧交換
對於這種使用差異的兩種解釋:
- 實用一:在數據科學競賽中,您無法訪問測試數據集,因此為了創建和選擇性能最佳的算法,您必須將數據拆分為訓練集和驗證集,並“希望”獲得良好的性能(和泛化)在看不見的測試集上。
- 理論一:如果您使用測試集來比較模型,那麼您實際上是在進行數據/信息洩漏,因為您可以通過在測試集上選擇性能最佳的算法來隨著時間的推移改進測試集上的結果(然後,也許繼續根據測試數據的性能對其進行微調或嘗試其他模型......)。 因此,您的測試集不再是公正的,因為算法的選擇(以及選擇後可能執行的其他操作)將在此基礎上進行。
測試集通常是模型創建/開發及其在生產或發布中的部署之間的最後一步,因此最終評估需要盡可能公平和公正。
集合上的一些資源:訓練、測試和驗證集 (mlu-explain.github.io)
MFML 071 - 測試和驗證之間有什麼區別? - YouTube
我希望這可以避免集合的命名和使用方面的任何混亂,
回复:交叉驗證 - 驗證列方法你好@sreekumarp ,
除了什麼@Victor_G寫道,我還強烈建議您拆分測試數據集並用它創建一個新的數據表。 這樣,當您訓練和驗證模型時,您可以在測試保留數據表上對它們進行比較,以了解哪個模型表現最好。 這減少了測試數據集意外用於訓練或驗證集的可能性。
您還可以通過其他方式使用模擬數據來訓練模型,然後在真實數據上測試模型。 當原始數據集很小並且需要保留輸入的相關結構時,我有時會使用這種方法。
祝你好運!,
DS
回复:交叉驗證 - 驗證列方法你好@sreekumarp ,
有趣的問題,恐怕我不會對你的問題給出明確的答复,因為它取決於數據集、要考慮的模型類型以及分析師(或進行分析的人)的實踐/習慣。
首先,了解每組之間的用途和需求很重要:
- 訓練集:用於模型的實際訓練,
- 驗證集:用於模型優化(例如超參數微調、特徵/閾值選擇……)和模型選擇,
- 測試集:用於對新/未見數據的所選模型進行泛化和預測性能評估。
根據您的目標和數據集的大小,有多種選擇/方法來分割數據:
- 訓練/驗證/測試集:用於訓練、優化和評估模型性能的固定集。 推薦用於較大的數據集。
- K 折交叉驗證:將數據集分割為 K 份。 模型訓練 K 次,每次折疊使用 K-1 次進行訓練,1 次進行驗證。 它可以評估模型的穩健性,因為所有折疊的性能應該是相同的。
- 留一法交叉驗證:K 倍交叉驗證的極端情況,其中 K = N(觀測值數量)。 當您的數據集較小並且想要評估您的模型是否穩健時,可以使用它。
- 自動驗證/自驗證集成模型:您無需將某些觀察結果分離在不同的集合中,而是將每個觀察結果與訓練和驗證的權重相關聯(訓練中較大的權重會導致驗證中較低的權重,這意味著該觀察結果將主要用於訓練並減少驗證),然後通過改變重量來重複此過程。 它用於非常小的數據集和/或您無法在不同集合之間獨立分割某些觀察結果的數據集:例如在實驗設計中,要執行的實驗集可以基於模型,如果是這樣,您無法在訓練和驗證之間獨立分割一些運行,因為這會給模型帶來負面影響;估計參數所需的運行將不可用,因此大大降低了模型的性能。
JMP 支持所有這些方法:啟動 Make Validation Column 平台 (jmp.com)
根據經驗,通常使用 70/20/10 的比率。你可以閱讀論文“數據分割的最佳比例” 此處了解更多詳細信息。一般來說,模型中的參數數量越多,您的訓練數據集就越大,因為您需要更多的數據來精確估計模型中的每個參數,因此模型的複雜性/類型也是需要考慮的創建訓練/驗證/測試集時。
如果您有更精確的用例,也許這可能會更有幫助且不那麼籠統,可以為您提供一些指導?
我還強烈推薦 Cassie Kozyrkov 的播放列表“與機器學習交朋友”,以了解有關模型訓練、驗證和測試的更多信息:與機器學習交朋友 - YouTube
希望第一個答案對你有幫助
回覆:交叉驗證 - 驗證列方法謝謝。
對於 JMP Pro 中的常規迴歸進行 K 折交叉驗證 (CV) 和留一法 (LOO) 驗證,實際上有兩點需要澄清。
這兩種方法在偏最小二乘回歸(PLSR)部分均可直接使用,但如果將交叉驗證(CV)和/或留一法交叉驗證(LOO)應用於簡單的回歸,則對於如何操作以及如何可視化指標存在一些不明確之處。例如,我正在分析光譜數據,而PCR和PLSR是化學計量學過程中常用的方法。

我遇到了一個有點奇怪的問題。當我創建了一個 4 折交叉驗證列(如上所示,對 72 個觀測值進行 4 折交叉驗證)並運行 PCR(以數值響應變量和主成分作為預測變量)後,我收到了以下錯誤響應:
因此,實際上並沒有進行履歷篩選,對嗎?
第二點:如何為 PCR 建構 LOO 驗證(一列?)?
總的來說,請問對於典型的迴歸模型,如何進行充分的交叉驗證和留一法驗證,並獲得合適的適合指標?這對我來說非常重要,但目前還不清楚。
非常感謝各位同事!
回覆:交叉驗證 - 驗證列方法嗨@Nazarkovsky ,
與其回覆這篇舊帖子,不如另開一個新帖,這樣可以提高帖子的曝光率,讓其他 JMP 用戶也能參與到關於你問題的討論中來。
是的,在使用固定 K 折交叉驗證列時,JMP 建模平台有時會出現一些錯誤,因為 JMP 通常從驗證列中識別出 2 個層級(訓練集和驗證集或測試集)或 3 個層級(訓練集、驗證集和測試集)。在您收到的錯誤訊息中,沒有執行交叉驗證,而是對所有資料擬合了一個線性模型。
由於您使用的是非常簡單的線性模型,您可以嘗試使用模型篩選平台(如果您想比較不同模型的結果,該平台也包含 PLS),指定您的 X、響應 Y、4 折驗證列(或直接從平台進行交叉驗證),以及您要擬合的模型類型(線性回歸模型選項 + 建模選項):

或直接使用平台提供的 K 折交叉驗證選項,即可獲得這些結果:

如果要執行留一交叉驗證,只需指定 K=n(n 為表格中的運行次數)。如果要存取單一折疊的結果,可以將我在此處提供的解決方案調整到您的建模平台: 存取 K 折交叉驗證的折疊外指標
最後,我發現您的建模工作流程中至少存在一個可能導致資料外洩的主要問題:您需要在主成分分析中也應用交叉驗證或您的分割/驗證策略。否則,PCA 將看到整個數據集,並學習所有數據集中各因子之間的相關性,而您之後擬合的線性模型(並通過交叉驗證進行評估)將受益於數據集的全部信息,而不是來自 4 個折疊中的 3 個折疊的信息。由於 JMP 尚未為 PCA 實現驗證角色(目前!),因此我添加了此願望清單,以防止資料外洩和類似您這樣的建模工作流程中可能出現的錯誤: 在主成分分析平台中新增驗證角色選項。總而言之,您應該:
- 定義並套用驗證策略(交叉驗證、留一法交叉驗證或標準訓練集/驗證集或訓練集/驗證集/測試集分割)。
- 僅對訓練集進行資料預處理(或根據所使用的折疊數多次進行資料預處理)
- 使用相同的驗證策略,對來自訓練集(或來自相應的訓練折疊)的預處理資料擬合模型。
希望這個回答對您有幫助。
回覆:交叉驗證 - 驗證列方法總之,JMP 中關於 k 折交叉驗證的部分仍然很薄弱。我很好奇為什麼開發者對此並不在意,因為這種驗證方法是對任何模型進行初步評估的主要工具,尤其是在數據量較少的情況下。此外,在建構 k 折交叉驗證列的正確選項中,無法建構 3 折交叉驗證-最小值是 4 折。
我也不喜歡 JMP 的交叉驗證指標報告,因為沒有最終選項/按鈕可以在所有運行後產生一個「預測」列作為平均結果,並與廣義回歸或 PLSR 提供的預測值進行比較。
至於PCA的驗證,Unscrambler這款傳統的化學計量學軟體(用於對光譜等化學數據進行多元分析)就提供了這個選項。是的,驗證過程會掃描預設的主成分數量與解釋變異數之間的關係。我用Unscrambler來測試洩漏情況,啊哈。
社群裡有一系列關於 JMP 的文章專門討論光譜分析,但對於 CV 和 PCR 的全面討論仍然不足。
然而,在化學計量學中,SVR(支持向量回歸)、PLSR 和 PCR 總是被應用,並且它們的指標會被比較。
非常感謝 LOO,它確實運作良好。
回覆:交叉驗證 - 驗證列方法總之,JMP 中的 k 折交叉驗證功能仍有缺陷。我很好奇為什麼開發者對此並不在意,因為這種驗證方法是對任何模型進行初步評估的主要工具,尤其是在數據量較少的情況下。此外,在建構 k 折交叉驗證列的正確選項中,無法建構 3 折交叉驗證-最小值是 4 折。
我也不喜歡 JMP 的交叉驗證指標報告,因為沒有最終選項/按鈕可以在所有運行後產生一個「預測」列作為平均結果,並與廣義回歸或 PLSR 提供的預測值進行比較。
至於PCA的驗證,Unscrambler這款傳統的化學計量軟體(用於化學數據,例如光譜的多元分析)就提供了這個選項。是的,驗證過程會掃描設定的成分數量與解釋變異數之間的關係。我用Unscrambler來測試洩漏,啊哈。
社群裡有一系列關於 JMP 的文章專門討論光譜分析,但對於 CV 和 PCR 的全面討論仍然不足。
然而,在化學計量學中,SVR(支持向量回歸)、PLSR 和 PCR 總是被應用,並且它們的指標會被比較。
非常感謝 LOO,它確實運作良好。