Pandas Dataframe zu DMatrix

12

Ich versuche xgboost in scikit learn auszuführen. Und ich benutze Pandas nur, um Daten in den Datenrahmen zu laden. Wie soll ich pandas df mit xgboost verwenden? Ich bin verwirrt von der DMatrix-Routine, die zum Ausführen von xgboost algo erforderlich ist.

Geist in der Muschel
quelle

Antworten:

19

Sie können die .valuesMethode des Datenrahmens verwenden, um auf Rohdaten zuzugreifen, nachdem Sie die Spalten nach Bedarf bearbeitet haben.

Z.B

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)

Natürlich müssen Sie möglicherweise ändern, welche Spalten Sie löschen oder als Trainingsziel verwenden. Das Obige war für einen Kaggle-Wettbewerb, daher gab es keine Zieldaten für xgtest(es wird von den Organisatoren zurückgehalten).

Neil Slater
quelle
Wenn xgb.DMatrix(X_train.values, y_train.values)ich es so versuche, sehe ichTypeError: can not initialize DMatrix from dict
javadba
@javadba: Es hat definitiv 2016 auf meinem Mcahine funktioniert! Ich kann dies momentan nicht testen, da ich xgboost nicht installieren kann. Möglicherweise hat sich ein Bibliothekscode geändert. Wahrscheinlicher ist, dass Ihre Situation etwas anderes ist. Ich habe stackoverflow.com/questions/35402461/… gefunden, aber das rät Ihnen einfach, genau das zu tun, was diese Antwort bewirkt (dh verwendet .values)
Neil Slater
7

Sie können Pandas DataFrames jetzt direkt mit XGBoost verwenden. Funktioniert definitiv mit xgboost 0.81.

Beispiel: X_train, X_val, y_train und y_val sind 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
quelle