8

Python で xgboost 分類子を作成しました。

train は、10 万行と 50 個の機能を列として持つ pandas データフレームです。対象はパンダシリーズ

xgb_classifier = xgb.XGBClassifier(nthread=-1, max_depth=3, silent=0, 
                                   objective='reg:linear', n_estimators=100)
xgb_classifier = xgb_classifier.fit(train, target)

predictions = xgb_classifier.predict(test)

ただし、トレーニング後、この分類器を使用して値を予測すると、結果配列全体が同じ数値になります。なぜこれが起こっているのでしょうか?

データの明確化: ~50 の数値的特徴と数値目標

RandomForestRegressor同じデータを使用して sklearn からも試してみましたが、現実的な予測が得られます。おそらく xgboost 実装の正当なバグでしょうか?

4

9 に答える 9

3

同じ理由の 1 つは、パラメーター ガンマによって高いペナルティを提供していることです。トレーニング応答変数の平均値を比較し、予測がこれに近いかどうかを確認します。はいの場合、train-rmse と val-rmse をできるだけ近づけるために、モデルが予測を制限しすぎています。あなたの予測は、ガンマの値が高い場合に最も単純です。したがって、予測または単純な予測として設定されたトレーニングの平均のような最も単純なモデル予測が得られます。

于 2017-06-30T11:17:36.730 に答える
0

実際の調査のために、再現可能な例を投稿する必要があります。応答ターゲットが非常に不均衡であり、トレーニング データが十分に予測できない可能性が非常に高いため、常に (またはほぼ常に) 1 つのクラスが予測されます。分散があるかどうかを確認するために、予測された確率をまったく調べましたか? 分類ラベルに適切なカットオフを使用していないだけの問題ですか?

RF が妥当な予測をすると言ったので、そのためのトレーニング パラメータを確認すると便利です。一見すると、xgboost 呼び出しで回帰目的関数を使用している理由が不思議です。これが、パフォーマンスが低下している理由である可能性があります。目標を次のように変更しようとしています: 'binary:logistic

于 2016-01-09T17:27:04.680 に答える
0

max_depth =3 が小さすぎないか、大きくしてみてください。私の記憶が正しければ、デフォルト値は 7 です。サイレントを1に設定すると、各エポックのエラーを監視できます

于 2015-11-05T08:24:51.700 に答える