2016-04-27 5 views
0

私は十分なメモリ(60GB、freeによる48GBフリー)を持つEC2インスタンスのJupyterノートブックでPython2.7(Anaconda 4.0)で作業しています。私は大規模な(150K行、行あたり30KBまで)大規模なPandas(v0.18)データフレームをロードしましたが、多くのコピーが多数作成されても、インスタンスのメモリ容量はどこにもありません。特定のパンダとScikit-学ぶ(v0.17)は例えば、瞬時にMemoryErrorをトリガーする呼び出します。Pandas/Sklearnは不正なメモリエラーを返します

#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) 

ほとんどperplexingly、私はこれを行うことができ、それが終了します数秒で:

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 
+0

Sklearn内で物が大きくなることがあります。フィッティングが実際に実行されているときに 'htop'と表示されるのは何ですか? – reptilicus

+0

完全なスタックトレースを入れることができますか? – reptilicus

+0

Pythonのプロセスはまったく表示されません。 10億のリストを呼び出すと、CPUを使い始めて徐々に多くのメモリを使い始めました。しかし、これらの操作では、すみません、私はそれらを実行するとすぐにエラーを打つことはありません。 – Bob

答えて

0

は、問題のパンダ側を考え出しました。 、

X.add(Y) 

しかし、これは列に、ないインデックスにYを一致させようとやって:私は、私はこのような別の列としてYを追加することができます考え出しDFとシリーズマッチングインデックスと、XとYを持っていました150K×150Kのアレイが作成されます。軸を供給する必要がありました。

X.add(Y, axis='index') 
関連する問題