python - scikit-learn 中的 n_jobs 并行化pairwise_distances

标签 python scikit-learn

感谢Philip Cloud的伟大answer to a previous question ,我深入研究了 scikit 中 pairwise_distances 的源代码。

相关部分是:

def pairwise_distances(X, Y=None, metric="euclidean", n_jobs=1, **kwds):
    if metric == "precomputed":
        return X
    elif metric in PAIRWISE_DISTANCE_FUNCTIONS:
        func = PAIRWISE_DISTANCE_FUNCTIONS[metric]
        if n_jobs == 1:
            return func(X, Y, **kwds)
        else:
            return _parallel_pairwise(X, Y, func, n_jobs, **kwds)
    elif callable(metric):
        # Check matrices first (this is usually done by the metric).
        X, Y = check_pairwise_arrays(X, Y)
        n_x, n_y = X.shape[0], Y.shape[0]
        # Calculate distance for each element in X and Y.
        # FIXME: can use n_jobs here too
        D = np.zeros((n_x, n_y), dtype='float')
        for i in range(n_x):
            start = 0
            if X is Y:
                start = i
            for j in range(start, n_y):
                # distance assumed to be symmetric.
                D[i][j] = metric(X[i], Y[j], **kwds)
                if X is Y:
                    D[j][i] = D[i][j]
        return D

如果我要计算如下的成对距离矩阵,是否正确理解:

matrix =pairwise_distances(foo, metric=lambda u,v: hasrsine(u,v), n_jobs= -1)

其中 haversine(u,v) 是一个计算两点之间的 Haversine 距离的函数,而该函数在 PAIRWISE_DISTANCE_FUNCTIONS没有,即使n_jobs= -1,该计算也不会并行化?

我意识到#FIXME评论似乎暗示了这一点,但我想确保我没有疯,因为没有抛出信息性警报来说明这一点似乎有点奇怪当您使用不在 PAIRWISE_DISTANCE_FUNCTIONS 中的可调用函数传递 n_jobs= -1 时,计算实际上不会并行化。

最佳答案

已确认。如果可调用对象不在 PAIRWISE_DISTANCE_FUNCTIONS 中,则将可调用对象作为指标n_jobs= -1 一起传递将不会导致并行化。

关于python - scikit-learn 中的 n_jobs 并行化pairwise_distances,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18523542/

相关文章:

python - 如何将多个分布列表传递给sklearn randomizedSearchCV

python - psycopg2 - 使用带有 execute_values 的 SQL 对象

python - scikit learn 网格交叉验证返回不正确的平均值

python - 为什么我使用更好的处理器后 GridSearchCV().fit() 运行速度变慢?

scikit-learn - sklearn.manifold中的余弦相似度TSNE

python - 使用 sklearn - python 具有分类特征的多元线性回归

python - 相当于断言正则表达式 Python 中否定查找中的 (.*)

python - 在python中生成分类数据集

python - 两个具有公差的多维数组之间的交集 - NumPy/Python

keras - 如何使用分布式 Dask 和预训练的 Keras 模型进行模型预测?