Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 内存问题sklearn成对距离计算_Python_Out Of Memory_Fork_Scikit Learn_Cosine Similarity - Fatal编程技术网

Python 内存问题sklearn成对距离计算

Python 内存问题sklearn成对距离计算,python,out-of-memory,fork,scikit-learn,cosine-similarity,Python,Out Of Memory,Fork,Scikit Learn,Cosine Similarity,我有一个很大的数据框,其中索引是movie_id,列标题表示tag_id。每行表示movie到tag的相关性 639755209030196 691838465332800 \ 46126718359 0.042 0.245 46130382440 0.403 0.3 46151724544 0.032

我有一个很大的数据框,其中索引是movie_id,列标题表示tag_id。每行表示movie到tag的相关性

                     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。在上述代码行之前,我删除了所有不必要的数据对象以释放内存。我在一台有40G内存的机器上遇到了这个错误

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

您正在使用哪个版本的scikit learn?它是否在n_jobs=1的情况下运行? 结果应该适合内存,它是8*42588**2/1024**3=13GB。
但数据量约为2gb,将复制到每个核心。因此,如果您有16个内核,您将遇到麻烦。

您使用的是什么操作系统?还有,Python的哪个版本,即32位还是64位?我只是仔细检查一下,它是16核的,所以我想这就解释了问题所在。我还更新了python的版本,在question@Null-你解决这个问题了吗?我遇到了同样的问题。使用更少的内核或购买更多的内存;)