我有(20905040,7)的数据集向用户推荐10种不同的产品
它可能更大,但无论如何,我在处理
cosine_sim = cosine_similarity(normalized_df,normalized_df)跟踪(最近一次调用)在1 get_ipython().run_line_magic(“时间”)中‘)-2 cosine_sim = cosine_similarity(normalized_df,normalized_df) cosine_similarity(X,Y,dense_output) 1034 1035 K= safe_sparse_dot(X_normalized,Y_normalized.T,1037 1038返回K ~/venv/lib/python3.6/site-packages/sklearn/utils/extmath.py in safe_sparse_dot(a,b,dense_output) 140返回ret 141其他:-> 142返回np.dot(a,b) 143144 MemoryError:
问题
发布于 2019-07-21 11:51:04
这是在说RAM。有几个因素将决定您可以使用多少行/列。与行/列不同,只考虑元素的总数可能更容易:num_rows * num_cols。您需要的内存将与这个数字有关系。
有一些方法可以减少工作记忆来解决问题--通常来说,记忆和速度是权衡的一部分。如果在计算结果时使用的内存要少得多,那么一次可以做的更少,所以需要更长的时间。
如果您有浮点数(那些带有小数),那么Pandas通常在默认情况下使用数据类型float64。您可以尝试使用float32代替。它提供了大约一半的准确性,但也只使用一半的内存。您可以通过在计算cosine_similarity之前简单地添加这一行来做到这一点:
import numpy as np
normalized_df = normalized_df.astype(np.float32)
cosine_sim = cosine_similarity(normalized_df, normalized_df)下面是利用Keras计算余弦相似度的一个线程,然后可以在GPU上完成。我要指出的是,(单个)GPU通常比计算机本身有更少的工作内存可用。
下面是一个关于如何扩大计算规模的博客来使用诸如Spark之类的工具来进行分布式计算。这将允许您处理更大的矩阵,只要您有几台计算机可用。
https://datascience.stackexchange.com/questions/56094
复制相似问题