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