【问题标题】:Pandas/Sklearn gives incorrect MemoryerrorPandas/Sklearn 给出了不正确的 Memoryerror
【发布时间】:2016-08-22 11:49:16
【问题描述】:

我正在一个具有大量内存的 EC2 实例上的 Jupyter 笔记本上使用 Python2.7 (Anaconda 4.0)(根据free 提供 48GB 空闲空间)。我已经加载了一个很大的 Pandas (v0.18) 数据帧(150K 行,每行约 30KB),但远不及实例的内存容量,即使制作了许多副本。某些 Pandas 和 Scikit-learn (v0.17) 调用会立即触发 MemoryError,例如:

#X is a subset of the original df with 60 columns instead of the 3000
#Y is a float column
X.add(Y)

#And for sklearn...
pca = decomposition.KernelPCA(n_components=5)
pca.fit(X,Y)

与此同时,这些工作正常:

Z = X.copy(deep=True)
pca = decomposition.PCA(n_components=5)

最令人困惑的是,我可以做到这一点,并在几秒钟内完成:

huge = range(1000000000)

我已经重新启动了笔记本、内核和实例,但同样的调用不断给出MemoryError。我还验证了我使用的是 64 位 Python。有什么建议吗?

更新:添加回溯错误:

Traceback (most recent call last):
  File "<ipython-input-9-ae71777140e2>", line 2, in <module>
    Z = X.add(Y)
  File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/pandas/core/ops.py", line 1057, in f
    return self._combine_series(other, na_op, fill_value, axis, level)
  File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/pandas/core/frame.py", line 3500, in _combine_series
    fill_value=fill_value)
  File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/pandas/core/frame.py", line 3528, in _combine_match_columns
    copy=False)
  File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/pandas/core/frame.py", line 2730, in align
    broadcast_axis=broadcast_axis)
  File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/pandas/core/generic.py", line 4152, in align
    fill_axis=fill_axis)
  File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/pandas/core/generic.py", line 4234, in _align_series
    fdata = fdata.reindex_indexer(join_index, lidx, axis=0)
  File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/pandas/core/internals.py", line 3528, in reindex_indexer
    fill_tuple=(fill_value,))
  File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/pandas/core/internals.py", line 3591, in _slice_take_blocks_ax0
    fill_value=fill_value))
  File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/pandas/core/internals.py", line 3621, in _make_na_block
    block_values = np.empty(block_shape, dtype=dtype)
MemoryError

Traceback (most recent call last):
  File "<ipython-input-13-d510bc16443e>", line 3, in <module>
    pca.fit(X,Y)
  File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/sklearn/decomposition/kernel_pca.py", line 202, in fit
    K = self._get_kernel(X)
  File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/sklearn/decomposition/kernel_pca.py", line 135, in _get_kernel
    filter_params=True, **params)
  File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/sklearn/metrics/pairwise.py", line 1347, in pairwise_kernels
    return _parallel_pairwise(X, Y, func, n_jobs, **kwds)
  File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/sklearn/metrics/pairwise.py", line 1054, in _parallel_pairwise
    return func(X, Y, **kwds)
  File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/sklearn/metrics/pairwise.py", line 716, in linear_kernel
    return safe_sparse_dot(X, Y.T, dense_output=True)
  File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/sklearn/utils/extmath.py", line 184, in safe_sparse_dot
    return fast_dot(a, b)
MemoryError

【问题讨论】:

  • 东西在 sklearn 中会变得很大。当配件实际运行时,htop 会显示什么?
  • 你能输入完整的堆栈跟踪吗?
  • 它根本没有显示 Python 进程。当我调用十亿列表时,它开始消耗 CPU 并逐渐使用更多内存。但是这些操作甚至都不会产生任何影响,而且我一运行它们就会遇到错误。
  • @reptilicus 刚刚添加。
  • 不确定,我猜在某个地方,有一个巨大的数组试图实例化。尝试使用较小的批量大小,看看会发生什么。

标签: python pandas scikit-learn anaconda jupyter


【解决方案1】:

找出问题的熊猫方面。我有一个 DF 和一个具有匹配索引 X 和 Y 的系列。我想我可以像这样将 Y 添加为另一列:

X.add(Y)

但是这样做会尝试匹配列上的 Y,而不是索引上的 Y,从而创建一个 150Kx150K 的数组。我需要提供轴:

X.add(Y, axis='index')

【讨论】:

    猜你喜欢
    • 2018-02-19
    • 2016-06-24
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2016-02-13
    • 2011-08-06
    • 2017-05-26
    • 2022-08-13
    相关资源
    最近更新 更多