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

명백한 문제가 없습니다. (하지만 파이썬 래퍼에 더 익숙합니다). 당신은 추가 시도 outputmargin=F받는 predict기능? 가로 outputmargin설정 T되면 로지스틱 변환 전에 값을 반환합니다.
역전

1
Python의 경우 API predict_proba에서 구현을 복사 할 수 있습니다 sklearn. github.com/dmlc/xgboost/blob/master/python-package/xgboost/…
Anton Tarasenko

답변:


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에게 감사합니다. 같은 실수를하고 우리가 파이썬에 대해 이야기하고 있다고 생각하는 다른 사람들에게 도움이 될 수
있으므로이

나를 위해 이것은 트릭을 수행하지 않습니다 datascience.stackexchange.com/questions/14527/…
Georg Heiler

4
xgboost는 predict_proba 함수를 가지고 있지 않습니다
Ashoka Lella

1
XGBoost 분류는 않는 predict_proba 옵션이 xgboost.readthedocs.io/en/latest/python/python_api.html을
폴 Bendevis에게

0

예측 후

pred_s <- predict(bst, x_mat_s2)

당신은 확률을 얻을 수 있습니다

pred_s$data

이것이 이진 분류 인 경우 pred_s$dataprob.0, prob.1, response를 포함합니다.

그래서 당신은에 의해 prob.1을 얻을 수 있습니다

pred_s$data$prob.1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.