2016-10-10 12 views
1

Я использую svm light файлы в качестве хранилища для разреженной матрицы.Почему Dmatrix от xgboost загружает текстовые файлы svm так быстро

тест показывает, что для 31700108x54070 матрицы с 570601944 записей

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

использовали 21seconds, намного быстрее, чем

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

используется 7минуты.

Перед тем, как взломать код, любой может помочь мне ответить на это?

У вас есть предложения по увеличению функции load_svmlight_file?

спасибо!

ответ

2

Xgboost написан на C++ и использует ctypes для обертывания этого пакета python. Реализация load_svmlight_file написана на cython, которая берет код python и переводит его в c. В идеале, cython создавал бы совершенный код c, однако иногда он будет создавать код хуже, чем программист c.

Люди scikit сами признают, что load_svmlight_file не так эффективен, как мог бы быть, и указывать на другую библиотеку, написанную на C++.

Эта реализация написана на Китоне и достаточно быстро. Однако более быстрый API-совместимый загрузчик также доступен по адресу: https://github.com/mblondel/svmlight-loader