Python 内存问题sklearn成对距离计算
我有一个很大的数据框,其中索引是movie_id,列标题表示tag_id。每行表示movie到tag的相关性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
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-你解决这个问题了吗?我遇到了同样的问题。使用更少的内核或购买更多的内存;)