我遇到了同样的问题,这是我的解决方案:
使用load_svmlight_file
scikitlearn 中的函数,您可以指定offset
和length
参数。从文档:
偏移量:整数,可选,默认 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