为什么来自 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
我正在使用 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