我使用python2.7与svmlight一起存储和读取一个非常大的svmlight格式文件。
我正在使用
import sklearn
rows, labels = sklearn.datasets.load_svmlight_file(matrixPath, zero_based=True)该文件太大,无法存储在内存中。我正在寻找一种方法来迭代文件的批次,而不需要预先分割文件。
现在,我发现最好的方法是使用终端命令拆分svmlight文件。然后读取我创建的部分文件。
我认为读取大文件的一个好方法是逐行逐行读取,以避免内存溢出。
如何使用svmlight格式的文件来完成此操作?
谢谢!
发布于 2018-07-17 09:08:34
我遇到了同样的问题,以下是我的解决方案:
通过使用load_svmlight_file函数,您可以指定offset和length参数。来自文档
偏移量:整数,可选,默认为0
length:整数,可选,默认-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 somethinghttps://stackoverflow.com/questions/45141637
复制相似问题