为什么来自 xgboost 的 Dmatrix 加载 svm light 文本文件的速度如此之快

Why Dmatrix from xgboost loads svm light text files so fast

我正在使用 svm light 文件作为稀疏矩阵的存储。

一项测试表明,对于具有 570601944 个条目的 31700108x54070 矩阵

import xgboost as xgb
dtrain = xgb.DMatrix(train_file)

用了 21 秒,比

快多了
from sklearn.datasets import load_svmlight_file
x_train, y_train = load_svmlight_file(train_file)

用了 7 分钟。

在破解代码之前,有人可以帮我回答这个问题吗?

您对提升 load_svmlight_file 功能有什么建议吗?

非常感谢!

Xgboost 是用 c++ 编写的,并使用 ctypes 将其包装在 python 包中。 load_svmlight_file 的实现是用 cython 编写的,它采用 python 代码并将其转换为 c。理想情况下,cython 会产生完美的 c 代码,但有时它会产生比 c 程序员所做的更糟糕的代码。

scikit 人员自己承认 load_svmlight_file 效率不高,并指向另一个用 c++ 编写的库。

This implementation is written in Cython and is reasonably fast. However, a faster API-compatible loader is also available at: https://github.com/mblondel/svmlight-loader