Почему Dmatrix из xgboost так быстро загружает текстовые файлы svm

#python #scikit-learn #xgboost #svmlight

#python #scikit-learn #xgboost #svmlight

Вопрос:

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

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

 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?

Большое вам спасибо!

Ответ №1:

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

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

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

Комментарии:

1. есть ли какой-нибудь способ загрузить с помощью xgboost и получить X_train, y_train из DMatrix?