理解「交叉驗證」(Cross Validation)

交叉驗證是機器學習中經常使用的一種驗證模型的方法,使用這種方法,你能夠算法

  1. 準確的調整模型的超參數(Hyperparameter),且這組參數對不一樣的數據,表現相對穩定
  2. 在某些分類場景,你能夠同時使用邏輯迴歸、決策樹或聚類等多種算法建模,當不肯定哪一種算法效果更好時,可使用交叉驗證

除去數據預處理以外,機器學習通常有兩大步驟:訓練(英文術語爲 'estimate parameters' 或 'training the algorithm')和測試(英文術語爲 'evaluating a method' 或 'testing the algorithm'),通常的,咱們將樣本數據分爲不一樣比例的兩部分,其中前 75% 做爲訓練數據,剩下的 25% 做爲測試數據,而後先用算法對訓練數據進行擬合,再用測試數據驗證算法的好壞。機器學習

但這樣選擇數據並不能避免偶然性,即在某些狀況下,用這最後的 1/4 數據進行測試,恰好能獲得比較好的效果,而若是咱們改成用前 25% 的數據測試,後 75% 的數據訓練的話,效果卻會大打折扣,以下所示,狀況 1 和狀況 2 之間只存在數據切分的區別,但狀況 1 的測試結果卻要比狀況 2 好不少。學習

爲了下降測試數據產生的偶然性,更好的作法即是採用「交叉驗證」,仍是以切分 4 份數據爲例,交叉驗證的作法是,對於同一個算法,同時訓練出 4 個模型,每一個模型採用不一樣的測試數據(例如模型 1 選用第 1 份,模型 2 選用第 2 份,以此類推),在全部模型都完成測試後,再對這 4 個模型的評估結果求平均,即可以獲得一個相對穩定且更有說服力的算法。測試

舉個具體的例子,假設咱們的模型採用決策樹算法,該算法有個超參數是樹的深度 height,咱們能夠將其設爲 2,也能夠設爲 3,但不清楚設哪一個數比較好,此時咱們就可使用「交叉驗證」來幫咱們決策,首先仍是將數據 4 等分,對每個參數值,咱們都訓練 4 次,輸出 4 種可能的測試結果,以下圖所示lua

最後,咱們根據每一個參數下的測試結果,算出它們的平均值code

超參數 評估結果的均值
height = 2 (0.68+0.62+0.58+0.72) / 4 = 0.65
height = 3 (0.82+0.60+0.59+0.76) / 4 = 0.69

因而,咱們即可以得出,該算法在 height=3 的狀況下效果更好。這個例子說明了咱們是如何利用交叉驗證來調超參數的,如文章開頭所說,對於不一樣算法的比較,一樣也可使用這樣的方法。cdn

上文中,這種將數據分爲 4 份來作交叉驗證的作法被稱爲 4-fold cross validation,實踐中,咱們一般使用 10-fold。另外,還有一種只選取 1 條樣本做爲測試數據的極端狀況,稱爲 leave one out,可想而知,這種作法會消耗巨大的計算資源,在生產環境中要謹慎使用。blog

相關文章
相關標籤/搜索