首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MemoryError:无法分配617。GiB用于在float64上具有形状(82754714206 )和数据类型的数组,并使用

MemoryError:无法分配617。GiB用于在float64上具有形状(82754714206 )和数据类型的数组,并使用
EN

Stack Overflow用户
提问于 2021-05-30 14:26:32
回答 1查看 3.2K关注 0票数 0

我在木星笔记本上尝试了下面的聚类。我的数据集的形状是(406829, 8)

我尝试了以下代码:

代码语言:javascript
复制
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?

我尝试了上述链接中提供的解决方案,但没有工作。请帮帮我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-30 17:10:20

AgglomerativeClustering的内存消耗是O(n平方),这意味着它比数据大小呈指数增长。使用single链接,计算速度可以从O(N)到O(N 2 )之间更快,但不幸的是,这并不适用于内存1。单一聚类也有“富得更富”的缺点,即集群往往只有少数大集群,而其他集群则接近于零大小的集群2。因此,至少在枕木或科学套件中进行微调的选项是不好的。

另一种选择是在拟合模型时输入的数据较少。为此,您可以为数据帧使用一个方法(假设data对象是一个数据帧):

代码语言:javascript
复制
data.sample(frac = 0.5) 

这会使内存使用的大小以指数方式缩小。一开始不要使用大量的数据。从3

,我在0.02%的数据上运行了算法,得到了结果,但是当我需要标记所有记录时,问题就出现了。

1

2

3

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67762297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档