我有一个非常大的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可以使用,但找不到任何稀疏表示法。
这可行吗?如果是这样,该如何进行?