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.

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).


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))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.