将大型 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 稀疏格式?
伪代码
- 删除目标变量(保持顺序不变)
- 将约 30 GB 的矩阵转换为稀疏格式(帮助!!)
- 将稀疏格式加载到内存中并将目标变量加载到 运行 机器学习管道(我该怎么做?)
您可以很容易地在内存中按行构建稀疏矩阵:
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,这是一种比文本文件更好的存储这种规模数字的方式。
我有一个以 csv 格式保存的 ~30GB(~1.7GB 压缩 | 180K 行 x 32K 列)矩阵。我想将此矩阵转换为稀疏格式,以便能够将完整数据集加载到内存中,以便使用 sklearn 进行机器学习。填充的单元格包含小于 1 的浮点数。大矩阵的一个警告是目标变量存储为最后一列。允许在 sklearn 中使用这个大矩阵的最佳方法是什么? IE。 如何在不将原始矩阵加载到内存的情况下将 ~30GB csv 转换为 scipy 稀疏格式?
伪代码
- 删除目标变量(保持顺序不变)
- 将约 30 GB 的矩阵转换为稀疏格式(帮助!!)
- 将稀疏格式加载到内存中并将目标变量加载到 运行 机器学习管道(我该怎么做?)
您可以很容易地在内存中按行构建稀疏矩阵:
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,这是一种比文本文件更好的存储这种规模数字的方式。