sklearn中的加权聚类

Posted

技术标签:

【中文标题】sklearn中的加权聚类【英文标题】:Weighted clustering in sklearn 【发布时间】:2020-08-10 23:11:45 【问题描述】:

假设我有一组点(x、y 和大小)。我想使用sklearn.cluster.DBSCAN 及其中心在我的数据中查找集群。如果我对每一点都一视同仁,那就没问题了。但实际上我想要加权中心而不是几何中心(这意味着更大的点应该比更小的点计算更多)。

我遇到了sample_weight,但我不太明白这是否是我需要的。当我使用sample_weight(右侧)时,我得到的集群与我不使用它的情况(左侧)完全不同:

其次,我考虑使用np.repeat(x,w),其中 x 是我的数据,w 是每个点的大小,因此我得到了与它们的权重成正比的点的多个副本。但这可能不是一个聪明的解决方案,因为我得到了大量数据,对吧?

sample_weight 在我的情况下有用吗?或者有没有比使用np.repeat 更好的解决方案的建议?我知道已经有一些关于sample_weight 的问题,但我无法准确读出如何使用它。

谢谢!

【问题讨论】:

sklearn.cluster.DBSCAN的方法。我使用它:fit_predict(self, X[, y, sample_weight]) 【参考方案1】:

DBSCAN 最重要的是参数设置。有 2 个参数,epsilonminPts (=min_samples)。 epsilon 参数是您的点周围的半径,如果满足minPtsminPts 会将您的点视为集群的一部分。因此,我建议不要使用np.repeat,而是调整此数据集的参数。

根据DBSCAN 的文档,sample_weight 是您运行时的调优参数:

另一种减少内存和计算时间的方法是删除 (接近)重复点并使用 sample_weight 代替。

我认为您希望在调整运行时之前先解决结果的质量问题。

我不确定你所说的加权中心是什么意思,可能你指的是不同的聚类算法,例如 Gaussian mixture model。

【讨论】:

嗯,它们已经被加权了,对吧。这不就是基于密度的意思吗?如果您共享实际数据和实际代码会更有帮助,除非它是专有的。我会说算法正在做它应该做的事情。

以上是关于sklearn中的加权聚类的主要内容,如果未能解决你的问题,请参考以下文章

python怎么用sklearn包进行聚类

如何使用 sklearn 训练算法对数据点进行加权

使用 sklearn 库中的 KMeans 实现彩色图像聚类分割

如何根据集群之间的距离阈值来决定集群的数量,以便使用 sklearn 进行凝聚聚类?

在 sklearn 中补充朴素贝叶斯和加权类

使用 sklearn 在 3 维上进行 K 均值聚类