我正在尝试使用python中的xgboost训练渐变树提升模型。对于我的应用程序,我构建数据批处理以“动态”提供模型。现在代码太慢了,瓶颈似乎是scipy.sparse到dmatrix的转换:
type(sparse_batch[0]) #scipy.sparse.csr.csr_matrix
sparse_batch[0].shape #(1035500, 317)
%%timeit -n1 -r1
xgb.DMatrix(sparse_batch[0], feature_names=model_features)
1 loop, best of 1: 1min 31s per loop
与numpy.ndarray矩阵相同的操作似乎非常快:
type(dense_batch[0]) #numpy.ndarray
dense_batch[0].shape #(1035500, 317)
%%timeit -n1 -r1
xgb.DMatrix(dense_batch[0], feature_names=model_features)
1 loop, best of 1: 8.08 s per loop
我想知道为什么会发生这种情况,我能做些什么来使稀疏转换更快?不幸的是,我不能总是从密集数组初始化,因为有时候批处理不适合内存。