2017-08-02 42 views
1

私はdoc2vecを初めて使いました。 私はこの問題について多くの人に尋ねましたが、その解決策は誰にも分かりません。Gensim Doc2vecモデルがK平均にクラスタリングする

私がやりたいことは、Doc2vecの結果をk-meansに集約することです。コードの下をご覧ください。

mbk = MiniBatchKMeans(n_clusters=3, init_size=400, batch_size=300, verbose=1).fit(model_dm.docvecs[range([2000])                         
MiniBatchKMeans.predict(mbk,mbk.labels_) 

このエラーが発生しています。あなたはあなたのコードのこの部分上の単一の文書ベクトル(2001thベクトルは正確に)クラスタ化しようとしている

TypeErrorTraceback (most recent call last) 
<ipython-input-19-fbc57a13bf4b> in <module>() 
     6 
     7 
----> 8 mbk = MiniBatchKMeans(n_clusters=3, init_size=400, batch_size=300, verbose=1).fit(model_dm.docvecs[:2000]) 
     9 
    10 #model_dm.docvecs.doctag_syn0[2000] 

/usr/local/lib64/python2.7/site-packages/gensim/models/doc2vec.pyc in __getitem__(self, index) 
    351    return self.doctag_syn0[self._int_index(index)] 
    352 
--> 353   return vstack([self[i] for i in index]) 
    354 
    355  def __len__(self): 

TypeError: 'slice' object is not iterable 

答えて

0

.fit(model_dm.docvecs[2000]) 

を私はあなたが最初の2000個のベクトルをしたいと仮定?

編集:gensimのドキュメントを見た後

は、文書ベクトルのスライスを取得する方法を見ることができませんでした。しかし、source code DocvecsArrayを見ると、単一のキー(intまたはstr)またはキーのリストを受け入れます。それを使用すると、使用して最初の2000個のベクトルを取得することができます:

.fit(model_dm.docvecs[range(2000)]) 

それは私が後で別の方法を見つけることができれば私は私の答えを修正します満たすには見えません。

最初の 2000ベクトルではありません。gensimはdocvecsをキーとして格納するように思われます:値のペアと辞書は順序付けされていません。

第二編集:

コードの一部はまた、あなたがMiniBatchKMeansクラスのpredict関数を呼び出している固定する必要がK-意味します。そして、クラスインスタンス(mbk)を引数として与えます。他に何かを予測する必要がある場合は、クラスインスタンス(この場合はmbk)predict関数を呼び出す必要があります。あなたはそうしないと思います。

以下のコードを使用して、割り当てられたラベルを取得することができます。

mbk = MiniBatchKMeans(n_clusters=3, init_size=400, batch_size=300, verbose=1).fit(model_dm.docvecs[range(2000]) 
mbk.labels_ 
+0

こんにちはウムウト、ありがとうございます。私は試しましたが、新しいエラーが発生しています。下記を参照してください。 –

+0

@ El-moroええ、申し訳ありませんが、私は文書をチェックしました。私の答えを編集します。 – umutto

+0

私はこの問題で数日間苦労しています。誰かが解決策を知っているように見えます。 –

関連する問題