Pandas Dataframe для DMatrix

14

Я пытаюсь запустить xgboost в scikit learn. И я использую только Pandas для загрузки данных в dataframe. Как я должен использовать панд DF с xgboost. Меня смущает процедура DMatrix, необходимая для запуска алгоритма xgboost.

Призрак в доспехах
источник

Ответы:

21

Вы можете использовать метод dataframe .valuesдля доступа к необработанным данным, как только вы манипулируете столбцами так, как вам нужно.

Например

train = pd.read_csv("train.csv")
target = train['target']
train = train.drop(['ID','target'],axis=1)
test = pd.read_csv("test.csv")
test = test.drop(['ID'],axis=1)

xgtrain = xgb.DMatrix(train.values, target.values)
xgtest = xgb.DMatrix(test.values)

Очевидно, вам может понадобиться изменить столбцы, которые вы отбрасываете или используете в качестве цели обучения. Выше было для соревнования Kaggle, поэтому не было никаких целевых данных для xgtest(это сдерживается организаторами).

Нил Слэйтер
источник
При попытке таким образом xgb.DMatrix(X_train.values, y_train.values)я вижуTypeError: can not initialize DMatrix from dict
Джавадба
@javadba: Это определенно сработало в 2016 году на моей машине! Я не могу проверить это в данный момент, так как я не могу установить xgboost. Возможно, какой-то библиотечный код изменился. Скорее всего, в вашей ситуации есть что-то другое. Я нашел stackoverflow.com/questions/35402461/… но это просто советует вам делать именно то, что делает этот ответ (то есть использовать .values)
Нил Слейтер
7

Теперь вы можете использовать Pandas DataFrames напрямую с XGBoost. Определенно работает с xgboost 0.81.

Например, где X_train, X_val, y_train и y_val являются кадрами данных:

import xgboost as xgb

mod = xgb.XGBRegressor(
    gamma=1,                 
    learning_rate=0.01,
    max_depth=3,
    n_estimators=10000,                                                                    
    subsample=0.8,
    random_state=34
) 

mod.fit(X_train, y_train)
predictions = mod.predict(X_val)
rmse = sqrt(mean_squared_error(y_val, predictions))
print("score: {0:,.0f}".format(rmse))
jeffhale
источник