我有一个庞大的数据集(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 )
有人可以解释这里到底是什么问题吗?
预先感谢
答案 0 :(得分:0)
大多数变体中的层次聚类需要O(n²)内存。
因此,大多数实现在达到32位标记时将在大约65535个实例上失败(有些可能已经在32k上失败)。但是只要做一下数学运算即可:n * n * 8个字节以实现双精度:您需要多少内存?