Python PCA和K-means在词聚类中的应用

Python PCA和K-means在词聚类中的应用,python,nltk,cluster-analysis,k-means,pca,Python,Nltk,Cluster Analysis,K Means,Pca,我有一个维基百科文章的语料库。我识别了10000个最常见的单词,找到了它们的Word2Vec向量,并在向量上使用球形k均值,根据意义上的相似性将单词分为500组 我挑选了3组单词,并将它们转换回它们的单词向量。每个单词向量是一个包含300个值的数组,因此我对所有单词向量应用了PCA(来自sklearn)将其转换为2D。然后我策划: 每个点代表一个单词,每个颜色代表一个簇。问题是,这些集群不应该重叠。一个集群有计算机相关词,另一个集群有种族相关词,最后一个集群有关系相关词。我用计算机单词将单词“

我有一个维基百科文章的语料库。我识别了10000个最常见的单词,找到了它们的Word2Vec向量,并在向量上使用球形k均值,根据意义上的相似性将单词分为500组

我挑选了3组单词,并将它们转换回它们的单词向量。每个单词向量是一个包含300个值的数组,因此我对所有单词向量应用了PCA(来自sklearn)将其转换为2D。然后我策划:

每个点代表一个单词,每个颜色代表一个簇。问题是,这些集群不应该重叠。一个集群有计算机相关词,另一个集群有种族相关词,最后一个集群有关系相关词。我用计算机单词将单词“chicken”添加到集群中,但当绘制时,它的圆点正好位于“keyboard”的圆点旁边

我不确定这里出了什么问题。我的方法有什么问题吗?这是我的PCA代码:

for words in theList: #theList is an array of my 3 clusters
    lexicalUnitVectors = load_bin_vec("GoogleNews-vectors-negative300.bin", words) #convert words to Word2Vec vectors
    lexicalUnitVectors = list(lexicalUnitVectors.values())
    lexicalUnitVectors = pca.fit(lexicalUnitVectors).transform(lexicalUnitVectors) #apply pca
    print(lexicalUnitVectors) #this shows a bunch of 2D points; all x and y values are close to 0 for some reason
    xs = [i*1 for i in lexicalUnitVectors[:, 0]] #ignore this
    ys = [i*1 for i in lexicalUnitVectors[:, 1]] #ignore this
    plt.scatter(xs, ys, marker = 'o')
    plt.show()
1) 通常我认为在进行聚类之前应该应用PCA。这就是PCA的要点,降低维度,这样您就可以只在独特的方面进行聚类

2) 我不知道我是否同意你的观点,前两个特征向量必须分开——如果你的维度从单词中减少,那么有许多特征向量对每个簇都很重要。你保留了多少特征向量?通常情况下,您只需要解释数据中约90%的可变性,但您应该对此进行处理。

1)通常情况下,我认为您应该在进行聚类之前应用PCA。这就是PCA的要点,降低维度,这样您就可以只在独特的方面进行聚类

2) 我不知道我是否同意你的观点,前两个特征向量必须分开——如果你的维度从单词中减少,那么有许多特征向量对每个簇都很重要。你保留了多少特征向量?通常情况下,您只需要解释数据中约90%的可变性,但您应该认真对待这一点