Setiap pohon di hutan dibangun dari sampel bootstrap pengamatan dalam data pelatihan Anda. Pengamatan dalam sampel bootstrap membangun pohon, sementara yang tidak dalam sampel bootstrap membentuk sampel out-of-bag (atau OOB).
Seharusnya jelas bahwa variabel yang sama tersedia untuk kasus dalam data yang digunakan untuk membangun pohon seperti halnya kasus dalam sampel OOB. Untuk mendapatkan prediksi untuk sampel OOB, masing-masing diturunkan pohon saat ini dan aturan untuk pohon diikuti sampai tiba di simpul terminal. Itu menghasilkan prediksi OOB untuk pohon tertentu.
Proses ini diulang berkali-kali, setiap pohon dilatih tentang sampel bootstrap baru dari data pelatihan dan prediksi untuk sampel OOB baru yang diturunkan.
Ketika jumlah pohon bertambah, salah satu sampel akan berada dalam sampel OOB lebih dari satu kali, sehingga "rata-rata" dari prediksi atas pohon N di mana sampel berada di OOB digunakan sebagai prediksi OOB untuk setiap sampel pelatihan untuk pohon 1, ..., N. Dengan "rata-rata" kami menggunakan rata-rata prediksi untuk tanggapan terus-menerus, atau suara mayoritas dapat digunakan untuk respons kategoris (suara mayoritas adalah kelas dengan suara terbanyak di antara set pohon 1, ..., N).
Misalnya, asumsikan kami memiliki prediksi OOB berikut untuk 10 sampel dalam pelatihan yang ditetapkan pada 10 pohon
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
Di mana NA
berarti sampel ada dalam data pelatihan untuk pohon itu (dengan kata lain itu tidak ada dalam sampel OOB).
Nilai tengah dari NA
nilai-nilai untuk setiap baris memberikan prediksi OOB untuk setiap sampel, untuk seluruh hutan
> 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
Karena setiap pohon ditambahkan ke hutan, kita dapat menghitung kesalahan OOB hingga termasuk pohon itu. Misalnya, di bawah ini adalah cara kumulatif untuk setiap sampel:
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
Dengan cara ini kita melihat bagaimana prediksi terakumulasi di atas N pohon di hutan hingga iterasi yang diberikan. Jika Anda membaca melintasi baris, nilai paling tidak tepat NA
adalah yang saya perlihatkan di atas untuk prediksi OOB. Itulah bagaimana jejak kinerja OOB dapat dibuat - RMSEP dapat dihitung untuk sampel OOB berdasarkan prediksi OOB yang terakumulasi secara kumulatif di atas pohon N.
Perhatikan bahwa kode R yang ditampilkan tidak diambil dari internal kode randomForest dalam paket randomForest untuk R - Saya baru saja mengetuk beberapa kode sederhana sehingga Anda dapat mengikuti apa yang terjadi setelah prediksi dari setiap pohon ditentukan.
Itu karena setiap pohon dibangun dari sampel bootstrap dan bahwa ada sejumlah besar pohon di hutan acak, sehingga setiap pengamatan set pelatihan dalam sampel OOB untuk satu atau lebih pohon, prediksi OOB dapat disediakan untuk semua sampel dalam data pelatihan.
Saya telah membahas masalah seperti data yang hilang untuk beberapa kasus OOB dll, tetapi masalah ini juga berkaitan dengan satu regresi atau pohon klasifikasi. Perhatikan juga bahwa setiap pohon di hutan hanya menggunakan mtry
variabel yang dipilih secara acak.
"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"
, apakah Anda memiliki penjelasan sederhana tentang aparules for the tree
itu? Dan apakah saya mengertisample
sebagai baris dengan benar jika saya mengerti bahwa sampel adalahgroups
pengamatan yang membagi pohon data?