2017-11-07 17 views
1

Affinity Propagationを使用してword2vecクラスタをクラスタ化し、クラスタの中心語を取得します。PythonでAffinity Propagationを使用してword2vecをクラスタリングする(sklearn)

私の現在のコードは以下の通りです。私は300の隠れた層寸法および77は、私の語彙のサイズであるword2vec意味を理解したよう ValueError: S must be a square array (shape=(77, 300))

model = word2vec.Word2Vec.load("word2vec") 
word_vectors = model.wv.syn0 
affprop = AffinityPropagation(affinity="precomputed", damping=0.5) 
af= affprop.fit(word_vectors) 

しかし、これは、次のエラーを発生させます。

正方形配列ではないword2vecベクトルに対してAffinity Propagationを使用する方法は不思議です。

私を助けてください!

答えて

1

これは、サンプル間の親和性が既に計算されていると述べたからです。これは常に正方行列です。だから、実装されているユークリッド距離を使用するか、またはあなたがそれを事前に計算する必要が異なるメトリックを使用したい場合は、以下の例のコードを参照してください。偉大な答えを

# some dummy data 
word_vectors = np.random.random((77, 300)) 

# using eucliden distance 
affprop = AffinityPropagation(affinity='euclidean', damping=0.5) 
af = affprop.fit(word_vectors) 

# using cosine 
from sklearn.metrics.pairwise import cosine_distances 
word_cosine = cosine_distances(word_vectors) 
affprop = AffinityPropagation(affinity='precomputed', damping=0.5) 
af = affprop.fit(word_cosine) 
+0

どうもありがとう:)を直接私たちすることができますあなたが述べたようにコサイン距離を計算するか、次のようなメソッドを使う必要があります: 'index = gensim.similarities.MatrixSimilarity(gensim.matutils.Dense2Corpus(word_vectors)) インデックスのシムの場合: similarity_matrix.append(sims) similarity_array = np.array(similarity_matrix) ' –

+1

任意の方法で距離を計算できます。私はシンプルさのためにscikitを使う傾向があります。 – ncfirth

+0

親和性伝播に入力する行列が本質的に距離行列である必要があるかどうか教えてください。代わりに類似性行列を入力できますか? :) –

関連する問題