用于scikit学习的SVM轻型加载程序

2024-10-01 09:39:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在进行一系列的实验,在这些实验中,几乎每次迭代的预处理都会发生变化。一旦我有了格式的数据,我需要从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}$

Tags: 数据内存importformatas格式方式train
1条回答
网友
1楼 · 发布于 2024-10-01 09:39:15

再看一眼,我想我在下面回答了一个不同的问题(如果你感兴趣,你可以检查)=)你正在寻找一个节省内存的格式转换器和一个新的视角。首先,拥有48千兆内存有什么问题?它对于文本处理来说已经足够了,除非你正在处理一个包含数百万文档的语料库。其次,如果sklearn在不同的实例中将文件作为不同的文件写入磁盘,那么您可以将其调整为覆盖,最后可以删除最后一次迭代。或者,您可以使用os来连接终端,然后通过使用rm命令,您可以在每次迭代中或一次删除任何您喜欢的文件。在

如果问题是python在每次迭代中创建一个新对象,那么重写也是提高内存效率的一种解决方案。在

我是在帮助你;如果我误导或误解你,请评论,以免其他人读到这篇文章。在


这有点晚了,但据我所知,您使用sklearn作为python和svm light之间的接口。我不知道您想要什么样的输出;但是如果它只是各种预处理方法的精度度量,那么您可以使用python的os库作为命令行之间的接口,然后在安装之后从那里调用svm light。然后,通过使用grep或类似工具,您可以提取精度或其他所需的信息,因为svm light的学习和分类脚本会将日志信息打印到std输出。{或者在迭代之后,用另一个cd2>来删除它们,或者用另一个来删除它们。在

这样你就可以像你说的那样保存记忆,也许(?)使用sklearn获取更多信息。最后一句话,我不确定这个解决方法的复杂性:它可能更耗时,检查一下时间是否对您有限制。在

我不知道这是否是一个可行和有效的解决办法,我相信你已经克服了3个月以来的情况;但如果你发表意见,这可能会帮助其他人。在

相关问题 更多 >