机器学习—模型超参数调优之网格搜索与随机搜索
文章目錄
- 引言
- 1.網(wǎng)格搜索GridSearchCV()
- 2.隨機(jī)搜索GridSearchCV()
- 3.總結(jié)
引言
??不同的超參數(shù)的值對于模型的性能有不同的影響,我們需要找到的就是使得模型性能最佳的超參數(shù)。
1.網(wǎng)格搜索GridSearchCV()
??網(wǎng)格搜索的思想非常簡單,比如你有2個(gè)超參數(shù)需要去選擇,那你就把所有的超參數(shù)選擇列出來分別做排列組合。舉個(gè)例子: 𝜆=0.01,0.1,1.0 和 𝛼=0.01,0.1,1.0 ,你可以做一個(gè)排列組合,即:{[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]} ,然后針對每組超參數(shù)分別建立一個(gè)模型,然后選擇測試誤差最小的那組超參數(shù)。換句話說,我們需要從超參數(shù)空間中尋找最優(yōu)的超參數(shù),很像一個(gè)網(wǎng)格中找到一個(gè)最優(yōu)的節(jié)點(diǎn),因此叫網(wǎng)格搜索
import numpy as np from sklearn.svm import SVR # 引入SVR類 from sklearn.pipeline import make_pipeline # 引入管道簡化學(xué)習(xí)流程 from sklearn.preprocessing import StandardScaler # 由于SVR基于距離計(jì)算,引入對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化的類 from sklearn.model_selection import GridSearchCV # 引入網(wǎng)格搜索調(diào)優(yōu) from sklearn.model_selection import cross_val_score # 引入K折交叉驗(yàn)證 from sklearn import datasetsboston = datasets.load_boston() # 返回一個(gè)類似于字典的類 X = boston.data y = boston.target features = boston.feature_names pipe_SVR = make_pipeline(StandardScaler(),SVR()) score1 = cross_val_score(estimator=pipe_SVR,X=X,y=y,scoring='r2',cv=10) # 10折交叉驗(yàn)證 print("CV accuracy: %.3f +/- %.3f" % ((np.mean(score1)), np.std(score1))) from sklearn.svm import SVR # 引入SVR類 from sklearn.pipeline import make_pipeline, Pipeline # 引入管道簡化學(xué)習(xí)流程 from sklearn.preprocessing import StandardScaler # 由于SVR基于距離計(jì)算,引入對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化的類 from sklearn.model_selection import GridSearchCV # 引入網(wǎng)格搜索調(diào)優(yōu) from sklearn.model_selection import cross_val_score # 引入K折交叉驗(yàn)證 from sklearn import datasetsboston = datasets.load_boston() # 返回一個(gè)類似于字典的類 X = boston.data y = boston.target features = boston.feature_names pipe_svr = Pipeline([("StandardScaler", StandardScaler()),("svr", SVR())]) param_range = [0.0001, 0.001, 0.01, 0.1, 1.0, 10.0, 100.0, 1000.0] # 管道與網(wǎng)格搜索結(jié)合 param_grid = [{"svr__C": param_range, "svr__kernel": ["linear"]}, # 注意__是指兩個(gè)下劃線,一個(gè)下劃線會(huì)報(bào)錯(cuò)的{"svr__C": param_range, "svr__gamma": param_range, "svr__kernel": ["rbf"]}] gs = GridSearchCV(estimator=pipe_svr,param_grid=param_grid,scoring='r2',cv=10) # 10折交叉驗(yàn)證 gs = gs.fit(X, y) print("網(wǎng)格搜索最優(yōu)得分:", gs.best_score_) print("網(wǎng)格搜索最優(yōu)參數(shù)組合:\n", gs.best_params_) 網(wǎng)格搜索最優(yōu)得分: 0.6081303070817127 網(wǎng)格搜索最優(yōu)參數(shù)組合:{'svr__C': 1000.0, 'svr__gamma': 0.001, 'svr__kernel': 'rbf'}2.隨機(jī)搜索GridSearchCV()
??網(wǎng)格搜索相當(dāng)于暴力地從參數(shù)空間中每個(gè)都嘗試一遍,然后選擇最優(yōu)的那組參數(shù),這樣的方法顯然是不夠高效的,因?yàn)殡S著參數(shù)類別個(gè)數(shù)的增加,需要嘗試的次數(shù)呈指數(shù)級增長。有沒有一種更加高效的調(diào)優(yōu)方式呢?那就是使用隨機(jī)搜索的方式,這種方式不僅僅高校,而且實(shí)驗(yàn)證明,隨機(jī)搜索法結(jié)果比稀疏化網(wǎng)格法稍好(有時(shí)候也會(huì)極差,需要權(quán)衡)。參數(shù)的隨機(jī)搜索中的每個(gè)參數(shù)都是從可能的參數(shù)值的分布中采樣的。與網(wǎng)格搜索相比,這有兩個(gè)主要優(yōu)點(diǎn):
-
可以獨(dú)立于參數(shù)數(shù)量和可能的值來選擇計(jì)算成本。
-
添加不影響性能的參數(shù)不會(huì)降低效率。
3.總結(jié)
??數(shù)據(jù)量小使用網(wǎng)格搜索,當(dāng)時(shí)間代價(jià)比較大時(shí),可以多次使用隨機(jī)搜索。
參考:
機(jī)器學(xué)習(xí)基礎(chǔ)
如果對您有幫助,麻煩點(diǎn)贊關(guān)注,這真的對我很重要!!!如果需要互關(guān),請?jiān)u論留言!
總結(jié)
以上是生活随笔為你收集整理的机器学习—模型超参数调优之网格搜索与随机搜索的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教师教育网各网页链接
- 下一篇: 2004-2020历年美赛优秀论文资源