如何基于相似性对大型数据集进行聚类?

问题描述

我想基于相似性将巨大的数据集聚类为聚类。我该如何解决这个问题?我已经尝试过MinBatchK手段和DBSCAN,但收效不佳。 MinBatchKMeans面临的问题是我必须事先指定簇数,而使用DBSCAN时,大多数簇被归类为噪声。有人可以指导我如何解决这个问题吗?我正在使用TFIDF将文本转换为向量

例如:当我使用80000条记录的数据集时,大约需要2-3个小时才能形成大小为500的簇。这使得用MinBatchK找出最佳簇数非常困难,因为我必须更改取K值,然后用Elbow方法求出最佳数。有经验的人可以让我知道如何解决这个问题吗?

解决方法

scikit-learn algorithm cheat-sheet指出,在不知道聚类数量的情况下将大型数据集聚类的问题确实很难解决。但是,如果可以对数据提供先验知识,则存在一些依赖于数据集的解决方法。

  1. 您的数据相对固定吗?也就是说,如果您随机选择数据的一个子集,它的属性与整个数据集大致相同吗?

  2. 您是否期望较大的群集不平衡,例如您是否期望集群人口规模有很大的变化?

  3. 您对类别的数量有一个粗略的想法或直觉(甚至高估了)吗?

在以下几行中,我用scikit-learn Python库语法来说明我的观点,但是这些语句是通用的,可以适应大多数机器学习库。)根据上述问题的答案,您可以尝试使用model.fit(x_subset)将聚类应用于数据的子集,以减少计算时间,然后使用model.predict(x_full)预测整个数据集类别。如果数据是固定的,则在子集上进行的类推断将有机会在整个数据集上进行。如果群集大小相差很大,则可能需要进行分层群集(例如使用scipy hierarchical tools)。使用DBSCAN或任何其他策略,最后一种工具可能也是估计类别数量的好方法。

无论如何,您都面临着无监督机器学习中经常遇到的问题。请注意,您正在尝试一种探索性策略(这很好),并且如果没有针对数据集的确切解决方案,您将始终通过提取中间层信息来从数据中学到一些东西(例如上述三个问题的答案)这样可以在下一步中将您汇总为完整数据。

,

通常,处理大型数据集的有效方法之一是预先进行降维,即PCA(原理成分分析)。在这里可以找到很好的例子:https://www.twilio.com/docs/verify

添加PCA群集后,方法通常可以更快地工作。