代码之家  ›  专栏  ›  技术社区  ›  user8400385

Gensim Doc2vec模型聚类到K均值

  •  1
  • user8400385  · 技术社区  · 7 年前

    我是doc2vec的新手,我希望你们中的一些人可以帮助我解决这个问题。

    我想做的是将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_ )
    

    我遇到了这个错误。

    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
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   umutto    7 年前

    您正试图在代码的这一部分上聚类单个文档向量(准确地说是第2001个向量):

    .fit(model_dm.docvecs[2000]) 
    

    我想你想要前2000个向量?

    编辑:

    source code

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

    这看起来并不令人满意,所以如果我以后能找到其他方法,我会修正我的答案。

    还要记住这些是 2000个向量,因为gensim似乎将docvec存储为键:值对和字典没有排序。

    K-表示部分代码也需要修复,您正在调用 MiniBatchKMeans 类别' predict 预测 如果您需要预测任何其他内容,请使用函数。我想你不会的。

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