#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?