У меня очень большой фрейм данных PySpark с ~ 5000 столбцами и ~ 1B строк. Я хочу обучить модель XGBoost поверх этого набора данных.
Я не могу удалить какие-либо функции из данных, так как они уже предварительно обработаны и функции выбираются по мере необходимости.
Обычно, когда данные небольшие (пара ГБ), я конвертировал их в 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, но не может его найти.
Это выполнимо? Если так, как продолжить это?