Pandas Dataframe à DMatrix

14

J'essaie d'exécuter xgboost dans scikit learn. Et j'utilise uniquement des Pandas pour charger des données dans la trame de données. Comment suis-je censé utiliser pandas df avec xgboost. Je suis confus par la routine DMatrix requise pour exécuter xgboost algo.

Ghostintheshell
la source

Réponses:

21

Vous pouvez utiliser le cadre de données .values méthode pour accéder aux données brutes une fois que vous avez manipulé les colonnes selon vos besoins.

Par exemple

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)

De toute évidence, vous devrez peut-être modifier les colonnes que vous supprimez ou utilisez comme cible d'entraînement. Ce qui précède était pour une compétition Kaggle, donc il n'y avait pas de données cibles pour xgtest(elles sont retenues par les organisateurs).

Neil Slater
la source
En essayant de cette façon, xgb.DMatrix(X_train.values, y_train.values)je voisTypeError: can not initialize DMatrix from dict
javadba
@javadba: Cela a définitivement fonctionné en 2016 sur mon mcahine! Je ne peux pas tester cela pour le moment car je ne peux pas installer xgboost. Il est possible qu'un code de bibliothèque ait changé. Il est plus probable que votre situation soit différente. J'ai trouvé stackoverflow.com/questions/35402461/… mais cela vous conseille simplement de faire exactement ce que fait cette réponse (c'est-à-dire utiliser .values)
Neil Slater
7

Vous pouvez désormais utiliser Pandas DataFrames directement avec XGBoost. Fonctionne certainement avec xgboost 0.81.

Par exemple, où X_train, X_val, y_train et y_val sont des DataFrames:

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
la source