【数据竞赛】席卷Kaggle的调参神器,NN和树模型通吃!
作者:杰少
Optuna技術!
簡 介
目前非常多的超參尋優算法都不可避免的有下面的一個或者多個問題:
需要人為的定義搜索空間;
沒有剪枝操作,導致搜索耗時巨大;
無法通過小的設置變化使其適用于大的和小的數據集;
本文介紹的一種超參尋優策略則同時解決了上面三個問題,與此同時,該方法在目前kaggle的數據競賽中也都是首選的調參工具包,其優勢究竟有多大,我們看一下其與目前最為流行的一些工具包的對比。
Optuna
01
Define-By-Run的API
Optuna將超參數優化描述為一個最小化/最大化目標函數的過程,該目標函數以一組超參數作為輸入并返回其(驗證)分數。該函數不依賴于外部定義的靜態變量,動態構造神經網絡結構的搜索空間(層數和隱單元數)。Optuna是以每一個優化過程為研究對象,以每一個評價目標函數為試驗對象。Optuna中的目標函數接收的不是超參數值,而是與單個試驗相關聯的活動試驗對象。
模塊化編程:Optuna的代碼是模塊化的,用戶可以輕松地用其他條件變量和其他參數集的方法擴充代碼,并從更多樣化的模型池中進行選擇。
Optuna可以較為容易地進行部署;
02
高效的采樣和剪枝策略
關系采樣,Optuna可以識別關于共現的實驗結果,通過這種方式,框架可以在經過一定數量的獨立采樣后識別出潛在的共現關系,并使用推斷出的共現關系進行用戶選擇的關系采樣算法。
高效的剪枝算法,Optuna會定期監測中間目標值并終止不符合預定條件的試驗。它還采用異步Successive Halving算法,所以我們可以在此進行并行計算,而相互不會有太多影響。
03
可擴展的同時易于設置
Optuna是一個可擴展的系統,它可以處理各種各樣的任務,包括:
從需要大量工作人員的繁重實驗到通過Jupyter Notebook等交互界面進行的試驗級、輕量級計算;
當用戶需要進行分布式計算時,Optuna的用戶可以部署關系數據庫作為后端。Optuna的用戶也可以使用SQLite數據庫。
Optuna的新設計大大減少了部署存儲所需的工作量,新的設計可以很容易地集成到Kubernetes這樣的容器編排系統中。
代 碼
1. 數據集生成
#?!pip?install?optuna import?optuna from?sklearn.neighbors?import?KNeighborsClassifier from?sklearn.model_selection?import?KFold?,?cross_val_score from?sklearn.datasets?import?load_iris from?sklearn.model_selection?import?train_test_split import?lightgbm?as?lgb import?numpy?as?np from?optuna.samplers?import?TPESampler from?sklearn.metrics?import?accuracy_scoreiris?=?load_iris() X?=?iris.data y?=?iris.targetX_train,X_test,y_train,y_test?=?train_test_split(X,y,test_size?=?0.3,random_state?=?14)2. Optuna+LightGBM
sampler?=?TPESampler(seed=10)?#?for?reproducibility def?objective(trial):dtrain?=?lgb.Dataset(X_train,?label=y_train)param?=?{'objective':?'multiclass','metric':?'multi_logloss','verbosity':?-1,'boosting_type':?'gbdt','num_class':3,'lambda_l1':?trial.suggest_loguniform('lambda_l1',?1e-8,?10.0),'lambda_l2':?trial.suggest_loguniform('lambda_l2',?1e-8,?10.0),'num_leaves':?trial.suggest_int('num_leaves',?2,?512),'learning_rate':?trial.suggest_loguniform('learning_rate',?1e-8,?1.0),'n_estimators':?trial.suggest_int('n_estimators',?700,?3000),'feature_fraction':?trial.suggest_uniform('feature_fraction',?0.4,?1.0),'bagging_fraction':?trial.suggest_uniform('bagging_fraction',?0.4,?1.0),'bagging_freq':?trial.suggest_int('bagging_freq',?1,?7),'min_child_samples':?trial.suggest_int('min_child_samples',?5,?100),}gbm?=?lgb.train(param,?dtrain)return?accuracy_score(y_test,?np.argmax(gbm.predict(X_test),axis=1))study?=?optuna.create_study(direction='maximize',?sampler=sampler) study.optimize(objective,?n_trials=100)輸出模型的最好結參數
適用問題
Optuna方法目前適用于所有模型的參數的調節,傳統的模型亦或者是神經網絡模型。目前最新的kaggle競賽中,該方法可以非常快速的尋找到最優的參數,是目前必須一試的算法。
參考文獻
https://github.com/optuna/optuna
Optuna: A Next-generation Hyperparameter Optimization Framework
Smart Hyperparameter Tuning With Optuna
總結
以上是生活随笔為你收集整理的【数据竞赛】席卷Kaggle的调参神器,NN和树模型通吃!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爱奇艺怎么开启数据流量自动播放
- 下一篇: U盘装win7系统出现question(