【发布时间】: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