加速 sklearn 中的网格搜索

Posted

技术标签:

【中文标题】加速 sklearn 中的网格搜索【英文标题】:Speeding up grid search in sklearn 【发布时间】:2016-07-26 01:50:00 【问题描述】:

我正在执行网格搜索以确定最佳 SVM 参数。我正在使用 ipython 和 sklearn。代码很慢,只在一个内核上运行。如何将其播种并利用多个内核?谢谢

random_state = np.random.RandomState(10)
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=.2,random_state=random_state)

model_to_set = OneVsRestClassifier(svm.SVC(kernel="linear"))

parameters = 
    "estimator__C": [1, 2, 4, 8, 16, 32],
    "estimator__kernel": ["linear", "rbf"],
    "estimator__gamma":[1, 0.1, 1e-2, 1e-3, 1e-4],


model_tuning = GridSearchCV(model_to_set, param_grid=parameters)
model_tuning.fit(X_train, y_train)

print model_tuning.best_score_
print model_tuning.best_params_
print "Time passed: ", "0:.1f".format(time.time()-t), "sec"

【问题讨论】:

【参考方案1】:

GridSearchCV中有一个n_job参数

n_jobs : int, default=1

并行运行的作业数。换了 0.17 版:升级到 joblib 0.9.3。

【讨论】:

【参考方案2】:

默认情况下,GridSearchCV 使用 1 个作业来搜索估计器的指定参数值。

因此,您需要通过更改以下行来明确设置所需的并行作业数:

model_tuning = GridSearchCV(model_to_set, param_grid=parameters)

进入以下以允许作业并行运行:

model_tuning = GridSearchCV(model_to_set, param_grid=parameters, n_jobs=4)

【讨论】:

以上是关于加速 sklearn 中的网格搜索的主要内容,如果未能解决你的问题,请参考以下文章

在处理 VotingClassifier 或网格搜索时,Sklearn 中的 GradientBoostingClassifier 是不是有类权重(或替代方式)?

sklearn 网格搜索与分组 K 折 cv 生成器

管道和网格搜索的 SKLearn 错误

sklearn 中处理网格搜索组合的顺序是啥?

在 sklearn 中制作网格搜索功能以忽略空模型

你能从 sklearn 网格搜索 (GridSearchCV) 中获得所有估计器吗?