Pandas Dataframe do DMatrix

14

Próbuję uruchomić xgboost w scikit learn. I używam tylko Pand do ładowania danych do ramki danych. Jak mam używać pand df z xgboost. Jestem zdezorientowany procedurą DMatrix wymaganą do uruchomienia xgboost algo.

Ghostintheshell
źródło

Odpowiedzi:

21

Możesz użyć metody ramki .valuesdanych, aby uzyskać dostęp do nieprzetworzonych danych po zmanipulowaniu kolumn według potrzeb.

Na przykład

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)

Oczywiście może zaistnieć potrzeba zmiany upuszczonych kolumn lub wykorzystania ich jako celu treningowego. Powyższe dotyczyło zawodów Kaggle, więc nie było danych docelowych dla xgtest(są wstrzymywane przez organizatorów).

Neil Slater
źródło
Próbując w ten sposób xgb.DMatrix(X_train.values, y_train.values), widzęTypeError: can not initialize DMatrix from dict
javadba
@javadba: Na pewno zadziałało w 2016 roku na mojej maszynie! Obecnie nie mogę tego przetestować, ponieważ nie mogę zainstalować xgboost. Możliwe, że zmienił się kod biblioteki. Bardziej prawdopodobne jest, że w twojej sytuacji jest coś innego. Znalazłem stackoverflow.com/questions/35402461/…, ale to po prostu radzi ci zrobić dokładnie to, co robi ta odpowiedź (tj. Użyć .values)
Neil Slater
7

Możesz teraz używać Pandas DataFrames bezpośrednio z XGBoost. Zdecydowanie działa z xgboost 0.81.

Na przykład gdzie X_train, X_val, y_train i y_val to 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
źródło