【问题标题】:SVR, SVM, Gradient boosting and XGBoost runs forever [python]SVR、SVM、梯度提升和 XGBoost 永远运行 [python]
【发布时间】:2017-12-23 14:25:04
【问题描述】:

我有一个大约 15,000 个包含 13 个特征的小型数据集。 所有输入都是整数,没有非常大的数字。

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

但是每个训练过程都需要很长时间。(超过 60 分钟)

我已经对输入数据 X 进行了缩放,但仍然需要很长时间。 另外,从其他有类似问题的帖子中,已经添加了诸如SVC(cache_size = 7000)之类的catch_size iin分类器来训练模型,但是对于加快计算速度似乎无能为力。

它本身的数据非常小,所以我对此感到很奇怪。

这是我的代码示例,如果有人可以给我任何建议,我将非常感激。

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 用于分类问题。

【问题讨论】:

  • 不能说 XGBoost,但基于 svm 的估计器可以很好地处理缩放数据(主要是标准化)。看here。同时发布您的数据和完整的代码,以便其他人可以验证他们机器上的运行时间。

标签: python svm xgboost


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    让我们看看您正在使用的网格:

    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 以使用所有可用的并行内核。但我会更聪明地使用网格。搜索更小的空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-01
      • 1970-01-01
      • 2019-12-04
      • 2020-05-12
      • 2013-12-08
      • 2016-06-29
      • 2015-07-12
      • 1970-01-01
      相关资源
      最近更新 更多