交叉驗證是機器學習中經常使用的一種驗證模型的方法,使用這種方法,你能夠算法
除去數據預處理以外,機器學習通常有兩大步驟:訓練(英文術語爲 '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