【问题标题】:How to cluster a large dataset based on similarity?如何基于相似性对大型数据集进行聚类?
【发布时间】:2021-01-10 20:17:10
【问题描述】:

我想根据相似性将一个庞大的数据集聚类成聚类。我该如何解决这个问题?我已经尝试过 MinBatchK 方法和 DBSCAN,但我没有得到很好的结果。我在使用 MinBatchKMeans 时面临的问题是我必须事先指定集群的数量,而使用 DBSCAN 时,大多数都被归类为噪声。有人可以指导我如何解决这个问题吗?我正在使用 TFIDF 将文本转换为向量

例如:当我使用包含 80000 条记录的数据集时,大约需要 2-3 小时才能形成一个大小为 500 的集群。这使得使用 MinBatchK K 方法很难找到最佳集群数量,因为我必须更改K 值,然后用肘法等方法找出最佳数。有经验的人可以告诉我如何解决这个问题吗?

【问题讨论】:

  • 我是机器学习的新手。这是分配给我的任务。所以我直接从无监督学习开始。

标签: machine-learning cluster-analysis k-means dbscan


【解决方案1】:

正如scikit-learn algorithm cheat-sheet 所指出的那样,在不知道集群数量的情况下对大型数据集进行聚类的问题确实很难解决。但是存在一些依赖于数据集的解决方法,如果您可以提供一些关于您的数据的先验信息。

  1. 您的数据是否相对静止——也就是说,如果您随机选择数据的一个子集,它是否具有与完整数据集大致相同的属性?

  2. 您是否预计会出现较大的集群不平衡,例如您是否预计集群人口规模会有很大的变化?

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

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

无论如何,您都面临在无监督机器学习中经常遇到的问题。请注意,您正在尝试制定探索性策略(这很好),如果您的数据集没有出现确切的解决方案,您将始终通过提取中间级信息从数据中学到一些东西(如上面三个问题的答案)这可以推动您在接下来的步骤中对完整数据进行聚类。

【讨论】:

    【解决方案2】:

    通常处理大型数据集的有效方法之一是初步进行降维,即PCA(主成分分析)。很好的例子可以在这里找到:PCA in ML

    应用 PCA 集群后,方法通常工作得更快。

    【讨论】:

      猜你喜欢
      • 2015-04-18
      • 2020-02-16
      • 2018-01-07
      • 2020-07-12
      • 2021-04-19
      • 2019-06-30
      • 2021-11-28
      • 2021-07-27
      • 2023-03-25
      相关资源
      最近更新 更多