Perkiraan kesalahan out-of-bag untuk meningkatkan?

9

Dalam Random Forest, masing-masing pohon ditanam secara paralel pada sampel pendamping data yang unik. Karena setiap sampel boostrap diharapkan mengandung sekitar 63% dari pengamatan unik, ini menyisakan sekitar 37% dari pengamatan, yang dapat digunakan untuk menguji pohon.

Sekarang, tampaknya dalam Stochastic Gradient Boosting, ada juga perkiraan serupa dengan yang ada di RF:OOBerror

Jika fraksi bag. diatur ke lebih besar dari 0 (0,5 direkomendasikan), gbm menghitung perkiraan out-of-bag dari peningkatan kinerja prediktif. Ini mengevaluasi pengurangan penyimpangan pada pengamatan yang tidak digunakan dalam memilih pohon regresi berikutnya.

Sumber: Ridgeway (2007) , bagian 3.3 (halaman 8).

Saya mengalami kesulitan memahami cara kerjanya / valid. Katakanlah saya menambahkan pohon dalam urutan. Saya menumbuhkan pohon ini pada subsampel acak dari kumpulan data asli. Saya bisa menguji pohon tunggal ini pada pengamatan yang tidak digunakan untuk menumbuhkannya. Sepakat. TETAPI , karena Boosting berurutan, saya agak menggunakan seluruh urutan pohon yang dibangun sejauh ini untuk memberikan prediksi bagi pengamatan yang ditinggalkan itu. Dan, ada kemungkinan besar bahwa banyak pohon sebelumnya telah melihat pengamatan ini. Jadi model ini tidak benar-benar diuji pada setiap putaran pada pengamatan yang tidak terlihat seperti dengan RF, bukan?

Jadi, mengapa ini disebut estimasi kesalahan "out-of-bag"? Bagi saya, sepertinya tidak "keluar" dari tas apa pun karena pengamatan sudah terlihat?

Antoine
sumber
1
Lihat diskusi di sini github.com/scikit-learn/scikit-learn/pull/1806 . Anda tidak sendirian dalam mengungkapkan kekhawatiran cara perkiraan OOB dihitung.
mpiktas
terima kasih untuk tautannya, tapi sayangnya semua kontributor utas sepertinya sama kehilangannya dengan saya!
Antoine
1
Sebenarnya tidak. Lihat github.com/scikit-learn/scikit-learn/pull/2188 . Dalam komit ini, skor OOB diubah menjadi peningkatan OOB seperti yang dilakukan gbm. Saya tidak tahu bagaimana ide ini bekerja secara tepat, tetapi dari apa yang saya kumpulkan, sampel oob untuk pohon saat ini digunakan untuk menghitung peningkatan OOB. Saya tidak berhasil menemukan rumus matematika, jadi perlu untuk menggali kode gbm untuk melihat seberapa tepat peningkatan ini dihitung.
mpiktas
@Antoine Pertanyaan yang sangat menarik! apakah jawaban pasti ditemukan?
Soren Havelund Welling
1
Tidak, sayangnya. Beberapa petunjuk diberikan oleh tautan di atas (di komentar), utas ini , dan utas lainnya ini . Ini membuatku benar-benar gila. Suatu hari seseorang harus mengirim email ke Dr. Friedman / Hastie ... Terima kasih atas perhatian Anda.
Antoine

Jawaban:

2

Menjawab hanya sebagian (dan menambahkan pertanyaan baru ke pertanyaan Anda).

Implementasi gbm di R http://www.rdocumentation.org/packages/gbm/functions/gbm memiliki dua parameter untuk menyesuaikan beberapa out-of-bagness.

a) train.fractionakan menentukan proporsi data yang digunakan untuk melatih semua pohon dan dengan demikian 1- train.fractionakan menjadi data OOB (out-of-bag) yang sebenarnya.

b) bag.fractionakan menentukan proporsi data pelatihan yang akan digunakan dalam pembuatan pohon berikutnya dalam meningkatkan. Dengan demikian mungkin ada beberapa data yang tidak pernah digunakan untuk pembuatan pohon apa pun dan mereka dapat benar-benar digunakan sebagai data OOB (tetapi tidak mungkin, lihat pertanyaan di bawah)

Yang membawa saya ke pertanyaan. Analisis Anda terhadap 37% data sebagai OOB hanya berlaku untuk SATU pohon. Tetapi kemungkinan akan ada data yang tidak digunakan di pohon APAPUN jauh lebih kecil - (harus di OOB untuk semua pohon - pemahaman saya adalah bahwa setiap pohon melakukan bootstrap sendiri). Jadi dalam RandomForest, sangat tidak mungkin ada OOB untuk menguji hutan. Namun implementasi randomForest di R (berdasarkan kode asli Breiman) banyak berbicara tentang OOB (misalnya data hasil dan lihat http://www.rdocumentation.org/packages/randomForest/functions/randomForest ) n t r e e0.37ntreesntreeerr.rateconfusion

Saya tidak tahu bagaimana menjawabnya (dan saya berterima kasih (+1) untuk mengajukan pertanyaan dan membuat saya sadar bahwa saya tidak memahami aspek acak Hutan). Solusi yang mungkin adalah bahwa hanya ada satu bootstrap - dan semua pohon dibangun darinya - tetapi sejauh yang saya tahu, bukan itu masalahnya.

Jacques Wainer
sumber
Untuk RF / Bagging, tidak ada masalah: pada langkah apa pun yang diberikan dalam proses pembangunan ansambel, setiap pengamatan dalam set data asli dapat diumpankan ke semua pohon yang dilatih tentang sampel-sampel percontohan tanpa pengamatan ini. Sekitar sepertiga (~ 37%) dari jumlah pohon akan memenuhi kondisi ini. Selanjutnya, dengan membiarkan pohon ini memilih dan mengambil kelas yang paling populer, prediksi dapat diperoleh untuk pengamatan. Frekuensi prediksi berbeda dari label sebenarnya dari pengamatan yang dirata-rata untuk semua kelas, memberikan perkiraan kesalahan di luar tas
Antoine
1
juga, tampaknya apa yang memberikan kemampuan estimasi kesalahan OOB dalam Meningkatkan tidak berasal dari train.fractionparameter (yang hanya merupakan fitur dari fungsi gbm tetapi tidak ada dalam algoritma asli) tetapi benar-benar dari kenyataan bahwa hanya subsampel dari data digunakan untuk melatih setiap pohon secara berurutan, meninggalkan pengamatan (yang dapat digunakan untuk pengujian). Yang kembali ke pertanyaan awal saya. Bagaimana pengamatan ini dapat digunakan untuk pengujian karena mungkin telah terlihat berkali-kali oleh banyak pohon sebelumnya dalam urutan?
Antoine
lupa menyebutkan bahwa setiap pohon di RF memang dibangun dari sampel bootstrap unik miliknya sendiri dari data asli
Antoine
@ user2835597 terima kasih atas penjelasan Anda tentang RF. Jadi kesalahan OOB RF benar-benar mengevaluasi hanya 1/3 dari pohon di hutan (yang tidak terlihat sangat berguna bagi saya). Ya, belajar sesuatu setiap hari.
Jacques Wainer
Bagaimanapun, parameter train.fraction tampaknya menjadi jawaban untuk pertanyaan Anda. Implementasi sklearn juga memiliki parameter serupa, subsampel
Jacques Wainer
-2

Saya percaya mereka melakukan estimasi tas pada setiap langkah. Karena hasil dari semua langkah ditambahkan (dengan koefisien), kesalahan OOB juga dapat ditambahkan dengan koefisien yang sama.

pengguna2225548
sumber