Python中的MemoryError,但不是IPython

Python中的MemoryError,但不是IPython,python,memory,machine-learning,ipython,scikit-learn,Python,Memory,Machine Learning,Ipython,Scikit Learn,一般来说,您能想到发生这种情况的原因吗(例如,Python中有一个MemoryError,但IPython中没有(控制台--不是笔记本)?) 更具体地说,我在multiclass和multilabel案例中使用了sklearn的sgdclassizer。如果出现以下代码,则会显示错误: model = SGDClassifier( loss='hinge', penalty='l2', n_iter=niter, alpha=alpha, fit_

一般来说,您能想到发生这种情况的原因吗(例如,Python中有一个MemoryError,但IPython中没有(控制台--不是笔记本)?)

更具体地说,我在
multiclass
multilabel
案例中使用了sklearn的
sgdclassizer
。如果出现以下代码,则会显示错误:

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.zero((len(Y),len(classes)),dtype=np.int)
MemoryError),即使它作为稀疏矩阵传入

我有60 gb的ram,有21列,最多不应该超过8 gb(600万*21*64),所以我很困惑。我重写了
Y=np.zero((len(Y),len(classes)),dtype=np.int
以使用
dtype=bool
,但没有运气


有什么想法吗?

听起来您遇到了当前标签二值化器实现的一个限制:请参阅问题。有很多方法可以解决它


请随意尝试该分支,并将您的结果作为评论报告给该PR。

最好更具体一点,您是否有一些重现问题的示例代码?
X
y
的维度是什么,您有多少RAM,您是否运行32位或64位python?X-->600万X 140k(稀疏矩阵);Y-->600万乘21(密集型(非常稀疏,但通过sklearn转换为密集型);60 gb ram;64位python 32或64位python?