的MemoryError在Python但不IPython的(MemoryError in Pytho

2019-10-19 02:19发布

一般来说,你能想到的任何理由为什么会发生这种情况(即在Python,但不是在IPython中(控制台的MemoryError - 不是笔记本电脑))

更具体地讲,我使用sklearn的sgdclassifiermulticlassmultilabel情况。 它给出的错误下面的代码:

model = SGDClassifier(
    loss='hinge', 
    penalty='l2', 
    n_iter=niter, 
    alpha=alpha, 
    fit_intercept=True,
    n_jobs=1)

mc = OneVsRestClassifier(model)
mc.fit(X, y)

上调用mc.fit(X, y)则出现下列错误:

 File "train12-3b.py", line 411, in buildmodel
    mc.fit(X, y)
  File "/usr/local/lib/python2.7/dist-packages/sklearn/multiclass.py", line 201, in fit
    n_jobs=self.n_jobs)
  File "/usr/local/lib/python2.7/dist-packages/sklearn/multiclass.py", line 88, in fit_ovr
    Y = lb.fit_transform(y)
  File "/usr/local/lib/python2.7/dist-packages/sklearn/base.py", line 408, in fit_transform
    return self.fit(X, **fit_params).transform(X)
  File "/usr/local/lib/python2.7/dist-packages/sklearn/preprocessing/label.py", line 272, in transform
    neg_label=self.neg_label)
  File "/usr/local/lib/python2.7/dist-packages/sklearn/preprocessing/label.py", line 394, in label_binarize
    Y = np.zeros((len(y), len(classes)), dtype=np.int)
MemoryError

Y是600万行和矩阵k列,其中所述金标记是1,其余为0(在这种情况下, k = 21 ,但我想去> 2000)。 Y得到由转换sklearn至密集矩阵(因此Y = np.zeros((len(y), len(classes)), dtype=np.int)的MemoryError),即使它是在作为稀疏通过。

我有RAM的60 GB和21列,它不应该超过最大8 GB(6元* 21 * 64),所以我很困惑。 我改写了Y = np.zeros((len(y), len(classes)), dtype=np.int使用dtype = bool ,但没有运气。

有什么想法吗?

Answer 1:

这听起来像你打目前实施的标签二值化的限制:见问题#2441 。 有PR#2458来修复它。

请随意尝试,分支和到PR评论报告结果。



文章来源: MemoryError in Python but not IPython