【问题标题】:sklearn memory error for kfold CVkfold CV的sklearn内存错误
【发布时间】:2016-02-02 07:06:21
【问题描述】:

我想训练我的数据集是 13159 个实例并使用词袋特征矩阵,特征数是 18800

当我不使用 10-fold cv 时,我的代码运行良好,甚至训练了整个数据集。 但是当我使用 10 fold cv index 时,它给了我内存错误

<class 'numpy.ndarray'>
train_data = np.array(data_content[train_index])MemoryError

我不认为这个数据集太大而无法分解内存空间。我的笔记本电脑是 4GB RAM 和 64 位

'''Cross-Validation'''
skf = cross_validation.StratifiedKFold(data_label, n_folds=10, shuffle=True, random_state=None)
'''For each fold, Do the classification'''
for train_index, test_index in skf:
    print(type(data_content))
    print (type(data_label))
    train_data = np.array(data_content[train_index])
    train_label = np.array(data_label[train_index])
    test_data = np.array(data_content[test_index])
    test_label = np.array(data_label[test_index])

【问题讨论】:

    标签: python scikit-learn cross-validation


    【解决方案1】:

    使用 nohup 触发您的代码并检查您的 CPU 利用率。在 Linux 中,这可以使用

    htop
    

    我的猜测是,你的 cpu 将被 100% 使用。

    要解决这个问题,您可以减少特征或采用核心特征提取方法。我更喜欢 sklearn 的这些:

    - PCA

    - L1 Regularization

    - FeatutreVectorizer

    - Out of core feature extraction

    还会有更多。

    【讨论】:

    • 我检查了我的 CPU,它甚至可以运行代码,但我的 RAM 跳到 90%,而不是 100%。奇怪的是使用整个数据进行训练很好,但是使用 CV 将数据集按索引拆分为 10 倍是错误的。
    • 是的,这可能是原因之一。在某个时间点,RAM 会被完全利用。
    • Thx@Pappu Jha,我在每个循环结束时添加了一些代码来清理数组,它有效并且没有内存错误,我不知道为什么,但很高兴它有效。
    • 酷。要求您添加这些改进并编辑您的代码。它会帮助其他人:)
    【解决方案2】:

    在每个循环结束时,我添加了以下代码,没有内存错误:

    train_data = []
    train_label = []
    test_data = []
    test_label = []
    

    【讨论】:

      【解决方案3】:

      在每次迭代结束时删除变量,然后进行垃圾收集,每次都对我有用。如果对任何人有帮助,请留在这里。

      del train_data 
      del train_label
      del test_data 
      del test_label
      gc.collect()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-11
        • 2017-08-15
        • 2020-02-01
        • 2014-10-13
        • 2018-08-14
        • 2019-10-11
        • 2016-04-16
        • 2017-10-18
        相关资源
        最近更新 更多