我正在 Mahout 中实现流式k-means。代码大部分已经完成,我们正在讨论如何集成代码。
作为质量评估的一部分,我想知道聚类在20 个新闻组数据集上的表现。
最初,我下载了它,将所有电子邮件转换为向量,运行聚类并得到一些测量结果。我收集了:
- 簇中每个点到其中心的距离为:四分位数、均值、标准差;
- 每个集群中的点数;
- 集群 ID;
- 正在测试的算法类型;
- 实验运行(我多次运行每个算法以获得平均值,以便 JVM 有时间预热并 JIT 编译它可以编译的任何东西)。
算法本身就在这里。
我对 20 个新闻组集中的所有数据都这样做了。但是,考虑到同一数据集的不同版本中可用的训练和测试集拆分,我被要求重新运行实验。
这就是我的问题所在:
我知道我需要在训练集上获取集群。但是拿到集群后,我该如何使用测试集呢?
我可以将每个点分配给最接近它的集群,但实际上,我得到的 20 个集群与 20 个原始新闻组的反映非常差。
使用 TF-IDF 编码和随机投影到 100 个维度(从 90K+ 原始维度),原始类在新集群中混合在一起。但是,我得到的集群比实际新闻组集群产生的集群更紧凑。
所以,基本上:
- 我认为测试集中的类根本没有用(这不是分类问题)。
- 但是没有类,训练集和测试集的分离还有什么意义呢?
- 我可以将点分配给集群,但无需重新调整中心,我将测量什么?
- 如果我确实重新调整了中心,为什么还要费心训练和测试集呢?
编辑(更多上下文):我正在努力实现一种更快的聚类算法,该算法的行为类似于 MapReduce 之上的 k-means。它使用流式 k-means获取数据草图,然后收集草图并应用球 k-means。
我被要求使用 20 个新闻组数据集,我想比较使用新算法和现有方法获得的集群的质量。
@Anony-Mousse 提到这可能不是最佳选择(我认为这是真的)。但是鉴于这个数据集,我需要比较它的样本外特征和样本内特征——但我不知道它们应该是什么!。
简而言之,我什至将测试集用于什么?