我有一个很大的 numpy 数组,当我运行 scikit learn 的 train_test_split 将数组拆分为训练和测试数据时,我总是会遇到内存错误。拆分成训练和测试的内存效率更高的方法是什么?为什么 train_test_split 会导致这种情况?
以下代码导致内存错误并导致崩溃
import numpy as np
from sklearn.cross_validation import train_test_split
X = np.random.random((10000,70000))
Y = np.random.random((10000,))
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.33, random_state=42)
最佳答案
我尝试过的一种方法是将 X 存储在 pandas 数据框中并随机播放
X = X.reindex(np.random.permutation(X.index))
因为我在尝试时遇到了同样的内存错误
np.random.shuffle(X)
然后,我将 pandas 数据帧转换回 numpy 数组并使用此函数,我可以获得火车测试拆分
#test_proportion of 3 means 1/3 so 33% test and 67% train
def shuffle(matrix, target, test_proportion):
ratio = int(matrix.shape[0]/test_proportion) #should be int
X_train = matrix[ratio:,:]
X_test = matrix[:ratio,:]
Y_train = target[ratio:,:]
Y_test = target[:ratio,:]
return X_train, X_test, Y_train, Y_test
X_train, X_test, Y_train, Y_test = shuffle(X, Y, 3)
这目前有效,当我想进行 k 折交叉验证时,我可以迭代循环 k 次并打乱 pandas 数据帧。虽然现在这已经足够了,但为什么 numpy 和 sci-kit learn 的 shuffle 和 train_test_split 实现会导致大数组的内存错误?
关于python - 将大型 numpy 数组拆分为训练和测试的内存有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31467487/