python sklearn读取非常大的svmlight文件

python sklearn读取非常大的svmlight文件,python,scikit-learn,sparse-matrix,libsvm,svmlight,Python,Scikit Learn,Sparse Matrix,Libsvm,Svmlight,我使用Python2.7和svmlight来存储和读取一个非常大的svmlight格式文件 我正在使用 import sklearn rows, labels = sklearn.datasets.load_svmlight_file(matrixPath, zero_based=True) 文件太大,无法存储在内存中。我正在寻找一种无需提前拆分文件就可以批量迭代该文件的方法 目前,我找到的最好的方法是使用terminal命令split分割svmlight文件。然后读取我创建的部分文件 我认为

我使用Python2.7和svmlight来存储和读取一个非常大的svmlight格式文件

我正在使用

import sklearn
rows, labels = sklearn.datasets.load_svmlight_file(matrixPath, zero_based=True)
文件太大,无法存储在内存中。我正在寻找一种无需提前拆分文件就可以批量迭代该文件的方法

目前,我找到的最好的方法是使用terminal命令split分割svmlight文件。然后读取我创建的部分文件

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

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


谢谢

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

使用scikitlearn中的
load\u svmlight\u file
功能,可以指定
offset
length
参数。从:

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

  • 通过向前搜索忽略偏移量的第一个字节,然后丢弃后续字节直到下一个新行字符
长度:整数,可选,默认值-1

  • 如果严格为正,则在文件中的位置达到(偏移量+长度)字节阈值后停止读取任何新行数据
下面是一个如何批量迭代svmlight文件的示例:

从sklearn.dataset导入load\u svmlight\u文件
def load_svmlight_批处理(文件路径、n_功能、批处理大小):
偏移量=0
将open(filepath,'rb')作为f:
十、 y=加载\u svmlight\u文件(f,n\u要素=n\u要素,
偏移量=偏移量,长度=批次大小)
而X.shape[0]:
产量X,y
偏移量+=批次大小
十、 y=加载\u svmlight\u文件(f,n\u要素=n\u要素,
偏移量=偏移量,长度=批次大小)
def main(文件路径):
迭代器=加载\u svmlight\u批处理(文件路径,
n_特征=2**14,
批次(单位尺寸=10000)
对于迭代器中的X_批,y_批:
#做点什么

为了批量对数据执行任何有意义的操作,将从整个文件中至少进行一次传递,以加载其中的全部功能。@VivekKumar没问题,我只是不能一次将所有矩阵保存在内存中,对其进行迭代无论如何都不是问题。