機器學習乾貨|交叉驗證(Cross Validation)詳解

2021-02-20 Python學習與數據挖掘

如果感興趣,歡迎點擊上方「關注」,點擊右下角「在看」分享給身邊好友!

交叉驗證也稱為循環估計,是統計上將數據樣本切割成較小集合的使用方法,由Seymour Geisser提出。

交叉驗證應用場景主要在模型訓練中,在給定的樣本空間中,拿出大部分樣本作為訓練集,小部分樣本使用剛建立的模型進行測試,並求這小部分樣本的預測誤差或者預測精度,同時記錄它們的加和平均值,這個過程迭代K次,即K折交叉。把每個樣本的預測誤差平方加和,稱為預測誤差。

交叉驗證的目的


常見的交叉驗證形式


簡單交叉驗證:將原始數據隨機分為兩組,一組作為訓練集,一組作為驗證集,利用訓練集訓練分類器,然後利用驗證集驗證模型,記錄最後的分類準確率的性能指標。

一般來說,簡單交叉驗證並非一種交叉驗證,因為數據並沒有交叉使用。隨機從最初的樣本中選出部分,形成交叉驗證數據,而剩餘的就當作訓練數據。一般來說,少於原本樣本三分之一的數據被選做驗證數據。

優點:好處的處理簡單,只需隨機把原始數據分為兩組即可!

缺點:嚴格意義來說簡單交叉驗證並不能算是CV,因為這種方法沒有達到交叉的思想,由於是隨機地將原始數據分組,所以最後驗證集分類準確率的高低與原始數據的分組有很大的關係,所以這種方法得到的結果其實並不具有說服性!


K-fold交叉驗證:初始採樣分割成K個子樣本,一個單獨的子樣本被保留作為驗證模型的數據,其他K-1個樣本用來訓練。交叉驗證重複K次,每個子樣本驗證一次,平均K次的結果或者使用其它結合方式,得到一個單一估測。這個方法的優勢在於,同時重複運用隨機產生的子樣本進行訓練和驗證,每次的結果驗證一次,10折交叉驗證是最常用的。

優點:K-CV可以有效地避免過學習以及欠學習狀態的發生,最後得到的結果也比較具有說服性。

留一驗證:意指只使用原本樣本中的一項來當作驗證資料,而剩餘的則留下來當作訓練資料。這個步驟一直持續到每個樣本都被當作一次驗證資料。事實上,這等同於K-fold交叉驗證是一樣的,其中K為原本樣本個數。在某些情況下是存在有效率的演算法,如使用kernel regression和Tikhonov regularization

驗證方法選擇


到底應該選擇哪一種方法呢?其實很簡單,如果我們只是對數據做一個初步的模型建立,不是要做深入分析的話,簡單交叉驗證就可以,否則就用k折交叉驗證,在樣本量少的時候,使用留一交叉驗證。

以KFold進行案例分析

from sklearn.datasets import load_irisfrom sklearn.model_selection import StratifiedKFold,cross_val_scorefrom sklearn.linear_model import LogisticRegression iris = load_iris() print('Iris labels:\n{}'.format(iris.target)) logreg = LogisticRegression() strKFold = StratifiedKFold(n_splits=3,shuffle=False,random_state=0) scores = cross_val_score(logreg,iris.data,iris.target,cv=strKFold) print("straitified cross validation scores:{}".format(scores)) print("Mean score of straitified cross validation:{:.2f}".format(scores.mean()))

