在训练集和测试集上测量 k-means 聚类质量

机器算法验证 聚类 k-均值 质量控制
2022-04-14 12:29:27

我正在 Mahout 中实现k-means代码大部分已经完成,我们正在讨论如何集成代码。

作为质量评估的一部分,我想知道聚类在20 个新闻组数据集上的表现。

最初,我下载了它,将所有电子邮件转换为向量,运行聚类并得到一些测量结果我收集了:

  • 簇中每个点到其中心的距离为:四分位数、均值、标准差;
  • 每个集群中的点数;
  • 集群 ID;
  • 正在测试的算法类型;
  • 实验运行(我多次运行每个算法以获得平均值,以便 JVM 有时间预热并 JIT 编译它可以编译的任何东西)。

算法本身就在这里

我对 20 个新闻组集中的所有数据都这样做了。但是,考虑到同一数据集的不同版本中可用的训练和测试集拆分,我被要求重新运行实验。

这就是我的问题所在:

我知道我需要在训练集上获取集群。但是拿到集群后,我该如何使用测试集呢?

我可以将每个点分配给最接近它的集群,但实际上,我得到的 20 个集群与 20 个原始新闻组的反映非常差。

使用 TF-IDF 编码和随机投影到 100 个维度(从 90K+ 原始维度),原始类在新集群中混合在一起。但是,我得到的集群比实际新闻组集群产生的集群更紧凑。

所以,基本上:

  1. 我认为测试集中的类根本没有用(这不是分类问题)。
  2. 但是没有类,训练集和测试集的分离还有什么意义呢?
  3. 我可以将点分配给集群,但无需重新调整中心,我将测量什么?
  4. 如果我确实重新调整了中心,为什么还要费心训练和测试集呢?

编辑(更多上下文):我正在努力实现一种更快的聚类算法,该算法的行为类似于 MapReduce 之上的 k-means。它使用流式 k-means获取数据草图,然后收集草图并应用球 k-means。

我被要求使用 20 个新闻组数据集,我想比较使用新算法和现有方法获得的集群的质量。

@Anony-Mousse 提到这可能不是最佳选择(我认为这是真的)。但是鉴于这个数据集,我需要比较它的样本外特征和样本内特征——但我不知道它们应该是什么!。

简而言之,我什至将测试集用于什么?

1个回答

问题是,尤其是将 k-means 应用于现实世界,标记数据的问题是集群通常不会与您的标签非常一致,除非您使用类似的聚类算法(自我实现的预言)生成标签,或者数据集真的很简单。

您是否尝试过在原始数据集上计算 k-means-statistics,例如平方和等?如果它们比运行 k-means 后明显更糟,我一点也不感到惊讶。

我认为这只是算法不适合您的问题的另一种情况。

评估聚类算法真的很难。因为你实际上想找到一些你还不知道的东西。即使聚类会复制原始标签,它实际上也会失败,因为它没有告诉你新的东西,然后你可以直接使用标签。

也许对聚类算法最现实的评价是:如果将聚类算法的结果结合到分类算法中,是否会显着提高分类精度?即,将聚类视为您可以合理评估的算法的预处理/支持功能。