首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >矩阵cosine_similarity中的内存误差

矩阵cosine_similarity中的内存误差
EN

Data Science用户
提问于 2019-07-21 11:35:52
回答 1查看 6.9K关注 0票数 3

我有(20905040,7)的数据集向用户推荐10种不同的产品

它可能更大,但无论如何,我在处理

代码语言:javascript
复制
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:

问题

  1. 当我有太多行时,如何应用余弦相似性?

  1. 他们说的是内存吗?或者是什么记忆错误?

  1. 有办法用gpu进行余弦相似训练吗?

  1. 有什么好主意吗?
EN

回答 1

Data Science用户

发布于 2019-07-21 11:51:04

这是在说RAM。有几个因素将决定您可以使用多少行/列。与行/列不同,只考虑元素的总数可能更容易:num_rows * num_cols。您需要的内存将与这个数字有关系。

有一些方法可以减少工作记忆来解决问题--通常来说,记忆和速度是权衡的一部分。如果在计算结果时使用的内存要少得多,那么一次可以做的更少,所以需要更长的时间。

如果您有浮点数(那些带有小数),那么Pandas通常在默认情况下使用数据类型float64。您可以尝试使用float32代替。它提供了大约一半的准确性,但也只使用一半的内存。您可以通过在计算cosine_similarity之前简单地添加这一行来做到这一点:

代码语言:javascript
复制
import numpy as np

normalized_df = normalized_df.astype(np.float32)
cosine_sim = cosine_similarity(normalized_df, normalized_df)

下面是利用Keras计算余弦相似度的一个线程,然后可以在GPU上完成。我要指出的是,(单个)GPU通常比计算机本身有更少的工作内存可用。

下面是一个关于如何扩大计算规模的博客来使用诸如Spark之类的工具来进行分布式计算。这将允许您处理更大的矩阵,只要您有几台计算机可用。

票数 2
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/56094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档