相關焦點

  • 嵌套交叉驗證(Nested cross-validation)
    傳統交叉驗證和嵌套交叉驗證的區別在開始分享嵌套交叉驗證前,首先以K-Fold為例,區分K-Fold交叉驗證和嵌套K-Fold交叉驗證的區別,這是我剛始學習時的困惑點:(1)K-Fold交叉驗證:只有一個loop(循環),即內層循環(a) 將數據集切分為k-摺疊;
  • K折交叉驗證實例
    交叉驗證思想交叉驗證用於模型選擇,可以更好的來估計模型的試驗誤差。
  • 機器學習模型評估指標Python代碼示例
    通常,我們在實際的數據科學工作流中兩次使用機器學習模型驗證指標:模型比較:為您的任務選擇最佳機器學習(ML)模型模型改進:調整超參數為了更清楚地了解這兩者之間的區別,讓我通過機器學習(ML)實現的工作流程來解釋。
  • K-fold cross validation的真正用法是用來確定模型超參的
    第一個問題「K-fold cross validation的測試結果是針對K個中的哪個模型的呢?」的答案是:不是其中任何一個。雖然很少有材料提到,但是會容易理解,對10個不同的模型的測試結果取平均,那麼這個平均就不再是對其中任何一個模型的評價。這裡又引申出來一個問題,既然不是其中任何一下,那麼又是對什麼的評價呢?
  • 算法應用|機器學習python應用,簡單機器學習項目實踐
    可以說這並不是一個正式的項目,只是用來做一個簡單的展示,用於給初次接觸機器學習的讀者快速了解機器學習的過程和結果。1 機器學習中的Hello World頂目學習編程時,往往我們的第一句代碼就是print(「Hello World」),而接下來的這個數據集,可以說得上是機器學習中的Hello World頂目,入門學習機器學習的過程中最常見的一個數據集。
  • R語言——交叉驗證法計算線性回歸模型擬合優度的第三種R方
    第三種R方的計算源於交叉驗證 (cross validation) 裡的留一法 (leave one out cross validation),交叉驗證也是當前比較熱門的機器學習裡的用來驗證模型匹配度較為常用的方法。傳統的線性回歸是對所有樣本數據進行回歸,根據線性回歸的計算公式,我們的模型能夠使得均方誤差最小。但是,如果樣本中存在異常值,就會嚴重影響我們的回歸模型的準確度。
  • 萬字長文總結機器學習的模型評估與調參|附代碼下載
    我們常規做法,就是將數據集劃分為3部分,分別是訓練、測試和驗證,彼此之間的數據不重疊。但,如果我們遇見了數據量不多的時候,這種操作就顯得不太現實,這個時候k折交叉驗證就發揮優勢了。2.1 K折交叉驗證原理先不多說,先貼一張原理圖(以10折交叉驗證為例)。
  • 11個重要的機器學習模型評估指標
    但是,隨著機器學習的到來,我們現在擁有更強大的模型選擇方法。沒錯!現在來談論一下交叉驗證。雖然交叉驗證不是真正的評估指標,會公開用於傳達模型的準確性。但交叉驗證提供了足夠直觀的數據來概括模型的性能。現在來詳細了解交叉驗證。12.交叉驗證(雖然不是指標!
  • 想知道機器學習掌握的怎麼樣了嗎?這有一份自測題(附答案和解析)
    選擇總是能最小化交叉驗證中的方差的 kD. 以上所有答案:D更大的 k 會減少過高估計了真正的預期誤差的情況(因為訓練層更接近總體數據集),但是會帶來更長的運行時間(因為這樣會接近留一交叉的極限情況),當選擇 k 的時候,我們也要考慮 k 層精度之間的方差。
  • 三分鐘重新學習交叉驗證
    雷鋒網 AI 科技評論根據原文進行了編譯。驗證可能是數據科學家們所使用的最重要的技術之一,因為驗證操作有助於我們了解模型的穩定性——用來探索模型對新數據的泛化能力。我們需要確保模型從數據中正確學習到了大部分的模式,並且沒有被數據中的噪聲過度幹擾,也就是說,模型的偏差和方差都能保持在一個較低值。而本文的目的正是要介紹一下有關於交叉驗證(Cross-validation)的概念。
  • 一個框架解決幾乎所有機器學習問題
    上周一個叫 Abhishek Thakur 的數據科學家,在他的 Linkedin 發表了一篇文章 Approaching (Almost) Any Machine Learning Problem,介紹他建立的一個自動的機器學習框架,幾乎可以解決任何機器學習問題,項目很快也會發布出來。
  • TensorFlow四種Cross Entropy算法實現和應用
    ➤TensorFlow的交叉熵函數TensorFlow針對分類問題,實現了四個交叉熵函數,分別是tf.nn.sigmoid_cross_entropy_with_logits、tf.nn.softmax_cross_entropy_with_logits、tf.nn.sparse_softmax_cross_entropy_with_logits
  • 交叉驗證的R語言實現
    在之前的內容泛化誤差和留出法,交叉驗證中,我們介紹了泛化誤差的概念以及用以估計泛化誤差的留出法、留一法和K折交叉驗證法,本節我們討論如何在R語言中進行實現。接下來,我們考慮留一法,即Leave-one-out-cross-validatioin。
  • 面向Kaggle 和離線比賽實用工具庫 nyaggle,解決特徵工程與驗證兩...
    submission_filename = None,type_of_target ='auto',feature_list = None,feature_directory = None,with_auto_hpo = False,with_auto_prep = False,with_mlflow = False)實驗詳細代碼在典型的表格數據競賽中,開發者可能會通過交叉驗證重複進行評估
  • 乾貨!Kaggle座頭鯨識別落下帷幕,冠軍方案解讀
    最後,藉助4 fold cross validation,以及類別平衡後處理,得到了最終public & private兩榜第一名的0.973。2.網絡輸入我們使用RGB + Mask的四信道輸入(Mask來源於我們訓練的分割模型,通過論壇中開源的450張標註數據訓練即取得了很好的效果: MAP for local cross
  • 基礎| 機器學習入門必備:如何用Python從頭實現感知器算法
    在機器學習中,我們可以使用一種技術來評估和更新稱為隨機梯度下降的每次迭代的權重,以最小化我們的訓練數據模型的誤差。這種優化算法的工作方式是每次向模型顯示每個訓練實例。模型對訓練實例進行預測,計算誤差並更新模型以便減少下一預測的誤差。該過程可以用於在模型中找到能使訓練數據上模型誤差最小的權重集合。
  • 僅需10分鐘:開啟你的機器學習之路
    機器學習之路雖漫漫無垠,但莘莘學子依然紛紛投入到機器學習的洪流中。如何更有效地開始機器學習呢?所謂「八仙過海,各顯神通」,本文作者以Python語言為工具進行機器學習,並以Kaggle競賽中的鐵達尼號項目進行詳細解讀。跟著小編來看看吧!隨著行業內機器學習的崛起,能夠幫用戶快速迭代整個過程的工具變得至關重要。