Làm thế nào để dự đoán xác suất trong xgboost?


16

Hàm dự đoán dưới đây cũng đưa ra các giá trị -ve để nó không thể là xác suất.

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)

Tôi google và đã thử pred_s <- predict(bst, x_mat_s2,type="response") nhưng nó không hoạt động.

Câu hỏi

Làm thế nào để dự đoán xác suất thay thế?


Nó không xuất ra xác suất theo mặc định với các cài đặt bạn đã sử dụng? Ý tôi là: bạn đã kiểm tra pre_s và bạn có chắc chắn đó không phải là xác suất không?
kpb

Không có giá trị âm của nó. Xác suất nên thay đổi trong khoảng từ 0 đến 1.
GeorgeOfTheRF

Tôi không thấy bất kỳ vấn đề rõ ràng. (Mặc dù, tôi quen thuộc hơn với trình bao bọc python). Bạn đã thử thêm outputmargin=Fvào predictchức năng? Nếu bằng cách nào đó, outputmarginđược đặt thành T, nó sẽ trả về giá trị trước khi chuyển đổi logistic.
đảo ngược

1
Đối với Python, bạn có thể sao chép predict_probatriển khai từ sklearnAPI: github.com/dmlc/xgboost/blob/master/python-package/xgboost/ trộm
Anton Tarasenko

Câu trả lời:


14

Biết tôi hơi muộn, nhưng để có được xác suất từ xgboostbạn nên chỉ định multi:softmaxmục tiêu như thế này:

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

Từ ?xgb.train:

multi: softprob giống như softmax, nhưng xuất ra một vectơ ndata * n class, có thể được định hình lại thành ndata, ma trận lớp. Kết quả chứa xác suất dự đoán của từng điểm dữ liệu thuộc về mỗi lớp.


2
Cảm ơn. Hàm mất này khác với nhị phân như thế nào: logistic để phân loại nhị phân?
GeorgeOfTheRF

3
Nó chỉ là một khái quát của chức năng logistic cho trường hợp nhiều lớp, nên không có sự khác biệt đáng kể.
cyberj0g

14

Chỉ cần sử dụng predict_probathay vì predict. Bạn có thể để lại mục tiêu như binary:logistic.


3
Nếu đây là Python và không phải R, thì câu trả lời này có thể hợp lý. Sai ngôn ngữ.
B_Miner

1
Giáo sư! cảm ơn @B_Miner. Tôi không xóa câu trả lời này vì nó có thể hữu ích cho những người khác cũng mắc lỗi tương tự và nghĩ rằng chúng ta đang nói về con trăn ..
ihadanny

Đối với tôi, điều này không thực hiện thủ thuật datascience.stackexchange.com/questions/14527/iêu
Georg Heiler

4
xgboost không có chức năng dự đoán
Ashoka Lella


0

sau dự đoán

pred_s <- predict(bst, x_mat_s2)

bạn có thể có được xác suất bằng cách

pred_s$data

Nếu đây là một phân loại nhị phân thì pred_s$data bao gồm prob.0, prob.1, hồi đáp.

Vì vậy, bạn có thể nhận được prob.1 bằng cách

pred_s$data$prob.1
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.