SVR,SVM,Gradient boosting和XGBoost永远运行[python]

问题描述 投票:-2回答:2

我有一个15,000个小数据集,有13个功能。所有输入都是整数,没有很大的数字。

我使用这些数据通过Gridsearch训练分类器,如SVR,SVM,XGboost等。

然而,每个培训过程都需要永远。(超过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用于分类问题。

python svm xgboost
2个回答
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使用所有可用的并行内核。但我会更聪明地使用网格。搜索较小的空间。


0
投票

设置n_jobs = 1是一个很好的解决方案,但更好的方法是使用Randomsearch()代替。

事实证明,随机网格点选择可以更快,更有效地达到更好的模型。

© www.soinside.com 2019 - 2024. All rights reserved.