Tôi đang cố gắng hiểu cách Random Forest hoạt động. Tôi có một nắm bắt về cách cây được xây dựng nhưng không thể hiểu làm thế nào Rừng ngẫu nhiên đưa ra dự đoán về mẫu túi. Bất cứ ai có thể cho tôi một lời giải thích đơn giản, xin vui lòng? :)
Tôi đang cố gắng hiểu cách Random Forest hoạt động. Tôi có một nắm bắt về cách cây được xây dựng nhưng không thể hiểu làm thế nào Rừng ngẫu nhiên đưa ra dự đoán về mẫu túi. Bất cứ ai có thể cho tôi một lời giải thích đơn giản, xin vui lòng? :)
Câu trả lời:
Mỗi cây trong rừng được xây dựng từ một mẫu bootstrap của các quan sát trong dữ liệu đào tạo của bạn. Những quan sát trong mẫu bootstrap xây dựng cây, trong khi những quan sát không có trong mẫu bootstrap tạo thành các mẫu ngoài túi (hoặc OOB).
Cần phải rõ ràng rằng các biến tương tự có sẵn cho các trường hợp trong dữ liệu được sử dụng để xây dựng cây như đối với các trường hợp trong mẫu OOB. Để có được các dự đoán cho mẫu OOB, mỗi cái được truyền xuống cây hiện tại và các quy tắc cho cây theo sau cho đến khi nó đến trong một nút cuối. Điều đó mang lại dự đoán OOB cho cây cụ thể đó.
Quá trình này được lặp đi lặp lại nhiều lần, mỗi cây được đào tạo trên một mẫu bootstrap mới từ dữ liệu huấn luyện và dự đoán cho các mẫu OOB mới thu được.
Khi số lượng cây tăng lên, bất kỳ một mẫu nào cũng sẽ nằm trong các mẫu OOB hơn một lần, do đó, "trung bình" của các dự đoán đối với các cây N trong đó một mẫu trong OOB được sử dụng làm dự đoán OOB cho mỗi mẫu đào tạo cho cây 1, ..., N. Bằng "trung bình", chúng tôi sử dụng giá trị trung bình của các dự đoán cho phản hồi liên tục hoặc phiếu bầu đa số có thể được sử dụng cho phản hồi phân loại (phiếu bầu đa số là lớp có hầu hết phiếu bầu trong tập hợp cây 1, ..., N).
Ví dụ: giả sử chúng tôi có các dự đoán OOB sau đây cho 10 mẫu trong tập huấn luyện trên 10 cây
set.seed(123)
oob.p <- matrix(rpois(100, lambda = 4), ncol = 10)
colnames(oob.p) <- paste0("tree", seq_len(ncol(oob.p)))
rownames(oob.p) <- paste0("samp", seq_len(nrow(oob.p)))
oob.p[sample(length(oob.p), 50)] <- NA
oob.p
> oob.p
tree1 tree2 tree3 tree4 tree5 tree6 tree7 tree8 tree9 tree10
samp1 NA NA 7 8 2 1 NA 5 3 2
samp2 6 NA 5 7 3 NA NA NA NA NA
samp3 3 NA 5 NA NA NA 3 5 NA NA
samp4 6 NA 10 6 NA NA 3 NA 6 NA
samp5 NA 2 NA NA 2 NA 6 4 NA NA
samp6 NA 7 NA 4 NA 2 4 2 NA NA
samp7 NA NA NA 5 NA NA NA 3 9 5
samp8 7 1 4 NA NA 5 6 NA 7 NA
samp9 4 NA NA 3 NA 7 6 3 NA NA
samp10 4 8 2 2 NA NA 4 NA NA 4
Có NA
nghĩa là mẫu nằm trong dữ liệu huấn luyện cho cây đó (nói cách khác, nó không nằm trong mẫu OOB).
Giá trị trung bình của các NA
giá trị không cho mỗi hàng đưa ra dự đoán OOB cho từng mẫu cho toàn bộ khu rừng
> rowMeans(oob.p, na.rm = TRUE)
samp1 samp2 samp3 samp4 samp5 samp6 samp7 samp8 samp9 samp10
4.00 5.25 4.00 6.20 3.50 3.80 5.50 5.00 4.60 4.00
Khi mỗi cây được thêm vào rừng, chúng ta có thể tính toán lỗi OOB cho đến bao gồm cả cây đó. Ví dụ: bên dưới là các phương tiện tích lũy cho từng mẫu:
FUN <- function(x) {
na <- is.na(x)
cs <- cumsum(x[!na]) / seq_len(sum(!na))
x[!na] <- cs
x
}
t(apply(oob.p, 1, FUN))
> print(t(apply(oob.p, 1, FUN)), digits = 3)
tree1 tree2 tree3 tree4 tree5 tree6 tree7 tree8 tree9 tree10
samp1 NA NA 7.00 7.50 5.67 4.50 NA 4.6 4.33 4.0
samp2 6 NA 5.50 6.00 5.25 NA NA NA NA NA
samp3 3 NA 4.00 NA NA NA 3.67 4.0 NA NA
samp4 6 NA 8.00 7.33 NA NA 6.25 NA 6.20 NA
samp5 NA 2 NA NA 2.00 NA 3.33 3.5 NA NA
samp6 NA 7 NA 5.50 NA 4.33 4.25 3.8 NA NA
samp7 NA NA NA 5.00 NA NA NA 4.0 5.67 5.5
samp8 7 4 4.00 NA NA 4.25 4.60 NA 5.00 NA
samp9 4 NA NA 3.50 NA 4.67 5.00 4.6 NA NA
samp10 4 6 4.67 4.00 NA NA 4.00 NA NA 4.0
Theo cách này, chúng ta thấy cách dự đoán được tích lũy trên các cây N trong rừng cho đến một lần lặp nhất định. Nếu bạn đọc trên các hàng, NA
giá trị không phải nhất là giá trị tôi hiển thị ở trên cho dự đoán OOB. Đó là cách thực hiện các dấu vết của hiệu suất OOB - RMSEP có thể được tính toán cho các mẫu OOB dựa trên các dự đoán OOB được tích lũy tích lũy trên các cây N.
Lưu ý rằng mã R được hiển thị không lấy từ phần bên trong của mã RandomForest trong gói RandomForest cho R - Tôi chỉ gõ một số mã đơn giản để bạn có thể theo dõi những gì đang diễn ra sau khi dự đoán từ mỗi cây được xác định.
Đó là bởi vì mỗi cây được xây dựng từ một mẫu bootstrap và có một số lượng lớn cây trong một khu rừng ngẫu nhiên, sao cho mỗi lần quan sát tập huấn nằm trong mẫu OOB cho một hoặc nhiều cây, có thể cung cấp dự đoán OOB cho tất cả mẫu trong dữ liệu đào tạo.
Tôi đã đề cập đến các vấn đề như thiếu dữ liệu cho một số trường hợp OOB, v.v., nhưng những vấn đề này cũng liên quan đến một cây hồi quy hoặc cây phân loại duy nhất. Cũng lưu ý rằng mỗi cây trong rừng chỉ sử dụng mtry
các biến được chọn ngẫu nhiên.
http://www.ime.unicamp.br/~ra109078/PED/Data%20Minig%20with%20R/Data%20Mining%20with%20R.pdf
. Trên trang 115-116, các tác giả sử dụng RF để chọn variable importance
các chỉ số kỹ thuật.
"To get predictions for the OOB sample, each one is passed down the current tree and the rules for the tree followed until it arrives in a terminal node"
, bạn có một lời giải thích đơn giản về những gìrules for the tree
là? Và tôi có hiểusample
chính xác một hàng không nếu tôi hiểu rằng các mẫu làgroups
các quan sát mà cây phân chia dữ liệu?