gpt4 book ai didi

python - 在 DBSCAN 中打开并行处理

转载 作者:行者123 更新时间:2023-11-30 08:44:49 25 4
gpt4 key购买 nike

我正在尝试将多个核心与sklearn的DBSCAN一起使用,但是当我更改 n_jobs = -1 时,运行时间似乎没有变化(按照文档的建议,使用所有处理器来运行并行作业)。我错过了什么?

import numpy as np
from sklearn.metrics.pairwise import euclidean_distances
from time import time
from sklearn.cluster import DBSCAN

# generate a symmetric distance matrix
num_training_examples = 10000
num_features = 10
X = np.random.randint(5, size=(num_training_examples, num_features))
D = euclidean_distances(X,X)

# DBSCAN parameters
eps = 0.25
kmedian_thresh = 0.005
min_samples = 5

# case 1: omit n_jobs arg from DBSCAN
start = time()
db = DBSCAN(eps=eps,
min_samples = min_samples,
metric='precomputed').fit(D)
end = time()
total_time = end - start
print('DBSCAN took {} seconds for {} training examples without n_jobs arg'\
.format(total_time,num_training_examples))


# case 2: add n_jobs arg to DBSCAN
n_jobs = -1
start = time()
db = DBSCAN(eps=eps,
min_samples = min_samples,
metric='precomputed',
n_jobs=n_jobs).fit(D)
end = time()
total_time = end - start
print('DBSCAN took {} seconds for {} training examples with n_jobs arg'\
.format(total_time,num_training_examples,n_jobs))
  • 在没有 n_jobs arg 的情况下,DBSCAN 花了 0.710000038147 秒处理 10000 个训练示例
  • DBSCAN 在 n_jobs = -1 的情况下处理 10000 个训练示例花费了 0.707999944687 秒

最佳答案

编辑:不是开销问题。 Op已经在评论中给出了答案,n_jobs is not used if the metric is precomputed.

简而言之,您遇到了开销问题。

您仅使用 10000 个进行训练,因此所需的最佳作业数量可能不会很多。仔细想想,如果您有 100 个寄存器并为每个寄存器创建一个作业,那么创建一个作业所需的时间可能比处理一个寄存器的时间还要长,对吗?是的,我知道这是一个非常极端的案例,但小范围内可能会发生在您身上。

如果要做实证分析,可以尝试逐一增加作业并计算时间,然后也开始增加寄存器数量。您会注意到其中的差异。

堆栈溢出有很多解释,here you have one about threads.

关于python - 在 DBSCAN 中打开并行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59976365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com