python - 将大型 numpy 数组拆分为训练和测试的内存有效方法

标签 python arrays scikit-learn

我有一个很大的 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/

相关文章:

python - tkinter 不更新值

java - 创建了我自己的二分搜索版本,不明白为什么它比常规方法更快?

arrays - 如何声明一个字符串数组(在多行上)

machine-learning - 用于决策树的one-hot encode后如何解释特征重要性

python - 在 django 中执行右连接(采取 2)

Python:将内容从一个word文档复制到另一个word文档并保持格式?

python - 在 Matplotlib 中使用 Unicode 希腊字母

javascript - 如何将字符串添加到待办事项列表中的字符串列表 react

machine-learning - 使用机器学习算法训练 MFCC

scikit-learn - sklearn.preprocessing 中没有 StandardScaler 类