나는 Wikipedia 기사의 모음집을 가지고 있습니다. 나는 10,000 개의 가장 빈번한 단어를 확인하고 Word2Vec 벡터를 찾고 구형 k- 평균을 벡터에 사용하여 유사성을 기준으로 단어를 500 개의 그룹으로 묶었습니다.단어 클러스터링을위한 PCA 및 K- 평균
단어 클러스터 중 3 개를 골라 단어를 단어 벡터로 다시 변환했습니다. 각 단어 벡터는 300 개의 값으로 구성된 배열이므로 모든 요소에 PCA (sklearn의)를 적용하여 2D로 변환했습니다. 그럼 난 플롯 :
각 점은 단어를 나타내며, 각 색상은 1 개 클러스터를 나타냅니다. 문제는 이러한 클러스터가 중복되어서는 안된다는 것입니다. 하나의 클러스터에는 컴퓨터 관련 단어가 있고 다른 클러스터에는 인종 관련 단어가 있으며 마지막 클러스터에는 관계 관련 단어가 있습니다. 컴퓨터 단어로 "치킨"이라는 단어를 클러스터에 추가했지만 음모를 꾸미면 "키보드"의 점 옆에 점이 나타납니다.
여기에 무슨 문제가 있는지 잘 모르겠습니다. 내 접근 방식에 문제가 있습니까? 내 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()