Có ai biết cách gbm
trong R
xử lý các giá trị bị thiếu không? Tôi không thể tìm thấy bất kỳ lời giải thích bằng cách sử dụng google.R gbm xử lý các giá trị bị thiếu
Trả lời
Để giải thích ý nghĩa của gbm với các dự đoán bị thiếu, trước tiên hãy hình dung một cây duy nhất của đối tượng gbm.
Giả sử bạn có mygbm đối tượng gbm. Sử dụng pretty.gbm.tree(mygbm, i.tree=1)
bạn có thể hình dung cây đầu tiên trên mygbm, ví dụ:
SplitVar SplitCodePred LeftNode RightNode MissingNode ErrorReduction Weight Prediction
0 46 1.629728e+01 1 5 9 26.462908 1585 -4.396393e-06
1 45 1.850000e+01 2 3 4 11.363868 939 -4.370936e-04
2 -1 2.602236e-04 -1 -1 -1 0.000000 271 2.602236e-04
3 -1 -7.199873e-04 -1 -1 -1 0.000000 668 -7.199873e-04
4 -1 -4.370936e-04 -1 -1 -1 0.000000 939 -4.370936e-04
5 20 0.000000e+00 6 7 8 8.638042 646 6.245552e-04
6 -1 3.533436e-04 -1 -1 -1 0.000000 483 3.533436e-04
7 -1 1.428207e-03 -1 -1 -1 0.000000 163 1.428207e-03
8 -1 6.245552e-04 -1 -1 -1 0.000000 646 6.245552e-04
9 -1 -4.396393e-06 -1 -1 -1 0.000000 1585 -4.396393e-06
Xem tài liệu gbm để biết chi tiết. Mỗi hàng tương ứng với một nút và cột đầu tiên (chưa đặt tên) là số nút. Chúng tôi thấy rằng mỗi nút có nút trái và phải (được đặt thành -1 trong trường hợp nút là một chiếc lá). Chúng tôi cũng thấy mỗi nút đã liên kết một số MissingNode
.
Để chạy quan sát xuống cây, chúng ta bắt đầu tại nút 0. Nếu quan sát có giá trị thiếu trên SplitVar
= 46, thì nó sẽ được gửi xuống cây tới nút MissingNode
= 9. Dự đoán của cây cho quan sát như vậy sẽ là SplitCodePred
= -4.396393e-06, đó là dự đoán tương tự mà cây đã có trước khi bất kỳ sự phân chia nào được thực hiện thành nút số không (Prediction
= -4.396393e-06 cho nút số không).
Quy trình tương tự cho các nút khác và biến phân tách.
Bắt đầu với mã nguồn sau đó. Chỉ cần gõ gbm
tại giao diện điều khiển cho bạn mã nguồn:
function (formula = formula(data), distribution = "bernoulli",
data = list(), weights, var.monotone = NULL, n.trees = 100,
interaction.depth = 1, n.minobsinnode = 10, shrinkage = 0.001,
bag.fraction = 0.5, train.fraction = 1, cv.folds = 0, keep.data = TRUE,
verbose = TRUE)
{
mf <- match.call(expand.dots = FALSE)
m <- match(c("formula", "data", "weights", "offset"), names(mf),
0)
mf <- mf[c(1, m)]
mf$drop.unused.levels <- TRUE
mf$na.action <- na.pass
mf[[1]] <- as.name("model.frame")
mf <- eval(mf, parent.frame())
Terms <- attr(mf, "terms")
y <- model.response(mf, "numeric")
w <- model.weights(mf)
offset <- model.offset(mf)
var.names <- attributes(Terms)$term.labels
x <- model.frame(terms(reformulate(var.names)), data, na.action = na.pass)
response.name <- as.character(formula[[2]])
if (is.character(distribution))
distribution <- list(name = distribution)
cv.error <- NULL
if (cv.folds > 1) {
if (distribution$name == "coxph")
i.train <- 1:floor(train.fraction * nrow(y))
else i.train <- 1:floor(train.fraction * length(y))
cv.group <- sample(rep(1:cv.folds, length = length(i.train)))
cv.error <- rep(0, n.trees)
for (i.cv in 1:cv.folds) {
if (verbose)
cat("CV:", i.cv, "\n")
i <- order(cv.group == i.cv)
gbm.obj <- gbm.fit(x[i.train, , drop = FALSE][i,
, drop = FALSE], y[i.train][i], offset = offset[i.train][i],
distribution = distribution, w = ifelse(w ==
NULL, NULL, w[i.train][i]), var.monotone = var.monotone,
n.trees = n.trees, interaction.depth = interaction.depth,
n.minobsinnode = n.minobsinnode, shrinkage = shrinkage,
bag.fraction = bag.fraction, train.fraction = mean(cv.group !=
i.cv), keep.data = FALSE, verbose = verbose,
var.names = var.names, response.name = response.name)
cv.error <- cv.error + gbm.obj$valid.error * sum(cv.group ==
i.cv)
}
cv.error <- cv.error/length(i.train)
}
gbm.obj <- gbm.fit(x, y, offset = offset, distribution = distribution,
w = w, var.monotone = var.monotone, n.trees = n.trees,
interaction.depth = interaction.depth, n.minobsinnode = n.minobsinnode,
shrinkage = shrinkage, bag.fraction = bag.fraction, train.fraction = train.fraction,
keep.data = keep.data, verbose = verbose, var.names = var.names,
response.name = response.name)
gbm.obj$Terms <- Terms
gbm.obj$cv.error <- cv.error
gbm.obj$cv.folds <- cv.folds
return(gbm.obj)
}
<environment: namespace:gbm>
Một đọc nhanh chóng cho thấy rằng các dữ liệu được đưa vào một khung mô hình và NA của được xử lý với na.pass
để đến lượt mình, ?na.pass
Reading đó, nó trông giống như nó không có gì đặc biệt với họ, nhưng có thể bạn sẽ phải đọc toàn bộ quá trình phù hợp để xem điều đó có nghĩa là gì về lâu dài. Có vẻ như bạn có thể cũng cần xem mã của gbm.fit
và cứ tiếp tục như vậy.
official guide để gbms giới thiệu các giá trị thiếu cho dữ liệu thử nghiệm, vì vậy tôi cho rằng chúng được mã hóa để xử lý các giá trị bị thiếu.
Dường như gửi các giá trị bị thiếu đến một nút riêng biệt trong mỗi cây. Nếu bạn có một đối tượng gbm được gọi là "mygbm" thì bạn sẽ thấy bằng cách nhập "pretty.gbm.tree (mygbm, i.tree = 1)" cho mỗi phần tách trong cây có một nút LeftNode là RightNode và MissingNode. Điều này ngụ ý rằng (giả sử bạn có tương tác.depth = 1) mỗi cây sẽ có 3 nút đầu cuối (1 cho mỗi bên của phân chia và một cho nơi dự đoán bị thiếu).
Gói gbm trong giao dịch cụ thể với NA (giá trị bị thiếu) như sau. Thuật toán hoạt động bằng cách xây dựng và kết hợp chặt chẽ các phân loại hoặc cây hồi quy. Cái gọi là cây học cơ sở được xây dựng bằng cách chia sẻ các quan sát thành các phần chia tách Trái và Phải (@ user2332165 là đúng). Ngoài ra còn có một loại nút riêng biệt của Thiếu trong gbm. Nếu hàng hoặc quan sát không có giá trị cho biến đó, thuật toán sẽ áp dụng phương thức tách thay thế.
Nếu bạn muốn hiểu chia tách thay thế tốt hơn, tôi khuyên bạn nên đọc package rpart vignette.
- 1. R-tạo "biến giá trị thiếu"
- 2. Xử lý các giá trị bị thiếu bằng không ở SAS trong đó khoản
- 3. Xử lý các nút bị thiếu với JAXB
- 4. R gbm hồi quy logistic
- 5. Giá trị thiếu giá trị bị lỗi với dấu mũ
- 6. Xử lý các giá trị thiếu cho phép tính tương quan
- 7. Làm cách nào để xóa một hàng chỉ chứa các giá trị bị thiếu trong R?
- 8. Bao gồm các giá trị bị thiếu trong bảng() dẫn đến R
- 9. Chọn các hàng không có giá trị bị thiếu trong R
- 10. pcolormesh có giá trị bị thiếu?
- 11. Xử lý thiếu sự kết hợp của các yếu tố trong R
- 12. Kết nối giữa các giá trị bị thiếu với geom_line
- 13. Default defaultdict không chèn các giá trị bị thiếu
- 14. Biểu đồ nhiều chuỗi (D3) có giá trị bị thiếu
- 15. xử lý dữ liệu bị thiếu trong Pandas
- 16. Dự đoán/mô phỏng các giá trị thiếu của một hồi quy Poisson GLM trong R?
- 17. Làm thế nào để thực hiện đại số boolean trên các giá trị bị thiếu?
- 18. Thêm giá trị bị thiếu trong cột có giá trị từ hàng trên
- 19. Xử lý "giá trị Request.Form nguy hiểm ..."
- 20. F #, tuần tự hóa các công đoàn bị phân biệt đối xử với các giá trị thiếu dữ liệu
- 21. Xử lý các giá trị null trong Freemarker
- 22. Giá trị bị thiếu từ form.fieldnames trong ColdFusion
- 23. Trong Java/Spring, làm thế nào để xử lý một cách duyên dáng các giá trị dịch còn thiếu?
- 24. Làm cách nào để xử lý một đối số bắt buộc bị thiếu trong Ruby OptionParser?
- 25. phân cụm các giá trị NA trong R
- 26. MATLAB: Sử dụng phép nội suy để thay thế các giá trị bị thiếu (NaN)
- 27. Thanh lịch xử lý các giá trị trống trong một giá trị băm lồng nhau
- 28. Cách chuyển đổi ngày chuỗi ký tự thành lớp ngày nếu giá trị ngày bị thiếu
- 29. R: Tìm các cột bị thiếu, thêm vào khung dữ liệu nếu thiếu
- 30. Tìm các cột có tất cả các giá trị bị thiếu
Chính xác bạn đang tìm kiếm chi tiết nào? Trang trợ giúp cho '? Gbm' cho thấy rằng nó có thể xử lý các giá trị bị thiếu. Bạn có muốn biết cái gì khác hoặc bổ sung? –
@BryanHanson: Tôi biết nó có thể xử lý chúng, tôi chỉ tìm kiếm giải thích về cách nó được thực hiện. – screechOwl