Python:GridSearchCV 花费太长时间才能完成运行

问题描述 投票:0回答:3

我正在尝试进行网格搜索来优化我的模型,但执行时间太长。我的总数据集只有大约 15,000 个观察值,大约有 30-40 个变量。我成功地通过 gridsearch 运行了一个随机森林,这花了大约一个半小时,但现在我已经切换到 SVC,它已经运行了 9 个多小时,但仍然没有完成。以下是我的交叉验证代码示例:

from sklearn.model_selection import GridSearchCV
from sklearn import svm
from sklearn.svm import SVC

SVM_Classifier= SVC(random_state=7)



param_grid = {'C': [0.1, 1, 10, 100],
              'gamma': [1,0.1,0.01,0.001],
              'kernel': ['linear', 'poly', 'rbf', 'sigmoid'],
              'degree' : [0, 1, 2, 3, 4, 5, 6]}

grid_obj = GridSearchCV(SVM_Classifier,
                        
                        return_train_score=True,
                        param_grid=param_grid,
                        scoring='roc_auc',
                        cv=3,
                       n_jobs = -1)

grid_fit = grid_obj.fit(X_train, y_train)
SVMC_opt = grid_fit.best_estimator_

print('='*20)
print("best params: " + str(grid_obj.best_estimator_))
print("best params: " + str(grid_obj.best_params_))
print('best score:', grid_obj.best_score_)
print('='*20)

我已经将交叉验证从 10 个减少到 3 个,并且我使用 n_jobs=-1,因此我正在调动所有核心。我还缺少什么可以在这里做来加快这个过程吗?

python machine-learning scikit-learn data-science cross-validation
3个回答
4
投票

不幸的是,SVC 的拟合算法最多是 O(n^2),所以它确实非常慢。即使文档也建议在~10k样本以上使用LinearSVC,你就在这个范围内。

也许尝试增加内核

cache_size
。我建议对单个 SVC 进行计时,以适应不同的缓存大小,看看您是否可以获得一些东西。

编辑:顺便说一句,您不必要地计算大量具有不同

degree
参数值的SVC拟合,其中这些值将被忽略(除了
poly
之外的所有内核)。我建议分开运行
poly
和其他内核,你会节省很多时间。


2
投票

虽然探索 LinearSVC 可能是一个不错的选择(并且您应该清理其他答案中提到的参数组合),您也可以在您选择的支持 GPU 的云实例上使用 RAPIDS cuML 中的 GPU 加速 SVC 估计器(如果您有 NVIDIA GPU,则可以在本地)。如果您使用默认的

GridSearchCV
,则可以将此估计器直接放入您的
n_jobs=1
函数中。 (免责声明:我从事这个项目)。

例如,我在本地计算机 [0] 上运行了以下命令:

import sklearn.datasets
import cuml
from sklearn.svm import SVC

X, y = sklearn.datasets.make_classification(n_samples=15000, n_features=30)
%timeit _ = SVC().fit(X, y).predict(X)
%timeit _ = cuml.svm.SVC().fit(X, y).predict(X)
8.68 s ± 64.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
366 ms ± 1.26 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

[0]系统

  • CPU:Intel(R) Xeon(R) Gold 6128 CPU @ 3.40GHz,CPU:12
  • GPU:Quadro RTX 8000

0
投票

尝试使用标准缩放器来缩放训练和测试数据。正如建议的here SVM 不是尺度不变的

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