2015-11-04 15 views
7

Ai đó có thể giải thích cách cột Cover trong gói xgboost R được tính theo hàm xgb.model.dt.tree?Bảng tính xgboost được tính như thế nào?

Trong tài liệu, nó nói rằng Bìa "là số liệu để đo số quan sát bị ảnh hưởng bởi việc chia tách".

Khi bạn chạy mã sau, được đưa ra trong tài liệu xgboost cho hàm này, Cover cho nút 0 của cây 0 là 1628.2500.

data(agaricus.train, package='xgboost') 

#Both dataset are list with two items, a sparse matrix and labels 
#(labels = outcome column which will be learned). 
#Each column of the sparse Matrix is a feature in one hot encoding format. 
train <- agaricus.train 

bst <- xgboost(data = train$data, label = train$label, max.depth = 2, 
       eta = 1, nthread = 2, nround = 2,objective = "binary:logistic") 

#[email protected][[2]] represents the column names of the sparse matrix. 
xgb.model.dt.tree([email protected][[2]], model = bst) 

Có 6513 quan sát trong tập dữ liệu đào tạo, vì vậy bất cứ ai có thể giải thích tại sao Cover cho nút 0 cây 0 là một phần tư số này (1628,25)?

Ngoài ra, Cover cho nút 1 của cây 1 là 788.852 - số này được tính như thế nào?

Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn.

Trả lời

12

Bìa được định nghĩa trong xgboost như:

tổng của độ dốc bậc hai của dữ liệu huấn luyện được phân loại vào lá , nếu nó là sự mất mát vuông, điều này chỉ đơn giản tương ứng với số lượng trường hợp trong chi nhánh . Sâu trong cây một nút là, giảm số liệu này sẽ

https://github.com/dmlc/xgboost/blob/f5659e17d5200bd7471a2e735177a81cb8d3012b/R-package/man/xgb.plot.tree.Rd Không đặc biệt là tài liệu tốt ....

Để tính bìa, chúng ta cần phải biết những dự đoán ở đó điểm trong cây, và đạo hàm bậc 2 liên quan đến hàm mất mát.

May mắn cho chúng tôi, dự đoán cho mọi điểm dữ liệu (6513 trong số họ) trong nút 0-0 trong ví dụ của bạn là 0,5. Đây là cài đặt mặc định chung, theo đó dự đoán đầu tiên của bạn tại t = 0 là 0,5.

base_score [default = 0,5] số điểm dự đoán ban đầu của tất cả các trường, toàn cầu bias

http://xgboost.readthedocs.org/en/latest/parameter.html

Các gradient của logistic nhị phân (đó là hàm mục tiêu của bạn) là py, nơi p = dự đoán của bạn và y = true label.

Do đó, hessian (mà chúng tôi cần cho điều này) là p * (1-p). Lưu ý: Hessian có thể được xác định mà không cần y, các nhãn thực sự.

Vì vậy, (mang nó về nhà):

6513 * (.5) * (1 - .5) = 1628,25

Trong cây thứ hai, các dự đoán tại thời điểm đó không còn tất cả.5, sp cho phép có được những dự đoán sau khi một cây

p = predict(bst,newdata = train$data, ntree=1) 

head(p) 
[1] 0.8471184 0.1544077 0.1544077 0.8471184 0.1255700 0.1544077 

sum(p*(1-p)) # sum of the hessians in that node,(root node has all data) 
[1] 788.8521 

Lưu ý, đối với tuyến tính (lỗi bình phương) hồi quy các bao bố luôn là một, vì vậy trang bìa biết có bao nhiêu ví dụ là trong lá đó.

Điểm nổi bật lớn nhất là trang bìa được xác định bởi hàm hessian của hàm mục tiêu. Rất nhiều thông tin ngoài kia về mặt gradient và hessian của hàm logistic nhị phân.

Những trang trình bày này hữu ích khi xem lý do tại sao anh ấy sử dụng hessians làm trọng số và cũng giải thích cách phân tách xgboost khác với cây tiêu chuẩn. https://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf

+0

Giải thích tuyệt vời. Cảm ơn bạn – dataShrimp

+0

Ngoài ra, tôi không cho rằng bạn có thể làm sáng tỏ một số câu hỏi này? http://stackoverflow.com/questions/33654479/how-is-xgboost-quality-calculated – dataShrimp

+0

@dtfoster Tôi đã chơi xung quanh với câu hỏi khác - chưa bẻ khóa được ... Có một số trọng số nhỏ sẽ trên mui xe có một số khác biệt nhỏ từ trang trình bày của anh ấy –

Các vấn đề liên quan