一般来说,你能想到发生这种情况的任何原因吗(即 Python 中的 MemoryError 但 IPython 中没有(控制台 - 而不是笔记本)?)
更具体地说,我正在使用 sklearn 的 sgdclassifier
在 multiclass
和multilabel
案件。给出以下代码时会出错:
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 ),即使它作为稀疏矩阵传入。
我有 60 GB 的 ram,有 21 列,最多不应该超过 8 GB(600 万 * 21 * 64),所以我很困惑。我重写了Y = np.zeros((len(y), len(classes)), dtype=np.int
使用dtype = bool
,但没有运气。
有什么想法吗?
最佳答案
关于python - Python 中存在 MemoryError,但 IPython 中没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20382599/