2017-07-18 54 views
-2

我有一個15,000左右的小數據集有13個功能。所有的輸入都是整數,而不是非常大的數字。SVR,SVM,梯度提升和XGBoost永遠運行[python]

我使用這些數據來訓練分類器,如SVR,SVM,XGboost等與Gridsearch。

但是每次訓練過程中需要永遠。(超過60分鐘)

我已經擴展我的輸入數據X,但它仍然需要大量的時間。 另外,從其他有類似問題的帖子中,加入了catch_size iin分類器,如SVC(cache_size = 7000)來訓練模型,但似乎無助於加速計算。

它自己的數據非常小,所以我覺得這很奇怪。

這裏是我的代碼的例子,如果有人可以給我什麼建議,我將非常感激非常。

from xgboost.sklearn import XGBRegressor 

one_to_left = st.beta(10, 1)  
from_zero_positive = st.expon(0, 50) 

params = { 
    "n_estimators": [100, 110, 120, 130, 140, 150, 160, 170, 180, 190,  200], 
    "max_depth": [2, 3, 4, 5, 6, 7, 8, 9, 10], 
    "learning_rate": [0.05, 0.4, 1, 1.5, 2, 2.5, 3, 4], 
    "colsample_bytree": [0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0], 
    "subsample":[0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0], 
         } 

xgbreg = XGBRegressor() 
gs = GridSearchCV(xgbreg, params) 
gs.fit(X_train, y_train) 
y_gs = gs.predict(X_test) 

目標變量y是整數迴歸問題的百分比; 二進制數據0和1用於分類問題。

+0

不能說XGBoost,但基於svm的估計量與縮放​​數據(主要是意味着標準化)運作良好。看看[這裏](http://scikit-learn.org/stable/modules/preprocessing.html#standardization-or-mean-removal-and-variance-scaling)。同時發佈您的數據和完整的代碼,以便其他人可以驗證他們機器上的運行時間。 –

回答

0

讓我們看看在電網使用的是:

params = { 
    "n_estimators": [100, 110, 120, 130, 140, 150, 160, 170, 180, 190,  200], 
    "max_depth": [2, 3, 4, 5, 6, 7, 8, 9, 10], 
    "learning_rate": [0.05, 0.4, 1, 1.5, 2, 2.5, 3, 4], 
    "colsample_bytree": [0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0], 
    "subsample":[0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0], 
         } 

電網的總大小爲:

from numpy import prod 

grid_size_per_parameter = [len(i) for i in params.values()] 
### [8, 11, 9, 8, 8] 

prod(grid_size_per_parameter) 
50688 # this is how many models you need to train, not counting cv folds 

你有一個大的網格。許多模型要訓練。 我的意思是如果這需要一個小時,你仍然可以每分鐘訓練1000個模型:)

如果你有多CPU機器,你可以設置n_jobs= -1來使用所有可用的並行核心。但我會更聰明地與電網。搜索更小的空間。