PandasデータフレームからDMatrix


14

xgboostをscikit learnで実行しようとしています。そして、私はパンダを使用してデータをデータフレームにロードします。xgboostでpandas dfを使用する方法 xgboostアルゴを実行するために必要なDMatrixルーチンに混乱しています。

回答:


21

.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

@javadba:それは間違いなく2016年に私のmcahineで機能しました!xgboostをインストールできないため、現時点ではテストできません。一部のライブラリコードが変更された可能性があります。多くの場合、あなたの状況について何か違うものがあります。私が見つかりました。stackoverflow.com/questions/35402461/...をしかし、それは単にあなたがこの答えが何をするか(すなわち使用を正確に行うために助言.values
ニール・スレーター


7

XGBoostでPandas DataFramesを直接使用できるようになりました。間違いなくxgboost 0.81で動作します。

たとえば、X_train、X_val、y_train、y_valがDataFrameである場合:

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))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.