知情式方法:Genetic Algorithms

Python 超參數調校

Alex Scriven

Data Scientist

遺傳學小教室

 

在真實世界的遺傳演化中,流程如下:

  1. 存在許多生物(「後代」)
  2. 最強的個體存活並配對
  3. 形成後代時發生「交配」與基因重組
  4. 部分後代會隨機突變
    • 這些突變有時會帶來優勢
  5. 回到第(1)步!
Python 超參數調校

機器學習中的遺傳法

 

我們也能把同樣概念用於超參數調校:

  1. 建立一些具超參數設定的模型
  2. 用評分函式挑出表現最好的
    • 這些就是「存活者」
  3. 產生與最佳模型相似的新模型
  4. 加入隨機性,避免只達到區域最佳
  5. 重複直到你滿意為止!
Python 超參數調校

為何效果好?

 

這是一種知情式搜尋,優點包括:

  • 能從先前迭代中學習,類似貝葉斯式超參數調校。
  • 額外具備一定的「隨機性」。
  • (我們將使用的套件)可處理機器學習中許多繁瑣細節。
Python 超參數調校

認識 TPOT

 

一個適合做遺傳式超參數調校的函式庫是 TPOT:

將 TPOT 視為你的資料科學助理。TPOT 是一個 Python 自動化機器學習工具,透過遺傳程式設計最佳化機器學習管線

管線不只包含模型(可能不只一個),也會處理特徵與流程中的其他步驟。而且它會把該管線的 Python 程式碼回傳給你!

Python 超參數調校

TPOT 元件

TPOT 分類器的關鍵參數:

  • generations:訓練要跑的迭代次數。
  • population_size:每次迭代後保留的模型數。
  • offspring_size:每次迭代要產生的模型數。
  • mutation_rate:套用隨機變異的管線比例。
  • crossover_rate:每次迭代要交配的管線比例。
  • scoring:用來決定最佳模型的函式。
  • cv:要使用的交叉驗證策略。
Python 超參數調校

簡單範例

簡單範例:

from tpot import TPOTClassifier
tpot = TPOTClassifier(generations=3, population_size=5, 
                      verbosity=2, offspring_size=10,
                      scoring='accuracy', cv=5)

tpot.fit(X_train, y_train) print(tpot.score(X_test, y_test))

我們保留 mutation_ratecrossover_rate 的預設值;若無更深入的遺傳程式設計知識,使用預設通常最佳。

注意:沒有演算法特定的超參數嗎?

Python 超參數調校

一起來練習吧!

Python 超參數調校

Preparing Video For Download...