首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何控制一种方法的核数

如何控制一种方法的核数
EN

Stack Overflow用户
提问于 2022-10-06 16:15:39
回答 1查看 40关注 0票数 0

我有以下代码:

代码语言:javascript
复制
from sklearn_extra.clusters import KMedoids

def _compute_medoids(df, k):
    k_medoids = KMedoids(n_clusters=k, metric='precomputed', init='k-medoids++').fit(df)
    medoid_index=k_medoids.medoid_indices_
    labels=k_medoids.labels_
    return medoid_index, labels


for k in range(1, 6):
    medoid_ids, labels = _compute_medoids(df, n_clusters=k)

以这种方式执行代码,我的性能会很差。与sklearn的模型不同,sklearn_extra.cluster.KMedoids没有一个n_jobs参数,并且检查核心使用情况,大多数情况下,流程只使用一个核心。

我试着用joblib

代码语言:javascript
复制
Parallel(n_jobs=os.cpu_count())(delayed(_compute_medoids)(df, k) for k in range(1, 6))

我的成绩有所提高,但还不足以完成我的任务。而且,将核心数量从4增加到8或16并不会带来相应的性能改进。

据我所知,像joblibmultiprocessing这样的多处理库可以并行控制工作人员的数量,但不能控制处理函数的核心用法。我说的对吗?

我想知道是否有一种方法可以强制在固定数量的核心上执行_compute_medoids,这样我就可以处理尽可能多的工作人员(例如,使用16个核心来设置4个工作人员来执行4个compute_medoids方法,每个工作人员使用4个核)。有可能吗?

EN

回答 1

Stack Overflow用户

发布于 2022-11-16 21:59:09

kmedoids包具有更快的算法,包括并行版本的FasterPAM。

https://python-kmedoids.readthedocs.io/en/latest/#kmedoids.fasterpam

代码语言:javascript
复制
def _compute_medoids(df, k):
  import kmedoids
  km = kmedoids.fasterpam(df, k)
  return km.medoids, km.labels
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73977052

复制
相关文章

相似问题

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