许多聚类算法可用于大数据,例如。KMeans 版本、基于 Hadoop 的 DBSCAN 等。但是,使用 k 意味着我们将获得 k 个集群的 k 个质心,我们可以将它们映射到空间并以某种方式理解结果。但是像 DBSCAN 这样的基于密度的算法呢?在 DBSCAN 中,如果是大数据,我们将获得 m 个包含数百万和数十亿数据点的集群。
我们如何尝试理解这种聚类的结果?
如果我们不了解每个集群,则对更多数据进行集群是昂贵且毫无意义的。
许多聚类算法可用于大数据,例如。KMeans 版本、基于 Hadoop 的 DBSCAN 等。但是,使用 k 意味着我们将获得 k 个集群的 k 个质心,我们可以将它们映射到空间并以某种方式理解结果。但是像 DBSCAN 这样的基于密度的算法呢?在 DBSCAN 中,如果是大数据,我们将获得 m 个包含数百万和数十亿数据点的集群。
我们如何尝试理解这种聚类的结果?
如果我们不了解每个集群,则对更多数据进行集群是昂贵且毫无意义的。
据我所知,它没有被使用。每个人都使用分类,没有人使用聚类。因为聚类问题要困难得多,并且需要对结果进行手动分析。
K-means:通常的 Lloyd 算法是幼稚的并行算法,因此在 Hadoop 上实现起来很简单。但同时,在大数据上使用 k-means 也没有任何意义。原因很简单:没有密集向量大数据。K-means 适用于多达 10 个维度。使用双精度,我需要每条记录 80 个字节。一台具有 1 GB RAM 的普通计算机已经可以将大约 1300 万个向量装入主存储器。我有 128 GB RAM 的机器...
因此,您将很难找到一个真实的数据集,其中:
最后一点很重要:k-means 计算均值。当您添加更多数据时,平均值的质量不会无限提高。您只会得到边际变化(如果结果稳定,即 k-means 有效)。最有可能的是,您的分布式计算在途中已经失去了比最终获得的更多的精度......
现在对于 DBSCAN:我不知道流行的分布式实现。时不时地提出一个新的并行 DBSCAN,通常使用网格,但我从未见过在实践中使用或公开可用的。同样,使用 DBSCAN有意义的有趣数据的可用性存在问题。
minPts
和epsilon
参数?如果你弄错了,你将不会有任何集群;否则一切都将是一个大的 custer。许多平台/公司喜欢假装他们可以在他们的集群上合理地运行 k-means。但事实是,这种方式没有意义,它只是制作和技术演示。这就是为什么他们通常使用随机数据来炫耀,或者可怕的损坏的 KDDCup1999 数据集(我仍然可以在单台计算机上比在任何 Hadoop 集群上更快地集群!)。
我们不需要了解每个应用程序中的集群是不正确的。实际上,如果您几乎没有建立良好的集群,那么您可能很快就会进行一些监督学习而不是聚类:进行选择的聚类,检查结果,为集群成员分配标签,使用基于分配标签的监督方法进行训练。
我可以给你一个简单的例子,其中集群的数量可能很大并且仍然有用:对相似的新闻故事或推文进行分组。例如,在一个网站中,我们希望提供从新闻故事到其他类似故事的链接。这需要找到相似的新闻,即每个新闻故事所属的集群,而不必为每个集群分配“标签”。