我对机器学习是完全陌生的(并且完全公开:这是针对学校的),并且正在尝试围绕KMeans Clustering及其实现进行研究。我了解该算法的要点,并已在Java中实现了该算法,但是对于如何在复杂的数据集上使用它感到有些困惑。
例如,我有3个文件夹,A,B和C,每个文件夹包含8个文本文件(因此总共有24个文本文件)。我想通过将算法将这24个文档根据词的使用情况分为3个类来验证我是否正确实施了KMeans。
为此,我创建了一个词频矩阵,并对其执行了tfidf以创建一个稀疏矩阵,该矩阵为24 x 2367(24个文档和总共2367个词/克)。然后,我想在我的tfidf矩阵上运行我的KMeans聚类算法,但收效不佳。
为了进行调试,我想对tfidf矩阵和质心作输出,但我不太了解如何可视化此24 x 2367矩阵?我还将该矩阵保存到了.csv文件中,并希望在其上运行python库-但我所看到的都是n x 2矩阵。怎么会这样呢?
预先感谢
答案 0 :(得分:2)
我有几点建议(尽管我不确定SO是否适合该问题):
a。由于您提到要对非结构化文本文档进行聚类并且无法获得良好的结果,因此在生成TF-IDF矩阵之前,您可能需要应用典型的文本挖掘预处理任务,例如停用词,标点符号删除,小写,词干。还有其他文本预处理任务,例如删除数字,模式等,需要根据具体情况进行评估。
b。就2D中的可视化而言,您需要将特征向量的维数减小为2。在预处理后,维数可能从2367减小,但不是很多。然后,您可以在TF-IDF矩阵上使用SVD并检查其可以解释的方差量。但是,减少到2个组件可能会导致大量数据丢失,并且可视化效果不会那么有意义。但是您可以尝试一下,看看结果是否有意义。
c。如果文档中的文本内容较小,则可以尝试制作描述文档的手工标记。每个文件的标签数量不得超过20个。使用这个新标签,您可以创建TF-IDF矩阵并执行SVD,这可能会在2D可视化中提供更多可解释的结果。
d。为了评估生成的群集,还可以考虑使用Silhouette measure。答案 1 :(得分:1)
因为这是上学的地方,所以这里没有代码,只有想法。
CSV的读写也将留给读者(只是一个注意:考虑其他选择-保存/加载numpy
数组,h5py
库和json
或{{1 }}作为开始。
对于人类来说,查看24 x 2367矩阵的问题是它太宽。其中的数字看起来也像胡言乱语。但是人们与计算机不同,他们更喜欢图像(计算机不在乎)。
您需要将tf-idf值映射到0-255,并制作图像。 24 x 2367远远低于百万像素。但是将其设置为24 x 2367太长了。将行填充到可以形成漂亮的矩形或近似正方形(应该是2400或2401)的位置,然后为每行生成一个图像。然后,您可以查看各个行,或对其进行平铺以获取所有文档的完整6 x 4图像(请记住中间的一些填充。如果像素为灰色,请选择彩色填充)。
更多想法: