Python機器學習及實踐——進階篇5(模型檢驗)

前面時不時提到模型檢驗或者交叉驗證等詞彙,特別是在對不同模型的配置,不同的特徵組合,在相同的數據和任務下進行評價的時候。究其原因是因爲僅僅使用默認配置的模型與不經處理的數據特徵,在大多數任務下是無法得到最佳性能表現的。因此在最終交由測試集進行性能評估之前,我們希望可以利用手頭現有的數據對模型進行調優,甚至可以粗略地估計測試結果。

這裏需要強調的是,前面所使用的測試數據是由原始數據中採樣而來,並且多數知曉測試的正確結果;但是這僅僅是爲了學習和模擬的需要。一些初學者經常拿着測試集的正確結果反覆調優模型與特徵,從而可以發現在測試集上表現最佳的模型配置和特徵組合。這是極其錯誤的行爲。
正確的做法是對現有數據進行採樣分割:一部分用於模型參數訓練,叫做訓練集;另一部分數據集合用於調優模型配置和特徵選擇,並且對未知的測試性能做出估計,叫做開發集或驗證集。根據驗證流程複雜度的不同,模型檢驗方式分爲留一驗證與交叉驗證。

留一驗證:

留一驗證最爲簡單,就是從任務提供的數據中,隨機採樣一定比例作爲訓練集,剩下的“留做”驗證。通常,我們取這個比例爲7:3,即70%作爲訓練集,剩下的30%用做模型驗證。不過,通過這一驗證方法優化的模型性能也不穩定,原因在於對驗證集合隨機採樣的不確定性。因此,這一方法被使用在計算能力較弱,而相對數據規模較大的機器學習發展的早期,這一驗證的方法進化成爲更加高級的版本:交叉驗證。

交叉驗證:

交叉驗證可以理解爲做了多次留一驗證的過程。只是需要強調的是,每次檢驗所使用的驗證集之間是互斥的,並且要保證每一條可用數據都被模型驗證過。以10折交叉驗證爲例,如下圖所示(圖片來自網絡):

全部可用數據被隨機分割爲評價數量的10組,每次迭代都選取其中1組數據作爲驗證集,其他9組作爲訓練集。
交叉驗證的好處在於,可以保證所有數據都有被訓練和驗證的機會,也盡最大可能讓優化的模型性能表現得更加可信。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章