У меня есть 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, но я не уверен в этом