1、手動調參,但這種方法依賴于大量的經驗,而且比較費時。
許多情況下,工程師依靠試錯法手工調整超參數進行優(yōu)化,有經驗的工程師可以在很大程度上判斷如何設置超參數,從而提高模型的準確性。
2、網格化尋優(yōu),是最基本的超參數優(yōu)化方法。
利用這種技術,我們只需要為所有超參數的可能性建立一個獨立的模型,評估每個模型的性能,選擇產生最佳結果的模型和超參數。
from sklearn.datasets import load_iris
from sklearn.svm import SVC
iris = load_iris()
svc = SVR()
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVR
grid = GridSearchCV(
estimator=SVR(kernel='rbf'),
param_grid={
'C': [0.1, 1, 100, 1000],
'epsilon': [0.0001, 0.0005, 0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10],
'gamma': [0.0001, 0.001, 0.005, 0.1, 1, 3, 5]
},
cv=5, scoring='neg_mean_squared_error', verbose=0, n_jobs=-1)
3、隨機尋優(yōu),可以更準確地確定某些重要超參數的最佳值。
并非所有的超參數都有同樣的重要性,有些超參數的作用更加明顯。
知識點擴充:
貝葉斯優(yōu)化方法
簡單地說,貝葉斯優(yōu)化通過基于過去對目標的評估結果建立一個代理函數(概率模型)找到使得目標函數最小的值。代理函數比目標函數更易于優(yōu)化,因此下一個待評估的輸入值是通過對代理函數應用某種標準(通常為預期提升)來選擇的。貝葉斯方法不同于隨機搜索或網格搜索,后兩者都使用了過去的評估結果來選擇接下來待評估的值。它們的思想是:通過根據過去表現(xiàn)良好的值選擇下一個輸入值來限制評價目標函數的高昂開銷。
對于超參數優(yōu)化來說,其目標函數為使用一組超參數的機器學習模型的驗證誤差。它的目標是找出在驗證集上產生最小誤差的超參數,并希望將這些結果泛化到測試集上去。對目標函數評估的開銷是巨大的,因為它需要訓練帶有一組特定超參數的機器學習模型。理想情況下,我們希望找到這樣一方法,它既能探索搜索空間,又能限制耗時的超參數評估。貝葉斯超參數調優(yōu)使用一個不斷更新的概率模型,通過從過去的結果中進行推理,使搜索過程「專注」于有可能達到最優(yōu)的超參數。
Python 環(huán)境下有一些貝葉斯優(yōu)化程序庫,它們目標函數的代理算法有所區(qū)別。在本文中,我們將使用「Hyperopt」庫,它使用樹形 Parzen 評估器(TPE,https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf)作為搜索算法,其他的 Python 庫還包含「Spearmint」(高斯過程代理)和「SMAC」(隨即森林回歸)。目前在這個領域有大量有趣的研究,所以如果你對某一個庫不是很滿意,你可以試試其他的選項!針對某個問題的通用結構(本文將使用的結構)可以在各個庫間進行轉換,其句法差異非常小。
到此這篇關于python超參數優(yōu)化的具體方法的文章就介紹到這了,更多相關python超參數如何優(yōu)化內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!