在庞大的数据框架上训练XGBoost模型,将其转换为稀疏模型

时间:2020-02-06 11:31:28

标签: python pyspark sparse-matrix xgboost

我有一个非常大的PySpark数据框,其中有〜5000列和〜1B行。我想在此数据集的顶部训练XGBoost模型。

我无法从数据中删除任何特征,因为已经对其进行了预处理,并且已根据需要选择了特征。

通常,当数据较小(几个GB)时,我通常将其转换为Pandas并像这样在其上面安装XGBoost模型。

df = spark_df.toPandas()

X = df[[x for x in df.columns if x != 'target']]
y = df['target']

dtrain = xgb.DMatrix(X,label=y)

watchlist  = [(dtrain,'train')]
num_round = 300
early_stopping_rounds=10

bst = xgb.train(param, dtrain, num_round, watchlist,early_stopping_rounds=early_stopping_rounds)

为了训练这个庞大的数据集,我正在考虑将数据集转换为稀疏表示形式(这会有所帮助,因为我的数据帧本质上是稀疏的-几乎所有列中的大多数行都为空)

我想使用我的数据集的稀疏表示来训练模型。但是数据是如此之大,以至于我无力承担toPandas()并将其转换为像CSR这样的稀疏表示形式。

我一直在寻找一种直接将spark_df转换为CSR或其他任何稀疏表示法的方法,XGBoost可以使用,但找不到任何稀疏表示法。

这可行吗?如果是这样,该如何进行?

0 个答案:

没有答案