sklearn中的加权聚类

3
假设我有一组点(x,y和大小),我想使用sklearn.cluster.DBSCAN找到我的数据中的聚类及其中心。如果我将每个点视为相同,则没有问题。但实际上,我想要加权中心而不是几何中心(这意味着较大的点应计算比较小的点更多)。我遇到了sample_weight,但我不确定是否需要它。当我使用sample_weight(右侧)时,我得到完全不同的聚类结果,而在不使用它的情况下(左侧),我则得到不同的结果:

enter image description here

第二种方法是使用np.repeat(x,w),其中x是我的数据,w是每个点的大小,因此我可以获得与它们的权重成比例的多个点的副本。但是这可能不是一个明智的解决方案,因为我会得到很多数据,对吧?
在我的情况下,sample_weight有用吗?还是有比使用np.repeat更好的解决方案建议?我知道已经有一些关于sample_weight的问题,但我无法确切地了解如何使用它。
谢谢!

这是sklearn.cluster.DBSCAN的一个方法。我使用它的方式是:fit_predict(self, X[, y, sample_weight]) - Mo Re
1个回答

1
DBSCAN最重要的是参数设置。有2个参数,epsilon和minPts(= min_samples)。epsilon参数是您的点周围的半径,minPts在满足minPts时将您的点视为群集的一部分。因此,建议调整此数据集的参数,而不是使用np.repeat。
根据DBSCAN的文档,sample_weight是运行时的调整参数:
“减少内存和计算时间的另一种方法是删除(近似)重复的点并改用sample_weight。”
我认为您想先解决结果的质量,然后再调整运行时。
我不确定您所说的加权中心是什么意思,可能您正在参考其他聚类算法,例如高斯混合模型。

好的,它们已经有权重了,对吧。这不就是密度聚类的意思吗?如果您分享实际数据和实际代码(除非它是专有的),那将会更有帮助。我认为算法正在按照它应该做的事情去做。 - ASH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接