背景描述
最近我正在做一个机器学习商场商铺定位问题,其中设计到商铺的wifi特征,在经过特征工程后的训练数据描述大概为20000+样本,特征10000+个。其中除了两个特征类型为float以外,其余全是0,1特征。在传统python做法下我们将传入ndarray矩阵到xgboost的DMatrix数据类型中进行训练。问题就来了:由于有float类型数据的存在,训练集的ndarray会变为float数据类型。从而导致:
1. 训练数据内存变大,普通4G内存电脑无法训练。
2. xgboost训练极其缓慢。
为了解决这个问题,加快xgboost的训练,我们必须得把训练数据转成稀疏矩阵储存。我们讲利用到scipy下的sparse模块生成稀疏矩阵。但是网上少有如何讲xgboost如何传入sparse矩阵进行训练,我唯一找到一篇说明xgboost支持scipy的sparse矩阵的是这一篇。在经历了众多坑后,我总算找到xgboost如何导入sparse矩阵进行训练。下面将其方法分享给大家。
利用scipy.sparse生成稀疏数据集
scipy.sparse中的稀疏矩阵介绍
scipy.sparse中定义了7个稀疏矩阵的类,分别是bst_matrix,coo_matr