2016-10-10 4 views
1

私はsvmライトファイルをスパース行列のストレージとして使用しています。xgboostのDmatrixがsvmライトテキストファイルを高速でロードする理由

試験は570601944のエントリ

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

は7minutesを使用するよりもずっと速く

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

使用21secondsと31700108x54070マトリックスのためすることを示しています。

コードをハッキングする前に、誰でも私にこれに答えるのを助けることができますか?

load_svmlight_file関数を強化するための提案はありますか?

ありがとうございました!

答えて

2

XgboostはC++で書かれており、ctypesを使ってpythonパッケージにラップします。 load_svmlight_fileの実装はcythonで書かれています。これはPythonコードを受け取り、それをcに変換します。理想的には、cythonは完全なcコードを生成しますが、時にはcプログラマが行うよりも悪いコードを生成することがあります。

load_svmlight_fileは、それが可能な限り効率的ではなく、C++で書かれた別のライブラリを指し示していることを認識しています。

この実装はCythonで書かれており、合理的に高速です。ただし、より高速なAP​​I互換ローダーは、次のサイトからも入手できます。 https://github.com/mblondel/svmlight-loader

関連する問題