我想训练我的数据集,它是13159个实例,并使用单词袋特征矩阵,特征数量是18800
当我没有使用10倍cv,甚至没有训练整个数据集时,我的代码运行得很好。但当我使用10倍cv指数时,它给了我记忆错误
<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])
每次迭代结束时删除变量并进行垃圾收集对我来说都很有效。如果它对任何人都有帮助,就把它留在这里。
del train_data
del train_label
del test_data
del test_label
gc.collect()
使用nohup启动代码并检查cpu利用率。在Linux中,这可以使用来完成
htop
我的猜测是,你的cpu将被100%利用。
为了解决这个问题,你可以减少你的特征或采用核心外的特征提取方法。我更喜欢sklearn:
-PCA-
-L1正则化
-FeatureVector
-核心外特征提取
还会有更多。
在每个循环结束时,我添加了以下代码,没有内存错误:
train_data = []
train_label = []
test_data = []
test_label = []