【问题标题】:Can Python use the harddrive as extra memory?Python可以将硬盘用作额外内存吗?
【发布时间】:2015-11-27 00:44:53
【问题描述】:

我正在运行一个生成 n-gram 的文本机器学习算法。这当然会大大增加输入的大小。为了说明这一点,原始输入是文件中的约 30K 行,在生成三元组之后,我有 348000 个条目。

我正在使用scikit 和它的TfidfVectorizer,如果给出的值太多,我会得到一个MemoryError 由里面的numpy 数组抛出。在达到极限之前,我只能使用约 27500 个三元组。这意味着我最多只能使用 10% 的可用数据。

我可以做些什么来帮助解决这个问题?我有什么选择吗?

【问题讨论】:

  • 我相信这确实是一个操作系统问题,因为通过操作系统可以分配一定数量的磁盘空间作为分页或虚拟内存。但它会令人难以置信地减慢速度。最好还是找一台内存更大的机器,或者重新考虑你的方法。
  • 有关一些信息,请参阅this question。确保您使用的是 64 位 Python 而不是 32 位。

标签: python numpy machine-learning out-of-memory scikit-learn


【解决方案1】:

正如@jme 提到的,python 对操作系统的内存管理没有影响。 可能最合理的方法(如果您找不到具有更多 RAM 的机器)将以某种方式限制功能的数量,例如使用TfidfVectorizer 的以下选项参数之一:

ma​​x_df : 在 [0.0, 1.0] 或 int 范围内浮动,默认=1.0

在构建词汇表时,忽略文档频率严格高于给定阈值的术语(特定于语料库的停用词)。如果是float,参数代表文档的比例,整数绝对计数。如果词汇表不是 None,则忽略此参数。

min_df : 在 [0.0, 1.0] 或 int 范围内浮动,默认 =1

在构建词汇表时,忽略文档频率严格低于给定阈值的术语。该值在文献中也称为截止值。如果是float,参数代表文档的比例,整数绝对计数。如果词汇表不是 None,则忽略此参数。

ma​​x_features : int 或 None,默认=None

如果不是 None,则构建一个仅考虑按词频在整个语料库中排序的前 max_features 的词汇表。

如果词汇表不是None,则忽略此参数。

【讨论】:

  • 我实际上发现了我的问题。事实证明,向量化器非常有效,但是如果你在向量上调用 toarray() ,它会杀死内存。一旦我意识到这一点,事情就会变得更好。
猜你喜欢
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 2023-03-24
  • 2020-03-28
  • 2013-01-04
  • 2012-10-16
相关资源
最近更新 更多