如何预测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之间变化
。– GeorgeOfTheRF

我看不到任何明显的问题。(尽管,我对python包装器更加熟悉)。您是否尝试过加入outputmargin=Fpredict功能?如果以某种方式将outputmargin设置为T,它将在逻辑转换之前返回该值。
反演

1
对于Python,您可以复制predict_proba的执行sklearn:API github.com/dmlc/xgboost/blob/master/python-package/xgboost/...
安东·塔拉先科

Answers:


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
如果这是Python而不是R,那么这个答案可能是明智的。语言错误。
B_Miner '16

1
哎呀!谢谢@B_Miner。我不会删除此答案,因为这可能会对其他也会犯同样错误并认为我们在谈论python的人有所帮助
。– ihadanny


4
xgboost没有predict_proba函数
Ashoka Lella

1
XGBoost分类器确实有一个predict_proba选项xgboost.readthedocs.io/en/latest/python/python_api.html
Paul Bendevis

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.