python - 将大型 csv 转换为稀疏矩阵以在 sklearn 中使用

标签 python matrix scikit-learn sparse-matrix large-data

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

关于python - 将大型 csv 转换为稀疏矩阵以在 sklearn 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61757726/

相关文章:

python - 如何在Python中循环指定范围的列表中的参数?

javascript - 仅返回对象中的重复元素

python - scikit-learn 时间序列数据的交叉验证自定义拆分

python - 导入train_test_split时模块导入错误

python - 为什么线程不停止?

python - 最短的计数方式?

python - 什么是尾随空格,我该如何处理?

javascript - 使用 ng-repeat 的简单二维数组

opengl - 透视矩阵背后的数学原理

python - scikit-learn 和 caret GBM 结果之间的差异?