Scikit-learn的dump_svmlight_file慢


将一个

包含大约 500 万个非零元素的 10,000 x 40,000 CSR 矩阵转储到/dev/null 中大约需要 6 分钟。有没有更快的选择?

将其转换为另一种稀疏格式无济于事。

目前的实现在 0.14 中非常幼稚。您可以尝试使用line_profiler对其进行分析以找到主要瓶颈。

如果您找到一种更快的实现方法(可以选择使用 cython 作为加载器),那么请随时打开拉取请求。

如果您升级到scikit-learn的前沿开发版本(或将此文件复制粘贴到您的安装中),您将获得比以前快十倍的dump_svmlight_file

编辑:忽略以下答案!实际上有一个基于Cython的dumper,由scikit-learn实现的作者提供。它可以在 3 秒内转储相同的矩阵。

以下内容在 60 秒内运行,其中 6 秒在循环之外运行。它利用了 COO 矩阵基本上已经采用正确格式的事实。

def dump_svmlight_file_sparse(X, y, f, zero_based=True):
    X = X.sorted_indices().tocoo()
    if not zero_based:
        X.col += 1
    y = y.astype(int).astype(str)
    col = X.col.astype(str)
    dat = X.data.astype(str)
    last_row = 0
    f.write(y[0])
    for i in xrange(len(X.data)):
        while last_row < X.row[i]:
            last_row += 1
            f.write('n'+y[last_row])
        f.write(' '+col[i]+':'+dat[i])
    f.write('n')

相关内容

  • 没有找到相关文章