日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习—模型超参数调优之网格搜索与随机搜索

發(fā)布時(shí)間:2023/12/14 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习—模型超参数调优之网格搜索与随机搜索 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

      • 引言
      • 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ì)降低效率。

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 import datasets from sklearn.model_selection import RandomizedSearchCV from scipy.stats import uniform # 引入均勻分布設(shè)置參數(shù)boston = datasets.load_boston() # 返回一個(gè)類似于字典的類 X = boston.data y = boston.target features = boston.feature_namespipe_svr = Pipeline([("StandardScaler", StandardScaler()),("svr", SVR())]) # 利用參數(shù)loc和scale,可以得到[loc, loc + scale]上的均勻分布,在uniform中l(wèi)oc是最小值,scale是最大值。 distributions = dict(svr__C=uniform(loc=1.0, scale=4), # 構(gòu)建連續(xù)參數(shù)的分布svr__kernel=["linear", "rbf"], # 離散參數(shù)的集合svr__gamma=uniform(loc=0, scale=4))rs = RandomizedSearchCV(estimator=pipe_svr,param_distributions=distributions,scoring='r2',cv=10) # 10折交叉驗(yàn)證 rs = rs.fit(X, y) print("隨機(jī)搜索最優(yōu)得分:", rs.best_score_) print("隨機(jī)搜索最優(yōu)參數(shù)組合:\n", rs.best_params_) 隨機(jī)搜索最優(yōu)得分: 0.2988221516140073 隨機(jī)搜索最優(yōu)參數(shù)組合:{'svr__C': 4.503224088282858, 'svr__gamma': 3.1457760882766905, 'svr__kernel': 'linear'}

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。