Ошибка памяти при выполнении иерархической кластеризации - PullRequest
0 голосов
/ 23 марта 2019

У меня большой набор данных (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

Может кто-нибудь объяснить, в чем именно проблема здесь?

Заранее спасибо

1 Ответ

0 голосов
/ 24 марта 2019

Иерархическая кластеризация в большинстве вариантов требует O (n²) памяти.

Из-за этого большинство реализаций завершится с ошибкой около 65535 экземпляров, когда достигнет 32-битной отметки (некоторые могут потерпеть неудачу уже при 32k).Но просто сделайте математику: n * n * 8 байт для двойной точности: сколько памяти вам понадобится?

...