Как создать XGBoost DMatrix из pandas фрейма данных с полями типа Sparse [uint8, 0] - PullRequest
0 голосов
/ 14 января 2020

У меня есть pandas фрейм данных, из которого я хочу создать разделение теста поезда для обучения модели XGBoost. Проблема заключается в том, что в моем фрейме данных много полей типа Sparse [uint8, 0] . Это необходимо, потому что мне пришлось выполнить однократное кодирование для некоторых полей, что сделало бы кадр данных слишком большим, чтобы хранить его иначе. Это было сделано с помощью команды:

 df = pd.get_dummies(df, columns=['item_id', 'user_age', 'user_region'], sparse=True)

Сначала я разбил свой фрейм данных на данные / цель, а затем сгенерировал разделение поезда / теста следующим образом

 dfX = df.drop('target', axis=1) 
 dfY = df[['target']] 
 X_train, X_test, y_train, y_test = train_test_split(dfX, dfY, test_size=0.2, random_state=1)

X_train, X_test, y_train, y_test pandas dataframes, но когда я пытаюсь создать xgb.DMatrix's:

dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)

, я получаю следующую ошибку:

DataFrame.dtypes для данных должно быть int, float или бул. Не ожидал, что типы данных в полях item_id_0, item_id_1, ... user_age_9.0, user_age_10.0, user_region_0.0, user_region_2.0 ...

Так что XGboost выглядит так, как будто он не ' не знаю, как обрабатывать все мои поля, которые были результатом одного горячего кодирования, которое я выполнил ранее.

Как мне решить эту ошибку? Моя интуиция подсказывает мне, что я должен представлять свои фреймы данных в виде матриц csr, чтобы затем создавать из них DMatrix, но я не уверен в этом

...