天天看點

對模型超參數進行調優

嶺回歸對線性回歸的優化在于線上性回歸的損失函數中加入L2正則化項進而犧牲無偏性降低方差。但是,大家是否想過這樣的問題:在L2正則化中參數 應該選擇多少?是0.01、0.1、還是1?到目前為止,我們隻能憑經驗或者瞎猜,能不能找到一種方法找到最優的參數 ?事實上,找到最佳參數的問題本質上屬于最優化的内容,因為從一個參數集合中找到最佳的值本身就是最優化的任務之一,我們腦海中浮現出來的算法無非就是:梯度下降法、牛頓法等無限制優化算法或者限制優化算法,但是在具體驗證這個想法是否可行之前,我們必須先認識兩個最本質概念的差別。

  • 參數與超參數:

    我們很自然的問題就是嶺回歸中的參數 λ \lambda λ和參數w之間有什麼不一樣?事實上,參數w是我們通過設定某一個具體的 λ \lambda λ後使用類似于最小二乘法、梯度下降法等方式優化出來的,我們總是設定了 λ \lambda λ是多少後才優化出來的參數w。是以,類似于參數w一樣,使用最小二乘法或者梯度下降法等最優化算法優化出來的數我們稱為參數,類似于 λ \lambda λ一樣,我們無法使用最小二乘法或者梯度下降法等最優化算法優化出來的數我們稱為超參數。

模型參數是模型内部的配置變量,其值可以根據資料進行估計。

  • 進行預測時需要參數。
  • 它參數定義了可使用的模型。
  • 參數是從資料估計或獲悉的。
  • 參數通常不由程式設計者手動設定。
  • 參數通常被儲存為學習模型的一部分。
  • 參數是機器學習算法的關鍵,它們通常由過去的訓練資料中總結得出。

模型超參數是模型外部的配置,其值無法從資料中估計。

  • 超參數通常用于幫助估計模型參數。
  • 超參數通常由人工指定。
  • 超參數通常可以使用啟發式設定。
  • 超參數經常被調整為給定的預測模組化問題。

網格搜尋GridSearchCV():

網格搜尋的思想非常簡單,比如你有2個超參數需要去選擇,那你就把所有的超參數選擇列出來分别做排列組合。舉個例子: λ = 0.01 , 0.1 , 1.0 \lambda=0.01,0.1,1.0 λ=0.01,0.1,1.0和 α = 0.01 , 0.1 , 1.0 \alpha=0.01,0.1,1.0 α=0.01,0.1,1.0 ,你可以做一個排列組合,即:{[0.01,0.01],[0.01,0.1],[0.01,1],[0.1,0.01],[0.1,0.1],[0.1,1.0],[1,0.01],[1,0.1],[1,1]} ,然後針對每組超參數分别建立一個模型,然後選擇測試誤差最小的那組超參數。換句話說,我們需要從超參數空間中尋找最優的超參數,很像一個網格中找到一個最優的節點,是以叫網格搜尋。

随機搜尋 RandomizedSearchCV() :

網格搜尋相當于暴力地從參數空間中每個都嘗試一遍,然後選擇最優的那組參數,這樣的方法顯然是不夠高效的,因為随着參數類别個數的增加,需要嘗試的次數呈指數級增長。有沒有一種更加高效的調優方式呢?那就是使用随機搜尋的方式,這種方式不僅僅高效,而且實驗證明,随機搜尋法結果比稀疏化網格法稍好(有時候也會極差,需要權衡)。參數的随機搜尋中的每個參數都是從可能的參數值的分布中采樣的。與網格搜尋相比,這有兩個主要優點:

  • 可以獨立于參數數量和可能的值來選擇計算成本。
  • 添加不影響性能的參數不會降低效率。

下面我們使用SVR的例子進行調優:

對模型超參數進行調優
對模型超參數進行調優
對模型超參數進行調優

經過我們不懈的努力,從收集資料集并選擇合适的特征、選擇度量模型性能的名額、選擇具體的模型并進行訓練以優化模型到評估模型的性能并調參,我們認識到了如何使用sklearn建構簡單回歸模型。

感謝Datawhale團隊為開源學習做出的貢獻!

參考文獻:

https://github.com/datawhalechina/team-learning-data-mining/tree/master/EnsembleLearning

繼續閱讀