我想使用Affinity Propagation对word2vec群集进行聚类,并获取群集中心词。
我目前的代码如下。
model = word2vec.Word2Vec.load("word2vec")
word_vectors = model.wv.syn0
affprop = AffinityPropagation(affinity="precomputed", damping=0.5)
af= affprop.fit(word_vectors)
但是,这会引发以下错误:
ValueError: S must be a square array (shape=(77, 300))
据我所知,300表示word2vec隐藏层维度,77表示我的词汇量。
我只是想知道如何对不是方阵的word2vec向量使用Affinity Propagation。
请帮助我!
答案 0 :(得分:4)
这是因为你说已经计算了样本之间的亲和力,它总是一个方阵。因此,您可以使用已实现的欧几里德距离,或者如果您想使用其他指标进行预计算,请参阅下面的示例代码:
# 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)