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