2016-12-16 5 views
4

私はxgboostに新しく、従来のgbmと比較して使い方を学ぼうとしています。しかし、私はxgboostgbmよりはるかに遅いことに気づいた。例は次のとおりです。8コアを搭載したMacBook Proの上でXGBRegressorはGradientBoostingRegressorよりもはるかに遅い

from sklearn.model_selection import KFold, GridSearchCV 
from sklearn.ensemble import GradientBoostingRegressor 
from xgboost import XGBRegressor 
from sklearn.datasets import load_boston 
import time 

boston = load_boston() 
X = boston.data 
y = boston.target 

kf = KFold(n_splits = 5) 
cv_params = {'cv': kf, 'scoring': 'r2', 'n_jobs': 4, 'verbose': 1} 

gbm = GradientBoostingRegressor() 
xgb = XGBRegressor() 

grid = {'n_estimators': [100, 300, 500], 'max_depth': [3, 5]} 

timer = time.time() 
gbm_cv = GridSearchCV(gbm, param_grid = grid, **cv_params).fit(X, y) 
print('GBM time: ', time.time() - timer) 

timer = time.time() 
xgb_cv = GridSearchCV(xgb, param_grid = grid, **cv_params).fit(X, y) 
print('XGB time: ', time.time() - timer) 

、出力は次のようになります。

Fitting 5 folds for each of 6 candidates, totalling 30 fits 
[Parallel(n_jobs=4)]: Done 30 out of 30 | elapsed: 1.9s finished 
GBM time: 2.262791872024536 
Fitting 5 folds for each of 6 candidates, totalling 30 fits 
[Parallel(n_jobs=4)]: Done 30 out of 30 | elapsed: 16.4s finished 
XGB time: 17.902266025543213 

私はxgboostがはるかに高速ので、私は何か間違ったことしなければならないべきであると思いました。誰かが私が間違ってやっていることを指摘するのに役立つことができますか?

+0

これは私があなたのコードを正確に実行していることです: 'GBM時間:2.1901206970214844 XGB時間:2.5632455348968506'。 – josh

答えて

1

n_jobsが4に設定されている場合、出力はGBMのための2.5Sですが、非常に長い時間がかかりますcv_params

Fitting 5 folds for each of 6 candidates, totalling 30 fits 
[Parallel(n_jobs=1)]: Done 30 out of 30 | elapsed: 4.1s finished 
('GBM time: ', 4.248916864395142) 
Fitting 5 folds for each of 6 candidates, totalling 30 fits 
('XGB time: ', 2.934467077255249) 
[Parallel(n_jobs=1)]: Done 30 out of 30 | elapsed: 2.9s finished 

n_jobsパラメータを設定せずに、私のマシン上で動作しているとき、これが出力されXGBの場合

これは多分n_jobsの問題です! XGBoostライブラリがGridSearchCVでn_jobsを実行するように設定されていない可能性があります。

関連する問題