我有维基百科的文章。我确定了10,000个最常用的单词,找到了他们的Word2Vec向量,并在向量上使用了球形k-means,根据意义上的相似性将单词聚类成500组。
我挑出了3个单词集,并将单词转换回单词向量。每个单词向量是一个包含300个值的数组,因此我在所有单词上应用了PCA(来自sklearn)以将它们转换为2D。然后我画了:
每个点代表一个单词,每个颜色代表1个集群。问题是,这些集群不应该重叠。一个群集具有与计算机相关的词,另一个群集具有与种族相关的词,并且最后一个群集具有与关系相关的词。我用计算机单词在集群中添加了“chicken”这个词,但是当绘制时,它的点就在“键盘”的点旁边。
我不确定这里出了什么问题。我的方法有什么问题吗?这是我的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()
答案 0 :(得分:2)
1)通常我认为您应该在进行群集之前应用PCA。这是PCA的重点,可以减少维数,因此您只能集中于独特的方面。
2)我不知道我是否同意你的观点,即前两个特征向量必然需要分开 - 如果你的维度从单词中减少,则有许多特征向量对每个集群都很重要。你保留了多少个特征向量?通常情况下,您只能保留解释数据中约90%的可变性,但您应该对此进行解释。