如何在使用共现矩阵时可视化 Kmeans 簇?

问题描述 投票:0回答:1

我正在尝试使用 Kmeans 对单词进行聚类。我有一个大文档,我首先使用 NLTK RegexpTokenizer,然后根据字数、长度进行过滤并删除停用词。接下来,我构建一个共现矩阵并用它来训练 Kmeans 模型。最后,我使用轮廓分数测试其性能。

我想可视化这些集群。这通常似乎是使用散点图和标签来完成的。当这个共现矩阵当前是 N x N 矩阵(N 是唯一单词的数量)时,如何将其减少为 x 和 y?我尝试过使用PCA:

plt.figure()
pca_2d = PCA(n_components=2)
reduced = pca_2d.fit_transform(mat)
newKm = KMeans(n_clusters=3)
labels = newKm.fit_predict(reduced)
plt.scatter(reduced[:, 0], reduced[:, 1], c=labels) # selects column 0 (all rows) as x coords and column 1 (all rows) as y. and then cluster labels.
plt.title("K-means Clustering")
plt.show()

但不确定这是否是最好或正确的方法?

python machine-learning k-means unsupervised-learning
1个回答
0
投票

使用共现矩阵作为单词表示 + PCA 来降低 K 均值的维数是一个很好的方法。

您可以考虑的一些改进可以是

  • 使用单词嵌入而不是共现矩阵(来自在文档上训练或微调的 Word2Vec 等模型),因为这可以为您提供更丰富的单词表示
  • 使用 elbow 方法 找到 k 均值中的最佳簇数,或者(通常最好)轮廓聚类
  • 对于降维,PCA 很有效,但众所周知可以保留全局结构。另一种选择是保留局部结构的 t-SNE。这在this答案中得到了很好的解释。或者U-map,它可以帮助平衡局部和全局结构。
© www.soinside.com 2019 - 2024. All rights reserved.