我有一个以 csv 格式保存的约 30GB(约 1.7 GB 压缩 | 180K 行 x 32K 列)矩阵。我想将此矩阵转换为稀疏格式,以便能够将完整数据集加载到内存中,以便使用 sklearn 进行机器学习。填充的单元格包含小于 1 的 float 。大矩阵的一个警告是目标变量存储为最后一列。在 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,这是比文本文件更好的存储这种规模的数字的方法。
关于python - 将大型 csv 转换为稀疏矩阵以在 sklearn 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61757726/