Python 为什么那个代码片段不能在GoogleColab上运行?

Python 为什么那个代码片段不能在GoogleColab上运行?,python,pandas,machine-learning,scikit-learn,google-colaboratory,Python,Pandas,Machine Learning,Scikit Learn,Google Colaboratory,我使用TPU,它提供35 GB的RAM。在我尝试运行这个代码片段之前,我有20 GB的可用RAM。但我无法运行该代码段,因为内存太低(它说需要35GB以上),我使用了6GB的数据集。为什么这个代码会占据如此多的位置?我使用了垃圾收集器并删除了以前使用的数据帧。我该怎么做才能使代码正常工作 无内存:26.4 GB进程大小:156.4 MB GPU可用内存:16280MB已用内存:0MB可用内存0%总计16280MB seed = 7 test_size = 0.4 X_train, X_test,

我使用TPU,它提供35 GB的RAM。在我尝试运行这个代码片段之前,我有20 GB的可用RAM。但我无法运行该代码段,因为内存太低(它说需要35GB以上),我使用了6GB的数据集。为什么这个代码会占据如此多的位置?我使用了垃圾收集器并删除了以前使用的数据帧。我该怎么做才能使代码正常工作

无内存:26.4 GB进程大小:156.4 MB GPU可用内存:16280MB已用内存:0MB可用内存0%总计16280MB

seed = 7
test_size = 0.4
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=test_size)
gc.collect()
model=KNeighborsClassifier(n_neighbors=6,algorithm='kd_tree',n_jobs=25)
model.fit(X_train, y_train)

Python中的数据科学工作流往往非常需要内存。例如,如果您的输入数据
X,Y
消耗6GB,则该行

X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=test_size)
将再消耗6 GB(每个创建的子集不是原始阵列的视图,而是具有新内存占用的新阵列对象)

KNeighborsClassifier
中,可以制作数据的其他副本(例如,该算法中的代码要求输入数组为连续的C顺序浮点64数组,如果您的数据不符合该标准,则将制作副本)


通常,基于numpy的数据科学工作流的一个好的经验法则是,除非您非常小心地防止数据复制,否则您将需要大约4-5倍于您正在处理的原始数据大小的内存。

注释对我不起作用,colab不会问我是否需要更多ram。