Python sklearn 读取非常大的 SVMLIGHT 文件



我正在使用带有svmlight的python 2.7来存储和读取一个非常大的svmlight格式文件。

我正在使用读取文件

import sklearn
rows, labels = sklearn.datasets.load_svmlight_file(matrixPath, zero_based=True)

文件太大,无法存储在内存中。我正在寻找一种批量迭代文件的方法,而无需提前拆分文件。

目前,我发现的最佳方法是使用终端命令拆分svmlight文件。 然后读取我创建的部分文件。

我发现读取大文件的一个好方法是逐行批量读取,以免溢出内存。

如何使用 svmlight 格式的文件执行此操作?

谢谢!

我遇到了同样的问题,这是我的解决方案:

使用scikitlearn的load_svmlight_file函数,您可以指定offsetlength参数。从文档中:

偏移量:整数,可选,默认值 0

  • 忽略偏移的第一个字节,方法是向前查找,然后丢弃后续字节,直到下一个换行符。

长度:整数,可选,默认值 -1

  • 如果严格为,则在文件中的位置达到(偏移量 + 长度(字节阈值后停止读取任何新数据行。

下面是如何批量迭代 svmlight 文件的示例:

from sklearn.datasets import load_svmlight_file
def load_svmlight_batched(filepath, n_features, batch_size):
offset = 0
with open(filepath, 'rb') as f:
X, y = load_svmlight_file(f, n_features=n_features,
offset=offset, length=batch_size)
while X.shape[0]:
yield X, y
offset += batch_size
X, y = load_svmlight_file(f, n_features=n_features,
offset=offset, length=batch_size)
def main(filepath):
iterator = load_svmlight_batched(filepath, 
n_features=2**14, 
batch_size=10000)
for X_batch, y_batch in iterator:
# Do something

最新更新