2

我使用 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 功能有什么建议吗?

非常感谢!

4

1 回答 1

3

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

scikit 人自己承认这load_svmlight_file并不像它应该的那样高效,并指向另一个用 c++ 编写的库。

这个实现是用 Cython 编写的,速度相当快。然而,一个更快的 API 兼容加载器也可以在: https ://github.com/mblondel/svmlight-loader

于 2017-04-04T15:58:24.583 回答