python - Python 中存在 MemoryError,但 IPython 中没有

标签 python memory machine-learning ipython scikit-learn

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

更具体地说,我正在使用 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 ),即使它作为稀疏矩阵传入。

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

有什么想法吗?

最佳答案

听起来您遇到了标签二值化器当前实现的限制:请参阅问题 #2441 。有PR #2458修复它。

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

关于python - Python 中存在 MemoryError,但 IPython 中没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20382599/

相关文章:

python - 无法从 Python 中的部分初始化模块 'mydb' 导入名称 'connection'

python - 在 Django 的非托管模型中使用外键

memory - 在结构中创建安全的重叠/联合字段

machine-learning - 如何初始化词汇表外的词嵌入?

machine-learning - 测量 SVM 中模型的准确性和特征的重要性

python - Itertools.按严格顺序排列列表 python

python - 在 Python 中暂停执行

Javascript大数组挂起

multithreading - 我可以限制 Haskell 中每个函数/monad/线程的内存使用吗?

python - 输入适用于 sklearn.linear 和 sklearn.ensemble 中的某些 sklearn 模型,但不适用于其他模型