【问题标题】:Agglomerative Clustering to cluster doc2vec聚合聚类以聚类 doc2vec
【发布时间】:2018-01-18 11:34:51
【问题描述】:

我是 Agglomerative Clustering 和 doc2vec 的新手,所以我希望有人可以帮助我解决以下问题。

这是我的代码:

model = AgglomerativeClustering(linkage='average',
        connectivity=None, n_clusters=2)
X = model_dm.docvecs.doctag_syn0
model.fit(X, y=None)
model.fit_predict(X, y=None)

我想要的是预测每次观察距离的平均值。我收到以下错误:

MemoryErrorTraceback (most recent call last)
<ipython-input-22-d8b93bc6abe1> in <module>()
      2 model = AgglomerativeClustering(linkage='average',connectivity=None,n_clusters=2)
      3 X = model_dm.docvecs.doctag_syn0
----> 4 model.fit(X, y=None)
      5 

/usr/local/lib64/python2.7/site-packages/sklearn/cluster/hierarchical.pyc in fit(self, X, y)
    763 n_components=self.n_components,
    764                                        n_clusters=n_clusters,
--> 765                                        **kwargs)
    766         # Cut the tree
    767         if compute_full_tree:

/usr/local/lib64/python2.7/site-packages/sklearn/externals/joblib/memory.pyc in __call__(self, *args, **kwargs)
    281 
    282     def __call__(self, *args, **kwargs):
--> 283         return self.func(*args, **kwargs)
    284 
    285     def call_and_shelve(self, *args, **kwargs):

/usr/local/lib64/python2.7/site-packages/sklearn/cluster/hierarchical.pyc in _average_linkage(*args, **kwargs)
    547 def _average_linkage(*args, **kwargs):
    548     kwargs['linkage'] = 'average'
--> 549     return linkage_tree(*args, **kwargs)
    550 
    551 

/usr/local/lib64/python2.7/site-packages/sklearn/cluster/hierarchical.pyc in linkage_tree(X, connectivity, n_components, n_clusters, linkage, affinity, return_distance)
    428             i, j = np.triu_indices(X.shape[0], k=1)
    429             X = X[i, j]
--> 430         out = hierarchy.linkage(X, method=linkage, metric=affinity)
    431         children_ = out[:, :2].astype(np.int)
    432 

/usr/local/lib64/python2.7/site-packages/scipy/cluster/hierarchy.pyc in linkage(y, method, metric)
    669                          'matrix looks suspiciously like an uncondensed '
    670                          'distance matrix')
--> 671         y = distance.pdist(y, metric)
    672     else:
    673         raise ValueError("`y` must be 1 or 2 dimensional.")

/usr/local/lib64/python2.7/site-packages/scipy/spatial/distance.pyc in pdist(X, metric, p, w, V, VI)
   1375 
   1376     m, n = s
-> 1377     dm = np.zeros((m * (m - 1)) // 2, dtype=np.double)
   1378 
   1379     # validate input for multi-args metrics

MemoryError: 

【问题讨论】:

    标签: python scikit-learn hierarchical-clustering doc2vec


    【解决方案1】:

    您将收到MemoryError。这是一个可靠的指标,表明您内存不足,在指示的行上。

    该行表示尝试分配(m * (m - 1)) // 2 类型为double(8 个字节)的值的np.zeros() 数组。查看scipy 源,m,这里是X 中的向量数量,也就是model_dm.docvecs.doctag_syn0.shape[0]

    那么,您使用了多少个 docvecs?如果是 200,000,您将需要...

    ((200000 * 199999) // 2) * 8 bytes
    

    ...或大约 320GB 的 RAM 以使 np.zeros() 分配成功。 (如果你有更多的 docvecs,甚至更多的 RAM。)

    (凝聚聚类需要知道所有的成对距离,scipy 实现一开始就尝试计算和存储,这非常耗费空间。)

    您可能需要更多的 RAM,或者使用更少的 docvecs,或者使用不同的聚类算法,或者使用更懒惰的计算距离的实现(但这样会慢得多,因为它通常会重新计算,而不是重复使用, 重复需要的距离。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-08
      • 2020-07-29
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 2014-08-27
      相关资源
      最近更新 更多