Rừng ngẫu nhiên và dự đoán


13

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:


16

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

NAnghĩ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 NAgiá 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, NAgiá 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 mtrycác biến được chọn ngẫu nhiên.


Câu trả lời tuyệt vời! Khi bạn viế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 treelà? Và tôi có hiểu samplechính xác một hàng không nếu tôi hiểu rằng các mẫu là groupscác quan sát mà cây phân chia dữ liệu?
user1665355

@ user1665355 Tôi đoán bạn đã hiểu làm thế nào hồi quy hoặc phân loại cây được xây dựng? Các cây trong RF không khác nhau (có lẽ ngoại trừ trong các quy tắc dừng). Mỗi cây chia dữ liệu huấn luyện thành các nhóm mẫu có "giá trị" tương tự cho phản hồi. Vị trí biến và chia (ví dụ: pH> 4,5) dự đoán tốt nhất (nghĩa là giảm thiểu "lỗi") tạo thành phân chia hoặc quy tắc đầu tiên trong cây. Mỗi nhánh của phân chia này sau đó được xem xét lần lượt và các phân chia / quy tắc mới được xác định để giảm thiểu "lỗi" của cây. Đây là thuật toán phân vùng đệ quy nhị phân. Sự chia tách là các quy tắc.
Phục hồi Monica - G. Simpson

@ user1665355 Vâng, xin lỗi tôi đến từ một trường trong đó một mẫu là một quan sát, một hàng trong tập dữ liệu. Nhưng khi bạn bắt đầu nói về một mẫu bootstrap, đó là một tập hợp các quan sát N, được rút ra bằng sự thay thế từ dữ liệu huấn luyện và do đó có N hàng hoặc quan sát. Tôi sẽ cố gắng làm sạch thuật ngữ của tôi sau này.
Phục hồi Monica - G. Simpson

Cảm ơn! Tôi rất mới với RF vì vậy xin lỗi vì những câu hỏi có thể ngu ngốc :) Tôi nghĩ rằng tôi hiểu hầu hết mọi thứ mà bạn đã viết, giải thích rất tốt! Tôi chỉ băn khoăn về Vị trí biến và chia (ví dụ: pH> 4,5) dự đoán tốt nhất (tức là giảm thiểu "lỗi") tạo thành phân chia hoặc quy tắc đầu tiên trong cây ... Tôi không thể hiểu lỗi là gì. : / Tôi đang đọc và cố gắng hiểu 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 importancecác chỉ số kỹ thuật.
user1665355

"Lỗi" phụ thuộc vào loại cây nào đang được trang bị. Độ lệch là thước đo thông thường cho các phản ứng liên tục (Gaussian). Trong gói rpart, hệ số Gini là mặc định cho các phản hồi phân loại, nhưng có các hệ số khác cho các mô hình khác nhau, v.v. Bạn nên tận dụng một cuốn sách hay về Cây và RF nếu bạn muốn triển khai thành công. Các biện pháp Biến đổi biến đổi là một cái gì đó khác nhau - chúng đo lường "tầm quan trọng" của từng biến trong tập dữ liệu bằng cách xem mức độ thay đổi của một biến khi sử dụng biến đó để phù hợp với cây và khi biến đó không được sử dụng.
Phục hồi Monica - G. Simpson
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.