python - 为什么 GridSearchCV 在 { 'acquire' 对象的方法 'thread.lock'} 上花费超过 50% 的时间?

标签 python scikit-learn

最近我正在调整我的一些机器学习管道。我决定利用我的多核处理器。我使用参数 n_jobs=-1 运行交叉验证。我还对它进行了分析,令我惊讶的是:最重要的功能是:

{method 'acquire' of 'thread.lock' objects}

由于我在 Pipeline 中进行的操作,我不确定这是否是我的错。所以我决定做个小实验:

pp = Pipeline([('svc', SVC())])
cv = GridSearchCV(pp, {'svc__C' : [1, 100, 200]}, jobs=-1, cv=2, refit=True)
%prun cv.fit(np.random.rand(1e4, 100), np.random.randint(0, 5, 1e4))

输出是:

2691 function calls (2655 primitive calls) in 74.005 seconds
Ordered by: internal time

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
   83   43.819    0.528   43.819    0.528 {method 'acquire' of 'thread.lock' objects}
    1   30.112   30.112   30.112   30.112 {sklearn.svm.libsvm.fit}

我想知道这种行为的原因是什么。如果有可能加快一点。

最佳答案

探查器只告诉你主进程在做什么,而它的子进程正在做所有的工作。在这种情况下,在 GridSearchCV 上设置 verbose=2 可能会提供比 %prun 更好的输出。

关于python - 为什么 GridSearchCV 在 { 'acquire' 对象的方法 'thread.lock'} 上花费超过 50% 的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20072824/

相关文章:

python - scikit-learn:关于 RFECV 示例的问题

python - 如何关闭/打开 LSTM 层?

Python numpy按条件过滤二维数组

python - 分解适合 python 的随机森林分类?

python - sklearn 分类指标 auc 返回 ValueError

python - Tensorflow 分类示例期间的 tf.train.get.global_step 错误

python - 如何反转标签的 One-Hot Encoding 以评估 ML/DL 模型?

python - 带有自定义聚合函数的 pandas groupby() 并将结果放在新列中

python - 使用 GAE 数据存储进行作业管理

python - PIL ImageGrab 在 VirtualBox 的第二个虚拟监视器上失败