将大型 csv 转换为稀疏矩阵以用于 sklearn

Convert large csv to sparse matrix for use in sklearn

我有一个以 csv 格式保存的 ~30GB(~1.7GB 压缩 | 180K 行 x 32K 列)矩阵。我想将此矩阵转换为稀疏格式,以便能够将完整数据集加载到内存中,以便使用 sklearn 进行机器学习。填充的单元格包含小于 1 的浮点数。大矩阵的一个警告是目标变量存储为最后一列。允许在 sklearn 中使用这个大矩阵的最佳方法是什么? IE。 如何在不将原始矩阵加载到内存的情况下将 ~30GB csv 转换为 scipy 稀疏格式?

伪代码

  1. 删除目标变量(保持顺序不变)
  2. 将约 30 GB 的矩阵转换为稀疏格式(帮助!!
  3. 将稀疏格式加载到内存中并将目标变量加载到 运行 机器学习管道(我该怎么做?)

您可以很容易地在内存中按行构建稀疏矩阵:

import numpy as np
import scipy.sparse as sps

input_file_name = "something.csv"
sep = "\t"

def _process_data(row_array):
    return row_array

sp_data = []
with open(input_file_name) as csv_file:
    for row in csv_file:
        data = np.fromstring(row, sep=sep)
        data = _process_data(data)
        data = sps.coo_matrix(data)
        sp_data.append(data)


sp_data = sps.vstack(sp_data)

这将更容易写入 hdf5,这是一种比文本文件更好的存储这种规模数字的方式。