2017-09-17 4 views
0

나는 Wikipedia 기사의 모음집을 가지고 있습니다. 나는 10,000 개의 가장 빈번한 단어를 확인하고 Word2Vec 벡터를 찾고 구형 k- 평균을 벡터에 사용하여 유사성을 기준으로 단어를 500 개의 그룹으로 묶었습니다.단어 클러스터링을위한 PCA 및 K- 평균

단어 클러스터 중 3 개를 골라 단어를 단어 벡터로 다시 변환했습니다. 각 단어 벡터는 300 개의 값으로 구성된 배열이므로 모든 요소에 PCA (sklearn의)를 적용하여 2D로 변환했습니다. 그럼 난 플롯 :

plot of 3 clusters

각 점은 단어를 나타내며, 각 색상은 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() 

답변

1

1) 일반적으로 클러스터링을 수행하기 전에 PCA를 적용해야합니다. 이것이 PCA의 요점입니다. 차원을 줄여 고유 한 측면에서만 클러스터링 할 수 있습니다.

2) 처음 두 고유 벡터를 반드시 분리해야한다는 생각에 동의하는지 모르겠다. 차원에서 단어가 줄어들면 각 클러스터에 중요한 많은 고유 벡터가있다. 몇 개의 고유 벡터를 유지하고 있습니까? 일반적으로 데이터의 변동성의 90 %를 설명하는 수준으로 유지하지만이 문제를 해결해야합니다.