进行分层群集时出现内存错误

时间:2019-03-23 16:49:35

标签: machine-learning cluster-analysis hierarchical-clustering

我有一个庞大的数据集(207989,23),我现在尝试在仅一列上应用层次聚类,以测试它是否适合我手头的任务。

我尝试过的事情:

dendrogram = sch.dendrogram(sch.linkage(X_minmax, method = 'ward'))
Traceback (most recent call last):

  File "<ipython-input-4-429f42b68112>", line 1, in <module>
    dendrogram = sch.dendrogram(sch.linkage(X_minmax, method = 'ward'))

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\scipy\cluster\hierarchy.py", line 708, in linkage
    y = distance.pdist(y, metric)

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\scipy\spatial\distance.py", line 1877, in pdist
    dm = np.empty((m * (m - 1)) // 2, dtype=np.double)

MemoryError

执行此操作后,出现以下错误:

let str = "24,13,47,20,33,9,68,18,99,14,150,33,33,33,34,15,91,10";

let result = JSON.parse(`[${str}]`).reduce((acc, cur, i) => {
  if (i===1) return [[acc,cur]]

  if (i%2)  acc.push( [acc.pop(), cur] )
  else      acc.push( cur )

  return acc
});

console.log ( result )

有人可以解释这里到底是什么问题吗?

预先感谢

1 个答案:

答案 0 :(得分:0)

大多数变体中的层次聚类需要O(n²)内存。

因此,大多数实现在达到32位标记时将在大约65535个实例上失败(有些可能已经在32k上失败)。但是只要做一下数学运算即可:n * n * 8个字节以实现双精度:您需要多少内存?