Python 環境下的自動化機器學習超參數調優

選自Medium,作者:William Koehrsen,機器之心編譯。

機器學習算法的性能高度依賴於超參數的選擇,對機器學習超參數進行調優是一項繁瑣但卻至關重要的任務。本文介紹了一個使用「Hyperopt」庫對梯度提升機(GBM)進行貝葉斯超參數調優的完整示例,並著重介紹了其實現過程。

由於機器學習算法的性能高度依賴於超參數的選擇,對機器學習超參數進行調優是一項繁瑣但至關重要的任務。手動調優佔用了機器學習算法流程中一些關鍵步驟(如特徵工程和結果解釋)的時間。網格搜索和隨機搜索則不會干涉這些步驟,但是需要大量的運行時間,因為它們浪費了時間去評估搜索空間中並不太可能找到最優點的區域。如今越來越多的超參數調優過程都是通過自動化的方法完成的,它們旨在使用帶有策略的啟發式搜索(informed search)在更短的時間內找到最優超參數,除了初始設置之外,並不需要額外的手動操作。

Python 環境下的自動化機器學習超參數調優

貝葉斯優化是一種基於模型的用於尋找函數最小值的方法。近段時間以來,貝葉斯優化開始被用於機器學習超參數調優,結果表明,該方法在測試集上的表現更加優異,但需要的迭代次數小於隨機搜索。此外,現在一些 Python 庫的出現使得對任意的機器學習模型實現貝葉斯超參數調優變得更加簡單。

本文將介紹一個使用「Hyperopt」庫對梯度提升機(GBM)進行貝葉斯超參數調優的完整示例。在本文作者早先的一篇文章中,他已經對這個方法背後的概念進行了概述,所以本文將著重介紹實現過程。和大多數機器學習的主題類似,讀者並不需要理解所有的細節,但是瞭解基本的原理可以幫助讀者更有效地使用這項技術!

本文所有的代碼都可以以 Jupyter Notebook 的形式在 GitHub 上獲取(https://github.com/WillKoehrsen/hyperparameter-optimization)。

本文目錄:

  • 貝葉斯優化方法
  • 優化問題的四個組成部分
  • 目標函數
  • 域空間
  • 優化算法
  • 結果的歷史數據
  • 優化
  • 搜索結果
  • 搜索結果的可視化
  • 搜索的演化過程
  • 繼續搜索
  • 結語

貝葉斯優化方法

簡單地說,貝葉斯優化通過基於過去對目標的評估結果建立一個代理函數(概率模型)找到使得目標函數最小的值。代理函數比目標函數更易於優化,因此下一個待評估的輸入值是通過對代理函數應用某種標準(通常為預期提升)來選擇的。貝葉斯方法不同於隨機搜索或網格搜索,後兩者都使用了過去的評估結果來選擇接下來待評估的值。它們的思想是:通過根據過去表現良好的值選擇下一個輸入值來限制評價目標函數的高昂開銷。

對於超參數優化來說,其目標函數為使用一組超參數的機器學習模型的驗證誤差。它的目標是找出在驗證集上產生最小誤差的超參數,並希望將這些結果泛化到測試集上去。對目標函數評估的開銷是巨大的,因為它需要訓練帶有一組特定超參數的機器學習模型。理想情況下,我們希望找到這樣一方法,它既能探索搜索空間,又能限制耗時的超參數評估。貝葉斯超參數調優使用一個不斷更新的概率模型,通過從過去的結果中進行推理,使搜索過程「專注」於有可能達到最優的超參數。

Python 環境下有一些貝葉斯優化程序庫,它們目標函數的代理算法有所區別。在本文中,我們將使用「Hyperopt」庫,它使用樹形 Parzen 評估器(TPE,https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf)作為搜索算法,其他的 Python 庫還包含「Spearmint」(高斯過程代理)和「SMAC」(隨即森林迴歸)。目前在這個領域有大量有趣的研究,所以如果你對某一個庫不是很滿意,你可以試試其他的選項!針對某個問題的通用結構(本文將使用的結構)可以在各個庫間進行轉換,其句法差異非常小。

優化問題的四個組成部分

貝葉斯優化問題有四個組成部分:

1. 目標函數:我們想要最小化的對象,這裡指帶超參數的機器學習模型的驗證誤差

2. 域空間:待搜索的超參數值

3. 優化算法:構造代理模型和選擇接下來要評估的超參數值的方法

4. 結果的歷史數據:存儲下來的目標函數評估結果,包含超參數和驗證損失

通過以上四個步驟,我們可以對任意實值函數進行優化(找到最小值)。這是一個強大的抽象過程,除了機器學習超參數的調優,它還能幫我們解決其他許多問題。

數據集

在本文的示例中,我們將使用 Caravan Insurance 數據集(https://www.kaggle.com/uciml/caravan-insurance-challenge),它的目標是預測客戶是否會購買一份保險產品。這是一個監督分類問題,帶有 5800 個用於訓練的觀測值和 4000 個測試點。由於這是一個不平衡的分類問題,本文使用的評價性能的指標是受試者工作特徵曲線下的面積(ROC AUC),ROC AUC 的值越高越好,其值為 1 代表模型是完美的。數據集如下所示:

Python 環境下的自動化機器學習超參數調優

數據集(CARAVAN)是帶標籤的

由於 Hyperopt 要做的是取最小值,我們將從目標函數中返回「1-ROC AUC」,從而提高 ROC AUC。

梯度提升模型

在本文中,我們對梯度提升機(GBM)的細節知識不做過多探討,下面是我們需要理解的基本知識:GBM 是一種基於使用依次訓練的弱學習器(多為決策樹)構建強學習器的集成增強方法。GBM 中有許多超參數,它們控制著整個集成結構和單棵決策樹。我們在這裡使用的一種最有效的選擇決策樹數量的方法(稱為評估器)是早停止(early stopping)。LightGBM 提供了一種 Python 環境下的快速簡單的 GBM 實現。

  • 想了解更多 GBM 的細節,這裡有一篇高屋建瓴的文章:https://medium.com/mlreview/gradient-boosting-from-scratch-1e317ae4587d
  • 一篇技術論文:https://brage.bibsys.no/xmlui/bitstream/handle/11250/2433761/16128_FULLTEXT.pdf

拋開必要的背景知識不談,讓我們將用於超參數調優的貝葉斯優化問題的四個組成部分一一列舉出來。

具體實現請參見機器之心(wxID:almosthuman2014):https://mp.weixin.qq.com/s/hDTmSpht1M3Xc26bavPcKQ


分享到:


相關文章: