我在木星笔记本上尝试了下面的聚类。我的数据集的形状是(406829, 8)。
我尝试了以下代码:
import pandas as pd
import numpy as np
import matplotlib
from matplotlib import pyplot as plt
import os
from sklearn.preprocessing import StandardScaler, LabelEncoder
import scipy.cluster.hierarchy as shc
from sklearn.cluster import AgglomerativeClustering
# Apply the agglomerative clustering with ward linkage
aggloclust = AgglomerativeClustering(affinity='euclidean',linkage='ward', memory=None, n_clusters=5).fit(data)
print(aggloclust)
# Agglomerative clustering labels
labels = aggloclust.labels_
# Show the clusters on the graph
plt.scatter(x[:,0], x[:,1], c=labels)
plt.show()然后我遇到了一个错误- MemoryError: Unable to allocate 617. GiB for an array with shape (82754714206,) and data type float64
我正在windows机器上工作,内存为16 am。PythonVersion3.8.5有人能告诉我如何解决这个问题吗?
我尝试搜索这个错误并得到了解决方案--创建jupyter配置文件,然后在我在这里找到的文件中更新max_buffer_size - How to increase Jupyter notebook Memory limit?。
我尝试了上述链接中提供的解决方案,但没有工作。请帮帮我。
发布于 2021-05-30 17:10:20
AgglomerativeClustering的内存消耗是O(n平方),这意味着它比数据大小呈指数增长。使用single链接,计算速度可以从O(N)到O(N 2 )之间更快,但不幸的是,这并不适用于内存1。单一聚类也有“富得更富”的缺点,即集群往往只有少数大集群,而其他集群则接近于零大小的集群2。因此,至少在枕木或科学套件中进行微调的选项是不好的。
另一种选择是在拟合模型时输入的数据较少。为此,您可以为数据帧使用一个方法(假设data对象是一个数据帧):
data.sample(frac = 0.5) 这会使内存使用的大小以指数方式缩小。一开始不要使用大量的数据。从3
,我在0.02%的数据上运行了算法,得到了结果,但是当我需要标记所有记录时,问题就出现了。
源
1
https://stackoverflow.com/questions/67762297
复制相似问题