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