可视化具有多个输入的 KMeans 聚类
Visualizing KMeans Clustering with Many Inputs
我对机器学习完全陌生(并且完全公开:这是针对学校的)并且我正在努力研究 KMeans 聚类及其实现。我了解该算法的要点并已在 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 矩阵。怎么做到这一点?
提前致谢,
因为这是学校的,所以这里不会有代码,只有想法。
CSV 写入和读取也将留给 reader(注意:考虑替代方案 - saving/loading numpy
数组、h5py
库和 json
或 msgpack
作为开始)。
对于人类来说,查看 24 x 2367 矩阵的问题是它太宽了。里面的数字看起来也像乱码。但是,与计算机不同,人们更喜欢图像(计算机不关心)。
您需要将tf-idf值映射到0-255,并制作图像。
24 x 2367 远低于百万像素。但是将其设置为 24 x 2367 有点太长了。将您的行填充到可以制作一个漂亮的矩形或近似正方形(2400 或 2401 应该没问题)的东西,并为每一行生成一个图像。然后您可以查看单独的行,或将它们平铺以获得所有文档的完整 6 x 4 图像(记住中间的一些填充。如果您的像素是灰色的,请选择彩色填充)。
进一步的想法:
- 颜色图
- PCA
- t-SNE
有几件事我会建议(虽然我不确定 SO 是否适合这个问题):
一个。由于您提到您正在对非结构化文本文档进行聚类并且没有获得良好的结果,因此您可能需要在生成 TF-IDF 矩阵之前应用典型的文本挖掘预处理任务,如停用词、标点符号删除、大小写降低、词干提取.还有其他文本预处理任务,如删除数字、模式等,需要根据具体情况进行评估。
b。就二维可视化而言,您需要将特征向量的维数减少到 2。维数可能会在预处理后从 2367 减少,但不会减少很多。然后,您可以在 TF-IDF 矩阵上使用 SVD 并检查它可以解释的方差量。但是,减少到 2 个组件可能会导致大量数据丢失,并且可视化将没有那么有意义。但是你可以试一试,看看结果是否有意义。
c。如果文档中的文本内容很小,您可以尝试手工制作描述文档的标签。每个文档的这些标签不应超过 20 个。使用这个新标签,您可以创建一个 TF-IDF 矩阵并执行 SVD,这可能会在 2D 可视化中提供更多可解释的结果。
d。为了评估生成的簇,也可以考虑Silhouette measure。
我对机器学习完全陌生(并且完全公开:这是针对学校的)并且我正在努力研究 KMeans 聚类及其实现。我了解该算法的要点并已在 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 矩阵。怎么做到这一点?
提前致谢,
因为这是学校的,所以这里不会有代码,只有想法。
CSV 写入和读取也将留给 reader(注意:考虑替代方案 - saving/loading numpy
数组、h5py
库和 json
或 msgpack
作为开始)。
对于人类来说,查看 24 x 2367 矩阵的问题是它太宽了。里面的数字看起来也像乱码。但是,与计算机不同,人们更喜欢图像(计算机不关心)。
您需要将tf-idf值映射到0-255,并制作图像。 24 x 2367 远低于百万像素。但是将其设置为 24 x 2367 有点太长了。将您的行填充到可以制作一个漂亮的矩形或近似正方形(2400 或 2401 应该没问题)的东西,并为每一行生成一个图像。然后您可以查看单独的行,或将它们平铺以获得所有文档的完整 6 x 4 图像(记住中间的一些填充。如果您的像素是灰色的,请选择彩色填充)。
进一步的想法:
- 颜色图
- PCA
- t-SNE
有几件事我会建议(虽然我不确定 SO 是否适合这个问题):
一个。由于您提到您正在对非结构化文本文档进行聚类并且没有获得良好的结果,因此您可能需要在生成 TF-IDF 矩阵之前应用典型的文本挖掘预处理任务,如停用词、标点符号删除、大小写降低、词干提取.还有其他文本预处理任务,如删除数字、模式等,需要根据具体情况进行评估。
b。就二维可视化而言,您需要将特征向量的维数减少到 2。维数可能会在预处理后从 2367 减少,但不会减少很多。然后,您可以在 TF-IDF 矩阵上使用 SVD 并检查它可以解释的方差量。但是,减少到 2 个组件可能会导致大量数据丢失,并且可视化将没有那么有意义。但是你可以试一试,看看结果是否有意义。
c。如果文档中的文本内容很小,您可以尝试手工制作描述文档的标签。每个文档的这些标签不应超过 20 个。使用这个新标签,您可以创建一个 TF-IDF 矩阵并执行 SVD,这可能会在 2D 可视化中提供更多可解释的结果。
d。为了评估生成的簇,也可以考虑Silhouette measure。