【问题标题】:Visualizing KMeans Clustering with Many Inputs可视化具有许多输入的 KMeans 聚类
【发布时间】:2019-03-19 10:13:50
【问题描述】:

我对机器学习完全陌生(并且完全披露:这是针对学校的),并且正在尝试围绕 KMeans Clustering 及其实现。我了解该算法的要点并已在 Java 中实现它,但对于如何在复杂数据集上使用它有点困惑。

例如,我有 3 个文件夹,A、B 和 C,每个文件夹包含 8 个文本文件(总共 24 个文本文件)。我想通过让算法根据单词使用情况将这 24 个文档聚类成 3 个聚类来验证我是否正确实现了 KMeans。

为此,我创建了一个词频矩阵并对其执行tfidf 以创建一个 24 x 2367 的稀疏矩阵(总共 24 个文档和 2367 个单词/-gram)。然后,我想在我的 tfidf 矩阵上运行我的 KMeans 聚类算法并且没有得到好的结果。

为了尝试调试,我试图将我的 tfidf 矩阵和作为输出的质心可视化,但我不太明白如何可视化这个 24 x 2367 矩阵?我还将此矩阵保存到 .csv 文件中,并希望在其上运行 python 库 - 但我所看到的一切都是 n x 2 矩阵。怎么做呢?

提前致谢,

【问题讨论】:

    标签: python data-visualization k-means


    【解决方案1】:

    我会建议一些事情(尽管我不确定 SO 是否适合这个问题):

    一个。由于您提到您正在对非结构化文本文档进行聚类并且没有得到好的结果,您可能需要在生成 TF-IDF 矩阵之前应用典型的文本挖掘预处理任务,如停用词、标点符号删除、降低大小写、词干提取.还有其他文本预处理任务,例如删除数字、模式等,需要根据具体情况进行评估。

    b.就二维中的可视化而言,您需要将特征向量的维度减少到 2。在预处理后维度可能会从 2367 减少,但不会减少很多。然后,您可以在 TF-IDF 矩阵上使用 SVD 并检查它可以解释的方差量。但是,减少到 2 个组件可能会导致大量数据丢失,并且可视化不会那么有意义。但是你可以试一试,看看结果是否有意义。

    c。如果文档中的文本内容很小,您可以尝试手工制作描述文档的标签。这些标签的数量不应超过每个文档 20 个。使用这个新标签,您可以创建 TF-IDF 矩阵并执行 SVD,这可能会在 2D 可视化中提供更多可解释的结果。

    d。为了评估生成的集群,也可以考虑Silhouette measure

    【讨论】:

      【解决方案2】:

      因为这是给学校的,这里不会有代码,只有想法。

      CSV 写入和读取也将留给读者(请注意:考虑替代方案 - 保存/加载 numpy 数组、h5py 库和 jsonmsgpack 开始)。

      对于查看 24 x 2367 矩阵的人来说,问题是它太宽了。其中的数字也看起来像胡言乱语。但是,与计算机不同,人们更喜欢图像(计算机不在乎)。

      您需要将 tf-idf 值映射到 0-255,并制作图像。 24 x 2367 远低于百万像素。但是将其设为 24 x 2367 有点太长了。将你的行填充到可以形成一个漂亮的矩形或近似正方形的东西(2400 或 2401 应该没问题),并为每一行生成一个图像。然后,您可以查看各个行,或平铺它们以获得所有文档的完整 6 x 4 图像(请记住中间有一些填充。如果您的像素是灰色的,请选择彩色填充)。

      进一步的想法:

      • 色彩图
      • 主成分分析
      • t-SNE

      【讨论】:

        猜你喜欢
        • 2019-09-10
        • 2018-04-01
        • 2012-05-01
        • 2013-08-17
        • 1970-01-01
        • 2018-11-26
        • 2019-11-19
        • 2016-02-03
        相关资源
        最近更新 更多