機器學習中的超引數優化
筆記。
超引數搜尋
超引數是在建立模型時用於控制演算法行為的引數。這些引數不能從常規訓練過程中獲得。在對模型進行訓練之前,需要對它們進行賦值。
包括:傳統的手工調參, 網格搜尋,隨機搜尋,貝葉斯搜尋。
sklearn.model_selection.GridSearchCV — scikit-learn 1.0.1 documentation
網格搜尋是一種基本的超引數調優技術。它類似於手動調優,為網格中指定的所有給定超引數值的每個排列構建模型,評估並選擇最佳模型。【sklearn的GridSearchCV
,由於它嘗試了超引數的每一個組合,並根據交叉驗證得分選擇了最佳組合,這使得GridsearchCV非常慢。】
使用隨機搜尋代替網格搜尋的動機是,在許多情況下,所有的超引數可能不是同等重要的。隨機搜尋從超引數空間中隨機選擇引數組合,引數由n_iter給定的固定迭代次數的情況下選擇。實驗證明,隨機搜尋的結果優於網格搜尋。【sklearn的RandomizedSearchCV
】隨機搜尋的問題是它不能保證給出最好的引數組合。
貝葉斯優化屬於一類優化演算法,稱為基於序列模型的優化(SMBO)演算法。這些演算法使用先前對損失 f 的觀察結果,以確定下一個(最優)點來抽樣 f。該演算法大致可以概括如下。
- 使用先前評估的點 X 1:n,計算損失 f 的後驗期望。
- 在新的點 X 的抽樣損失 f,從而最大化f
重複這些步驟,直到滿足某些收斂準則。
【scikit- optimization的BayesSearchCV
】要在2維或3維的搜尋空間中得到一個好的代理曲面需要十幾個樣本,增加搜尋空間的維數需要更多的樣本。
在確定引數的最佳組合的保證和計算時間之間總是存在權衡。如果超引數空間(超引數個數)非常大,則使用隨機搜尋找到超引數的潛在組合,然後在該區域性使用網格搜尋(超引數的潛在組合)選擇最優特徵。
XGBoost調參
XGBoost python調參示例_一路前行-CSDN部落格
xgboost原理及調參方法-通俗易懂版本 - 簡書 (jianshu.com)
模型融合---Xgboost調參總結 - 走看看 (zoukankan.com)
XGBoost(eXtreme Gradient Boosting)是Gradient Boosting演算法的一個優化的版本。
- XGBoost 允許使用者定義自定義優化目標和評價標準。
- 當分裂時遇到一個負損失時,GBM(Gradient Boosting Machine)會停止分裂。因此GBM實際上是一個貪心演算法。
- XGBoost會一直分裂到指定的最大深度(max_depth),然後回過頭來剪枝。如果某個節點之後不再有正值,它會去除這個分裂。
- 這種做法的優點,當一個負損失(如-2)後面有個正損失(如+10)的時候,就顯現出來了。GBM會在-2處停下來,因為它遇到了一個負值。但是XGBoost會繼續分裂,然後發現這兩個分裂綜合起來會得到+8,因此會保留這兩個分裂。
optuna
【機器學習】Optuna機器學習模型調參(LightGBM、XGBoost)_ccql's Blog-CSDN部落格
召喚超參調優開源新神器:集XGBoost、TensorFlow、PyTorch等十大模組於一身 - 知乎 (zhihu.com)
使用 Optuna 優化你的優化器 (qq.com)
optuna是一個使用python編寫的超引數調節框架。一個極簡的 optuna 的優化程式中只有三個最核心的概念,目標函式(objective),單次試驗(trial),和研究(study). 其中 objective 負責定義待優化函式並指定參/超引數數範圍,trial 對應著 objective 的單次執行,而 study 則負責管理優化,決定優化的方式,總試驗的次數、試驗結果的記錄等功能。