xgboostの確率を予測する方法は?


16

以下の予測関数は-ve値も提供しているため、確率にはなりません。

param <- list(max.depth = 5, eta = 0.01,  objective="binary:logistic",subsample=0.9)
bst <- xgboost(param, data = x_mat, label = y_mat,nround = 3000)

pred_s <- predict(bst, x_mat_s2)

グーグルで試しましたpred_s <- predict(bst, x_mat_s2,type="response") が、うまくいきませんでした。

質問

代わりに確率を予測する方法は?


使用した設定でデフォルトで確率を出力しませんか?つまり、pred_sを調べましたが、これらは確率ではないことは確かです。
kpb

負の値はありません。確率は
0〜1の

明らかな問題は見当たりません。(ただし、私はpythonラッパーに精通しています)。関数に追加outputmargin=Fしてみましたpredictか?何とか場合outputmarginに設定されているT、それはロジスティック変換前の値を返します。
反転

1
Pythonのためには、コピーすることができますpredict_probaから実装をsklearnAPI:github.com/dmlc/xgboost/blob/master/python-package/xgboost/...
アントンタラセンコ

回答:


14

私は少し遅れていることを知っていますが、xgboostあなたから確率を得るには、multi:softmaxこのように客観的に指定する必要があります

xgboost(param, data = x_mat, label = y_mat,nround = 3000, objective='multi:softprob')

から?xgb.train

multi:softprobは、softmaxと同じですが、ndata * nclassのベクトルを出力します。これは、ndata、nclass行列にさらに整形できます。結果には、各クラスに属する各データポイントの予測確率が含まれます。


2
ありがとう。この損失関数は、バイナリ分類のbinary:logisticとどう違いますか?
GeorgeOfTheRF

3
これは、マルチクラスの場合のロジスティック関数の一般化であり、大きな違いはありません。
cyberj0g

14

predict_proba代わりに使用しますpredict。目標はとして残すことができbinary:logisticます。


3
これがRではなくPythonである場合、この答えは賢明かもしれません。間違った言語。
B_Miner

1
おっとっと!ありがとう@B_Miner。私はそれは同じミスを犯し、我々はpythonの話をしていると思われます他人のために役立つかもしれないとしてこの回答を削除いないよ...
ihadanny

私にとっては、これはトリックを行い
ゲオルク

4
xgboostはpredict_proba機能を持っていません
アショカLella

1
XGBoost Classifierにはpredict_probaオプションがありますxgboost.readthedocs.io/en/latest/python/python_api.html
ポールベンデビス

0

予測後

pred_s <- predict(bst, x_mat_s2)

あなたは確率を得ることができます

pred_s$data

これがバイナリ分類の場合pred_s$data、prob.0、prob.1、応答が含まれます。

したがって、prob.1を取得するには

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