2015-11-27 40 views
0

我正在运行一个生成n-gram的文本机器学习算法。这当然会大量地扩大输入的大小。把它放在上下文中,原始输入是在一个文件中约30K行,在生成三元素之后,我有348000个条目。Python可以使用硬盘作为额外的内存吗?

我使用scikit及其TfidfVectorizer,如果给出的值太多,我会得到由numpy数组抛出的MemoryError。在我达到极限之前,我只能使用〜27500个卦。这意味着我只能使用最多10%的可用数据。

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

+2

我相信这是一个真正的操作系统问题,因为它是通过操作系统,可以分配一定量的磁盘空间作为分页或虚拟内存。但它会减慢速度*令人难以置信*。要么找到一台拥有更多内存的机器,要么完全重新思考你的方法可能会更好。 – jme

+0

查看[这个问题](http://stackoverflow.com/questions/5537618/memory-errors-and-list-limits-in-python)了解一些信息。确保你使用的是64位Python而不是32位。 – bbayles

回答

0

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

max_df:漂浮在范围[0.0,1.0]或者int,默认= 1.0

在构建词汇忽略具有文档频率严格条件高于给定的阈值(语料库专用停用词)。如果为float,则该参数表示文档的比例,即整数绝对计数。如果词汇不是无,则忽略此参数。

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

在构建词汇忽略具有文档频率大于给定阈值低严格条件。这个值在文献中也被称为截断值。如果为float,则该参数表示文档的比例,即整数绝对计数。如果词汇不是无,则忽略此参数。

max_features:int或无,默认=无

如果不是无,建立一个词汇表,只考虑通过在语料库词频排序顶部max_features。

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

+0

我确实发现我的问题。事实证明,矢量化器非常高效,但如果你在矢量上调用toarray(),它会杀死内存。一旦我意识到,事情变得更好。 –

相关问题