内存问题sklearn pairwise_distances计算

时间:2015-05-07 16:56:32

标签: python out-of-memory fork scikit-learn cosine-similarity

我有一个大数据框,其索引是movie_id,列标题代表tag_id。每行代表电影到标签的相关性

                     639755209030196  691838465332800  \
46126718359              0.042             0.245
46130382440              0.403             0.3
46151724544              0.032             0.04

然后我做了以下事情:

data = df.values
similarity_matrix = 1 - pairwise_distances(data, data, 'cosine', -2)

它有近8000个唯一标签,所以数据的形状是42588 * 8000.在上面的代码行之前,我删除所有不必要的数据对象以释放任何内存。我在拥有40Gig内存的机器中收到此错误。

Exception in thread Thread-4:
Traceback (most recent call last):
  File "~/anaconda/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File "~/anaconda/lib/python2.7/threading.py", line 763, in run
    self.__target(*self.__args, **self.__kwargs)
  File "~/anaconda/lib/python2.7/multiprocessing/pool.py", line 326, in _handle_workers
    pool._maintain_pool()
  File "~/anaconda/lib/python2.7/multiprocessing/pool.py", line 230, in _maintain_pool
    self._repopulate_pool()
  File "~/anaconda/lib/python2.7/multiprocessing/pool.py", line 223, in _repopulate_pool
    w.start()
  File "~/anaconda/lib/python2.7/multiprocessing/process.py", line 130, in start
    self._popen = Popen(self)
  File "~/anaconda/lib/python2.7/multiprocessing/forking.py", line 121, in __init__
    self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

可能是什么原因?矩阵太大了吗?我有什么选择避免这种记忆问题?

我目前正在使用:

python 2.7
scikit-learn              0.15.2               np19py27_0
Red-Hat Linux with 4X4 cores x86_64

1 个答案:

答案 0 :(得分:1)

您使用的是什么版本的scikit-learn?它是以n_jobs = 1运行的吗? 结果应该适合内存,它是8 * 42588 ** 2/1024 ** 3 = 13 Gb。 但数据大约为2GB,并将复制到每个核心。因此,如果您有16个内核,则会遇到麻烦。