首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >光学平行度

光学平行度
EN

Stack Overflow用户
提问于 2020-01-16 08:38:04
回答 3查看 1K关注 0票数 3

我有下面的脚本(optics.py)来用预先设定的距离来估计聚类:

代码语言:javascript
复制
from sklearn.cluster import OPTICS
import numpy as np

distances = np.load(r'distances.npy')
clust = OPTICS(metric='precomputed', n_jobs=-1)
clust = clust.fit(distances)

查看htop结果,我可以看到只使用了一个CPU核心。

尽管scikit在多个进程中运行集群:

为什么n_jobs=-1没有使用所有的CPU核心?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-29 08:39:00

我也面临这个问题。根据一些论文(例如,,见摘要),光学因其顺序性而被称为并行处理具有挑战性。因此,当您使用n_jobs=-1时,sklearn可能会尝试使用所有内核,但是在额外的核心上没有什么可运行的。

也许您应该考虑其他集群算法,它们更适合并行性,例如@paul在注释中建议使用HDBSCAN。但似乎sklearn没有这样平行的光学选择,所以你需要使用其他的软件包。

票数 1
EN

Stack Overflow用户

发布于 2021-02-08 01:50:41

我是滑雪板光学模块的主要作者。并行性是困难的,因为有一个排序循环不能并行运行;也就是说,计算最密集的任务是距离计算,这些任务可以并行运行。更具体地说,sklearn光学计算上三角距离矩阵一次一行,从“n”距离查找开始,然后减少到“n-1,n-2”查找,总共进行n平方/2距离计算.问题是sklearn中的并行性通常由joblib处理,它使用进程(而不是线程),当在循环中使用时,这些进程对于创建和销毁具有相当高的开销。(也就是说,当您循环遍历数据集时,您创建并销毁了每一行的流程工作人员,而进程的'n‘设置/拆卸有更多的开销,而不是您从joblib获得的并行性好处--这就是为什么在光学上禁用n作业的原因)。

在光学中“强迫”并行性的最好方法可能是定义一个并行运行的自定义距离度量--参见本文中的一个很好的例子:

https://medium.com/aspectum/acceleration-for-the-nearest-neighbor-search-on-earths-surface-using-python-513fc75984aa

上面的例子之一实际上强制将距离计算放到GPU上,但是仍然使用sklearn来执行算法。

票数 4
EN

Stack Overflow用户

发布于 2020-08-12 23:54:24

光学和HDBSCAN都缺乏并行化。它们在本质上都是连续的,因此不能像DBSCAN那样传递到简单的joblib.Parallel上。

如果您希望提高速度,HDBSCAN的好处之一是能够创建一个推理模型,您可以使用该模型进行预测,而不必再次运行整个集群。这就是我用来避免每次需要对数据进行分类时运行非常慢的集群操作的原因。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59765712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档