2016-10-10 23 views
1

我使用svm light文件作爲稀疏矩陣的存儲。爲什麼來自xgboost的dmatrix加載svm輕型文本文件如此之快

的測試表明,對於31700108x54070矩陣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函數嗎?

非常感謝!

回答

2

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

相關問題