2017-10-25 68 views
5

私はPythonでXGBoostを使用しており、DMatrixというデータで呼び出されるXGBoost train()関数を使用してモデルを正常に訓練しました。行列は、列のフィーチャー名を持つPandasデータフレームから作成されました。XGBoost plot_importanceにフィーチャー名が表示されない

Xtrain, Xval, ytrain, yval = train_test_split(df[feature_names], y, \ 
            test_size=0.2, random_state=42) 
dtrain = xgb.DMatrix(Xtrain, label=ytrain) 

model = xgb.train(xgb_params, dtrain, num_boost_round=60, \ 
        early_stopping_rounds=50, maximize=False, verbose_eval=10) 

fig, ax = plt.subplots(1,1,figsize=(10,10)) 
xgb.plot_importance(model, max_num_features=5, ax=ax) 

私は今xgboost.plot_importance()機能を使用して機能の重要性を確認したいのですが、結果のプロットは、機能名が表示されません。代わりに、以下に示すように、機能はf1,f2,f3などのようにリストされています。

enter image description here

私はこの問題は、私がDMatrixに私のオリジナルパンダのデータフレームを変換していることだと思います。フィーチャ名を適切に関連付けて、フィーチャ重要度プロットに表示させるにはどうすればよいですか?

答えて

5

あなたxgb.DMatrix

dtrain = xgb.DMatrix(Xtrain, label=ytrain, feature_names=feature_names) 
2

train_test_splitを作成することは、もはや列情報を持っていけないnumpyの配列にデータフレームを変換する際にfeature_namesパラメータを使用します。

@piRSquaredが示唆したことを行い、その機能をパラメータとしてDMatrixコンストラクタに渡すことができます。または、train_test_splitから返されたnumpy配列をDataframeに変換してからコードを使用することができます。

Xtrain, Xval, ytrain, yval = train_test_split(df[feature_names], y, \ 
            test_size=0.2, random_state=42) 

# See below two lines 
X_train = pd.DataFrame(data=Xtrain, columns=feature_names) 
Xval = pd.DataFrame(data=Xval, columns=feature_names) 

dtrain = xgb.DMatrix(Xtrain, label=ytrain) 
関連する問題