无监督聚类数目不详集群无监督聚类数目不详集群(Unsupervised clustering wit

2019-05-13 12:21发布

我在3个维的大组矢量。 我需要基于欧几里得距离,使得在任何特定群集中的所有矢量具有比之间的阈值“T”彼此更小的欧几里德距离进行聚类这些。

我不知道集群存在多少。 在端部,有可能是不属于任何簇的一部分,因为它的欧几里德距离不小于“T”与任何所述空间中的矢量的单个矢量现有。

哪些现有的算法/方法应该用在这里?

Answer 1:

您可以使用分层聚类 。 这是一个相当基本的方法,所以有很多可用的实现。 它例如包括在Python的SciPy的 。

例如,见下面的脚本:

import matplotlib.pyplot as plt
import numpy
import scipy.cluster.hierarchy as hcluster

# generate 3 clusters of each around 100 points and one orphan point
N=100
data = numpy.random.randn(3*N,2)
data[:N] += 5
data[-N:] += 10
data[-1:] -= 20

# clustering
thresh = 1.5
clusters = hcluster.fclusterdata(data, thresh, criterion="distance")

# plotting
plt.scatter(*numpy.transpose(data), c=clusters)
plt.axis("equal")
title = "threshold: %f, number of clusters: %d" % (thresh, len(set(clusters)))
plt.title(title)
plt.show()

产生类似下图的结果。

作为参数的阈值是在此基础上作出的判定点/集群是否将被合并到另一个群集的距离值。 所用的距离度量的存在也可以被指定。

请注意,是如何计算的内/集群间的相似性,如最近点之间的距离的各种方法,最远点之间的距离,到集群中心等距离。 其中的一些方法也被scipys支持分层聚类模块( 单/完整/平均...联动 )。 根据您的文章我想你可能需要使用完整的联动 。

注意,这种方法还允许小(单点)集群,如果他们不符合其他集群的相似准则,即距离阈值。


还有其他的算法,将有更好的表现,这将成为中有很多数据点的情况下,相关的。 至于其他的答案/意见建议你可能也想看看在DBSCAN算法:

  • https://en.wikipedia.org/wiki/DBSCAN
  • http://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html
  • http://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html#sklearn.cluster.DBSCAN

关于这些和其他聚类算法很好的概述,也看看这个演示页面(Python的scikit学习库):

  • http://scikit-learn.org/stable/modules/clustering.html

图片来自那个地方复制:

正如你所看到的,每个算法对需要被考虑到集群的数量和形状的一些假设。 由算法或参数指定明确的假设强加它隐含假设。



Answer 2:

建议采用分层聚类通过moooeeeep答案。 我想阐述一下如何选择聚类treshold。

一种方法是计算基于不同的阈值T1,T2,T3,...聚类,然后计算度量的聚类的“质量”。 前提是,与最佳聚类数聚类的质量将有质量度量的最大值。

我已经在过去使用的良好质量度量的一个例子是Calinski-Harabasz。 简单地说:你计算平均簇间距离和内非簇距离他们分开。 最优聚类分配将具有相互最多,集群是“紧密的”分离集群。

顺便说一句,你不必使用分层聚类。 您也可以使用类似k均值,预先计算它对于每个k,然后挑选具有最高Calinski-Harabasz得分k个

让我知道如果你需要更多的参考,我会冲刷我的硬盘上的一些文件。



Answer 3:

退房的DBSCAN算法。 它簇基于矢量的局部密度,即,它们必须不大于分开一段距离ε以上,并且可以自动地确定的簇的数目。 它还认为离群值,与ε-neighbors的非充分数目即点,不会是群集的一部分。 维基百科页面链接到了几个实现。



Answer 4:

Use OPTICS, which works well with large data sets.

OPTICS: Ordering Points To Identify the Clustering Structure Closely related to DBSCAN, finds core sample of high density and expands clusters from them 1. Unlike DBSCAN, keeps cluster hierarchy for a variable neighborhood radius. Better suited for usage on large datasets than the current sklearn implementation of DBSCAN

from sklearn.cluster import OPTICS
db = DBSCAN(eps=3, min_samples=30).fit(X)

Fine tune eps, min_samples as per your requirement.



文章来源: Unsupervised clustering with unknown number of clusters