如下是Coursera上的How to Win a Data Science Competition: Learn from Top Kagglers課程筆記。html
Hyperparameter Optimization
- List most important hyperparameters in major models; describe their impact
- Understand the hyperparameter tuning process in general
- Arrange hyperparameters by their importance
Hyperparameter tuning I
Plan for the lecturepython
- Hyperparameter tuning in general
- General pipeline
- Manual and automatic tuning
- What should we understand about hyperparameters?
- Models,libraries and hyperparameter optimization
- Tree-based models
- Neural networks
- Linear models
Plan for the lecture:modelsgit
- Tree-based models
- GBDT: XGBoost, LightGBM, CatBoost
- RandomForest/ExtraTrees
- Neural nets
- Pytorch, Tensorflow, Keras...
- Linear models
- SVM, logistic regression
- Vowpal Wabbit, FTRL
- Factorization Machines(out of scope)
- libFM, libFFM
How do we tune hyperparameters
Hyperparameter optimization software自動調參工具
運行調參工具可能須要很長時間,所以最好的策略是在夜間運行它。網絡
- A lot of libraries to try:
- Hyperopt
- Scikit-optimize
- Spearmint
- GPyOpt
- RoBO
- SMAC3
從廣義上講,不一樣的參數會致使三種不一樣的結果dom
- 1.Underfitting(bad)
- 2.Good fit and generalization(good)
- 3.Overfitting(bad)
所以咱們須要把想要調整的參數分爲兩組。第一組是約束模型的參數,第二組與第一組效果相反。ide
- A parameter in red
- Increasing it impedes fitting
- Increase it to reduce overfitting
- Decrease to allow model fit easier
- A parameter in green
- Increasing it leads to a batter fit(overfit) on train set
- Increase it, if model underfits
- Decrease if overfits
上面提到的顏色只是視頻中的標記工具
Hyperparameter tuning II
一些基於樹模型的超參數優化學習
GBDT
max_depth |
max_depth/num_leaves |
subsample |
bagging_fraction |
colsample_bytree, colsample_bylevel |
frature_fraction |
min_child_weight,
lambda,alpha |
min_data_in_leaf,
lambda_l1,lambda_l2 |
eta num_round |
learning_rate num_iterations |
Others: seed |
Others: *_seed |
- max_depth:
樹越深,越能擬合數據集,但這能夠會致使過擬合。根據任務的不一樣,最大深度可能會有很大差別,有時是2,有時是27。建議max_depth大約從7開始,直到未過擬合的最大深度。須要注意的是深度增長,學習時間就更長。
- num_leaves:
在LightGBM中,能夠控制葉的數量,而不是最大深度。由於樹能夠很深,但若是葉子數量少就不會致使過擬合。
- subsample、bagging_fraction:
這個參數能夠控制每次餵給模型的數據量,取值在0,1之間。每次餵給它一小部分數據,可讓它不那麼過擬合,而且能夠獲得更好的泛化效果,可是模型的訓練會更慢。這有點像正則化的做用。
- colsample_bytree、colsample_bylevel:
這個參數能夠控制subsample中的分裂點。若是模型過擬合,能夠嘗試下降這些值。
- min_child_weight,lambda,alpha:
正則化參數。
- min_child_weight:
經驗中,這是最重要的參數。增長它可讓模型更保守,減小它會讓模型有更少約束。根據不一樣的任務,我發現最佳值爲0,5,15,300,因此不要猶豫,嘗試各類值,這取決於數據。
- eta、num_round:eta本質上是一種學習權重,就像梯度降低同樣。num_round是咱們想要執行的學習步數,換句話說,是咱們想要建多少棵樹。每次迭代都會構建一個新樹,以學習率eta添加到模型中。
- 當咱們找到合適的輪數時,能夠作一個一般會提升分數的技巧。咱們將num_round乘以α,將eta除以α,模型一般會變得更好。可能應用的參數也須要調整,但一般能夠保留原樣。
Other
- seed:
通常狀況下隨機種子對於模型影響不大。但若是隨機種子對你的影響很是大時,建議你能夠屢次提交,或者根據隨機性調整你的驗證方案。
sklearn.RandomForest/ExtraTrees
- n_estimators:
RandomForest構建每棵樹是獨立於其餘樹的,這意味這擁有大量樹的模型不會致使過擬合,這於Gradient Boosting相反。咱們一般首先將n_estimators設置爲很是小的數字,例如10,並看看這將花費多少時間,若是不太長,就把它設爲一個比較大的值,例如300。
- max_deep:
控制樹的深度,於XGBoost不一樣,它能夠被設置爲None,這對應於無限深度。當數據集中的特徵具備重複值和重要交互時,它實際上很是有用。在其餘狀況下,無約束深度的模型將當即過擬合。建議隨機森林的深度從7左右開始。一般隨機深林的最佳深度高於Gradient Boosting,全部不要猶豫嘗試10,20或更高的值。
- max_feature:
與XGBoost中的參數相同。
- min_samples_leaf:
是一個相似正則化的參數,與XGBoost的min_child_weight和LightGBM的min_data_leaf相同。
Other
- criterion:
根據個人經驗,Gini更常見,但有時Entropy更好。
- random_state:
隨機種子參數
- n_jobs:設置擁有多個核心數。默認狀況下sklearn的RandomForest因爲某種緣由僅使用一個核心。
Hyperparameter tuning III
- Neural nets
- Pytorch, Tensorflow, Keras...
- Linear models
- SVM, logistic regression
- Vowpal Wabbit, FTRL
Neural Nets
這裏討論的是dense neural nets,即只含有全鏈接層的網絡
自適應算法已高亮+斜體顯示
Linear models
Linear models
Tips
相關連接