【问题标题】:Memory error while doing Hierarchical Clustering进行分层聚类时出现内存错误
【发布时间】:2019-08-14 09:54:42
【问题描述】:

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

我尝试过的:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import preprocessing

data = pd.read_csv('gpmd.csv', header = 0)

X = data.loc[:, ['ContextID', 'BacksGas_Flow_sccm']]

min_max_scaler = preprocessing.MinMaxScaler()
X_minmax = min_max_scaler.fit_transform(X.values[:,[1]])

import scipy.cluster.hierarchy as sch
dendrogram = sch.dendrogram(sch.linkage(X_minmax, method = 'ward'))

执行此操作后,我收到以下错误:

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

有人能解释一下这里到底是什么问题吗?

提前致谢

【问题讨论】:

  • 问题是sch.linkage 在原始观察数方面具有二次记忆复杂度。由于您有很多(207989),您应该考虑尝试内存要求较低的算法。
  • 嘿,@MikhailBerlinkov 。换句话说,你的意思是说分层聚类不适用于大型数据集?
  • 不,我的意思是只有这个特定的算法是二次的。

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


【解决方案1】:

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

因此,大多数实现将在大约 65535 个实例达到 32 位标记时失败(有些可能已经在 32k 时失败)。但只要算一算:n * n * 8 bytes for double precision:你需要多少内存?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 2021-02-22
    • 2013-10-23
    • 1970-01-01
    相关资源
    最近更新 更多