机器学习 | 调参 Part1
生活随笔
收集整理的這篇文章主要介紹了
机器学习 | 调参 Part1
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
調(diào)參系列1
- 1 什么叫調(diào)參?
- 2 為什么要調(diào)參
- 3 調(diào)參方法有哪些?
- 3.1 網(wǎng)格搜索
- 3.1.1 原理
- 3.1.2 Python實現(xiàn)
- 3.2 隨機(jī)搜索
- 3.2.1 原理
- 3.2.2 Python實現(xiàn)
- 3.3 貝葉斯調(diào)參
- 3.3.1 區(qū)別于前兩種方法的點(diǎn)
- 3.3.2 原理
- 3.3.3 Python實現(xiàn)
- 4 參考
1 什么叫調(diào)參?
調(diào)參即對模型的參數(shù)進(jìn)行相應(yīng)的調(diào)整,以期獲得更好的預(yù)測效果!
其中參數(shù)又分為:模型參數(shù)和模型超參數(shù)。
- 模型參數(shù):模型內(nèi)部的配置變量,可以用數(shù)據(jù)估計模型參數(shù)的值。比如線性回歸或邏輯回歸中的系數(shù)。
- 模型超參數(shù):模型外部的配置,必須手動設(shè)置參數(shù)的值,其值不能從數(shù)據(jù)估計得到。比如K近鄰分析的K,學(xué)習(xí)率learning_rate
即:
- 模型參數(shù)是從數(shù)據(jù)中自動估計的,而模型超參數(shù)是手動設(shè)置的,并用于估計模型參數(shù)的過程。
- 模型調(diào)參 調(diào)整的是模型超參數(shù)
2 為什么要調(diào)參
調(diào)參調(diào)參,無非就是將模型的超參數(shù)調(diào)整到最佳的參數(shù),使得模型預(yù)測的效果最好。
3 調(diào)參方法有哪些?
總的來說,調(diào)參方式有下面三種:
- 網(wǎng)格搜索。對應(yīng)sklearn中的GridSearchCV
- 隨機(jī)搜索。對應(yīng)sklearn中的RandomizedSearchCV
- 貝葉斯調(diào)參。見上面兩個鏈接。
3.1 網(wǎng)格搜索
3.1.1 原理
- GridSearchCV的名字其實可以拆分為兩部分,GridSearch和CV,即網(wǎng)格搜索和交叉驗證。
- 網(wǎng)格搜索,搜索的是參數(shù),即在指定的參數(shù)范圍內(nèi),從所有的參數(shù)中找到在測試集上精度最高的參數(shù),這其實是一個循環(huán)和比較的過程。
- 每一個參數(shù)組合下均使用交叉驗證來評估模型預(yù)測的效果
優(yōu)點(diǎn):
- 簡單,保證在指定的參數(shù)范圍內(nèi)找到精度最高的參數(shù)
缺點(diǎn):
- 耗時。要求遍歷所有可能參數(shù)的組合,在面對大數(shù)據(jù)集和多參數(shù)的情況下,非常耗時。
- 同時每種參數(shù)組合下均使用交叉驗證也要求大量的計算資源,加重了網(wǎng)格搜索的搜索時間。
3.1.2 Python實現(xiàn)
展示之前博客內(nèi)容 機(jī)器學(xué)習(xí) | 集成學(xué)習(xí) 中的調(diào)參內(nèi)容
步驟:
- 設(shè)置參數(shù)。設(shè)置要調(diào)參的參數(shù)
- 搭建模型。
- 搭建框架。網(wǎng)格調(diào)參框架搭建
- 擬合模型
- 查看結(jié)果。比如最佳學(xué)習(xí)器,最佳參數(shù)等等。
3.2 隨機(jī)搜索
3.2.1 原理
- 使用方法和網(wǎng)格調(diào)參一樣
- 不同點(diǎn):隨機(jī)在參數(shù)空間中以采樣的方式代替了GridSearchCV對于參數(shù)的網(wǎng)格搜索,在對于有連續(xù)變量的參數(shù)時,隨機(jī)搜索(RandomizedSearchCV)會將其當(dāng)作一個分布進(jìn)行采樣,這是網(wǎng)格搜索做不到的
步驟:
- 對于搜索范圍是distribution的超參數(shù),根據(jù)給定的distribution隨機(jī)采樣;
- 對于搜索范圍是list的超參數(shù),在給定的list中等概率采樣;
- 對a、b兩步中得到的n_iter組采樣結(jié)果,進(jìn)行遍歷。并從中找到最優(yōu)的一組參數(shù)。
為什么隨機(jī)搜索能夠起到作用?有一個形象的例子:
比如上面兩個圖:
- 目標(biāo)函數(shù):f(x,y)=g(x)+h(y),其中綠色為g(x),黃色為h(y),目的是求f的最大值。
- 由于g(x)數(shù)值上要明顯大于h(y),因此有f(x,y)=g(x)+h(y)≈g(x),也就是說在整體求解f(x,y)最大值的過程中,g(x)的影響明顯大于h(y)。所以可以只看綠色的g(x)
- 可以看到左邊的9個搜索中真正起到作用的只有3個,而右邊有9個!即對于f最大值的尋找有幫助的點(diǎn)!
- 可以看出右圖更可能找到目標(biāo)函數(shù)的最大值。
因此引入隨機(jī)因素在某些情況下可以提高尋優(yōu)效率。
3.2.2 Python實現(xiàn)
# 導(dǎo)入相應(yīng)的庫 from sklearn.grid_search import RandomizedSearchCV# 設(shè)置要調(diào)參的參數(shù) param_test1 = {'n_estimators':range(80,300,20),"max_features": sp_randint(1, 11), #給定distribution 區(qū)別于網(wǎng)格搜索的"min_samples_split": sp_randint(2, 11), #給定distribution'learning_rate': [0.1, 0.2, 0.3]} # 即[10, 20, 30, 40, 50, 60, 70]# 搭建模型 estimator = GradientBoostingClassifier(min_samples_leaf=20,max_depth=8,subsample=0.8, # 子采樣random_state=23) # 網(wǎng)格調(diào)參框架搭建 gsearch1 = RandomizedSearchCV(estimator, # 預(yù)測器param_test1, # 參數(shù)scoring='roc_auc', # 評價準(zhǔn)則cv=5, # 交叉驗證次數(shù)n_iter=300) # 訓(xùn)練300次,數(shù)值越大,獲得的參數(shù)精度越大,但是搜索時間越長# 擬合模型 開始漫漫調(diào)參路 針對訓(xùn)練集 gsearch1.fit(X_train, y_train)# 查看調(diào)參結(jié)果 最優(yōu)訓(xùn)練器的精度(best_score_) gsearch1.best_params_, gsearch1.best_score_, gsearch1.best_estimator_3.3 貝葉斯調(diào)參
3.3.1 區(qū)別于前兩種方法的點(diǎn)
- 網(wǎng)格搜索和隨機(jī)搜索在測試一個新的點(diǎn)時,會忽略前一個點(diǎn)的信息。
- 貝葉斯優(yōu)化會考慮前一個點(diǎn)的信息。
- 貝葉斯優(yōu)化的工作方式:通過對目標(biāo)函數(shù)形狀的學(xué)習(xí),找到使結(jié)果向全局最大值提升的參數(shù)。
- 學(xué)習(xí)目標(biāo)函數(shù)形狀的方法:根據(jù)先驗分布,假設(shè)一個搜集函數(shù)。在每一次使用新的采樣點(diǎn)來測試目標(biāo)函數(shù)時,它使用這個信息來更新目標(biāo)函數(shù)的先驗分布。然后,算法測試由后驗分布給出的,全局最值最可能出現(xiàn)的位置的點(diǎn)。
存在的問題:
- 一旦找到了一個局部最大值或最小值,它會在這個區(qū)域不斷采樣,所以很容易陷入局部最值
解決方案:
-
勘探:在還未取樣的區(qū)域獲取采樣點(diǎn)
-
開采:根據(jù)后驗分布,在最可能出現(xiàn)全局最值的區(qū)域進(jìn)行采樣。
3.3.2 原理
- 利用用戶假設(shè)的目標(biāo)函數(shù)的先驗概率與目前已知數(shù)據(jù)構(gòu)建目標(biāo)函數(shù)的概率模型,并由推斷下一步最優(yōu)參數(shù)組合, 進(jìn)而更新概率模型.
3.3.3 Python實現(xiàn)
以上兩部分比較復(fù)雜,內(nèi)容較多,單獨(dú)開一篇博客!借鑒ZR的相關(guān)內(nèi)容!code和原理已經(jīng)準(zhǔn)備好了,加油!
4 參考
- https://blog.csdn.net/csdn_elsa/article/details/82494153
- https://blog.csdn.net/juezhanangle/article/details/80051256
- https://blog.csdn.net/qq_27782503/article/details/89323456
- https://blog.csdn.net/qq_36810398/article/details/86699842
- https://blog.csdn.net/gzj533/article/details/77734310
- 網(wǎng)格調(diào)參官方文檔:https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html
- 隨機(jī)調(diào)參官方文檔:https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html
總結(jié)
以上是生活随笔為你收集整理的机器学习 | 调参 Part1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle的Connect By用法及
- 下一篇: 【洛谷P3386】【模板】二分图匹配【网