我正在进行一系列的实验,在这些实验中,几乎每次迭代的预处理都会发生变化。一旦我有了格式的数据,我需要从scikits(liblinear)运行一个分类器。我可以把数据转换成svm光格式。我知道有一个模块可以将其转换为scikits标准。问题是我不想把文件写入磁盘。我有48吉格的内存,我更愿意在内存中进行转换。在
下面是一个例子,我采用svm光格式,将ito写入一个stringio对象,并在其上sic svm光加载程序。不幸的是,装载机拒绝关闭(它的工作方式是另一种方式)。有什么建议吗?我正在运行超过1000个不同的预处理管道,我无法继续写入磁盘。在
svm光数据样本位于: http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary/a1a
我的代码
import numpy as np
from sklearn.datasets import svmlight_format
import cStringIO
bufFile = cStringIO.StringIO()
with open('C:/Users/theDesktop/Desktop/sampleData.txt') as a:
p = a.readlines()
a.close()
bufFile.writelines(p)
X_train, y_train = svmlight_format.load_svmlight_file(bufFile)
我的错误:
^{pr2}$
再看一眼,我想我在下面回答了一个不同的问题(如果你感兴趣,你可以检查)=)你正在寻找一个节省内存的格式转换器和一个新的视角。首先,拥有48千兆内存有什么问题?它对于文本处理来说已经足够了,除非你正在处理一个包含数百万文档的语料库。其次,如果sklearn在不同的实例中将文件作为不同的文件写入磁盘,那么您可以将其调整为覆盖,最后可以删除最后一次迭代。或者,您可以使用
os
来连接终端,然后通过使用rm
命令,您可以在每次迭代中或一次删除任何您喜欢的文件。在如果问题是python在每次迭代中创建一个新对象,那么重写也是提高内存效率的一种解决方案。在
我是在帮助你;如果我误导或误解你,请评论,以免其他人读到这篇文章。在
这有点晚了,但据我所知,您使用sklearn作为python和svm light之间的接口。我不知道您想要什么样的输出;但是如果它只是各种预处理方法的精度度量,那么您可以使用python的
os
库作为命令行之间的接口,然后在安装之后从那里调用svm light。然后,通过使用grep
或类似工具,您可以提取精度或其他所需的信息,因为svm light的学习和分类脚本会将日志信息打印到std输出。{或者在迭代之后,用另一个cd2>来删除它们,或者用另一个来删除它们。在这样你就可以像你说的那样保存记忆,也许(?)使用sklearn获取更多信息。最后一句话,我不确定这个解决方法的复杂性:它可能更耗时,检查一下时间是否对您有限制。在
我不知道这是否是一个可行和有效的解决办法,我相信你已经克服了3个月以来的情况;但如果你发表意见,这可能会帮助其他人。在
相关问题 更多 >
编程相关推荐