Artırma için çantadan çıkma hatası tahmini?


9

Rastgele Orman'da her ağaç, verilerin benzersiz bir takviye örneğine paralel olarak büyütülür. Her takviye örneğinin benzersiz gözlemlerin yaklaşık% 63'ünü içermesi beklendiğinden, bu, ağacın test edilmesi için kullanılabilecek gözlemlerin yaklaşık% 37'sini dışarıda bırakır.

Şimdi, Stokastik Degrade benzer bir tahmini var gibi görünüyor :OOBerror

Bag.fraction 0 değerinden daha büyük olarak ayarlanırsa (0,5 önerilir) gbm, tahmini performanstaki iyileşmenin çanta dışı bir tahminini hesaplar. Bir sonraki regresyon ağacının seçiminde kullanılmayan gözlemlerde sapmadaki azalmayı değerlendirir.

Kaynak: Ridgeway (2007) , bölüm 3.3 (sayfa 8).

Nasıl çalıştığını / geçerli olduğunu anlamada sorun yaşıyorum. Diyelim ki sıraya bir ağaç ekliyorum. Bu ağacı orijinal veri kümesinin rastgele bir alt örneğinde büyütüyorum. Bu tek ağacı, büyümek için kullanılmayan gözlemler üzerinde test edebilirim. Kabul. ANCAK , Artırma sıralı olduğundan, bu dışarıda kalan gözlemler için bir tahmin sağlamak için şimdiye kadar inşa edilmiş ağaçların tüm dizisini kullanıyorum . Ve önceki ağaçların çoğunun bu gözlemleri zaten görmüş olma ihtimali yüksektir. Yani model her turda RF gibi görünmeyen gözlemler üzerinde gerçekten test edilmiyor değil mi?

Peki, buna nasıl "torba dışı" hata tahmini denir? Bana göre, gözlemler zaten görüldüğü için herhangi bir çantanın "dışında" görünmüyor mu?


1
Buradaki tartışmaya bakın github.com/scikit-learn/scikit-learn/pull/1806 . OOB tahminlerinin hesaplanma biçimiyle ilgili endişelerinizi ifade etmekte yalnız değilsiniz.
mpiktas

bağlantı için teşekkürler, ama ne yazık ki tüm iplik katkıda bulunanlar benim gibi kaybolmuş gibi görünüyor!
Antoine

1
Aslında hayır. Bkz. Github.com/scikit-learn/scikit-learn/pull/2188 . Bu taahhütte OOB skoru gbm'nin yaptığı gibi OOB iyileştirmesi olarak değiştirildi. Bu fikrin tam olarak nasıl çalıştığını bilmiyorum, ama topladığım şeyden, mevcut ağaç için oob örneği OOB iyileştirmesini hesaplamak için kullanılıyor. Matematiksel formülleri bulmayı başaramadım, bu yüzden bu iyileşmenin ne kadar kesin olarak hesaplandığını görmek için gbm koduna kazmak gerekiyor.
mpiktas

@Antoine Gerçekten heyecan verici bir soru! kesin bir cevap bulundu mu?
Soren Havelund Welling

1
Hayır, ne yazık ki. Bazı ipuçları yukarıdaki linkler (yorumlarda), bu konu ve bu diğer konu tarafından verilmektedir . Bu beni tamamen delirtiyor. Bir gün biri Dr. Friedman / Hastie'ye e-posta göndermeli ... İlginiz için teşekkürler.
Antoine

Yanıtlar:


2

Sadece kısmen cevaplama (ve sorunuza yeni bir soru ekleme).

R http://www.rdocumentation.org/packages/gbm/functions/gbm dosyasındaki gbm uygulamasının bazı bagnes dışılıkları ayarlamak için iki parametresi vardır.

a) train.fractiontüm ağaçları eğitmek için kullanılan verinin bir kısmını tanımlayacak ve böylece 1- train.fractiongerçek OOB (torbadan çıkmış) veriler olacaktır.

b) bag.fractionDestekteki bir sonraki ağacın oluşturulmasında kullanılacak eğitim verilerinin oranını tanımlayacaktır. Bu nedenle, hiçbir zaman herhangi bir ağacın oluşturulması için kullanılmayan bazı veriler olabilir ve bunlar gerçekten OOB verileri olarak kullanılabilir. (Ancak olası değildir, aşağıdaki soruya bakın)

Bu da beni soruya getiriyor. Verilerin% 37'sini OOB olarak analiz etmeniz yalnızca BİR ağaç için geçerlidir. Ancak HERHANGİ bir ağaçta kullanılmayan herhangi bir veri olma şansı çok daha küçüktür - (tüm ağaçları için olması gerekir - benim anlayışım her ağacın kendi önyükleme ). Bu yüzden RandomForests'de ormanı test etmek için herhangi bir OOB olması pek mümkün olmamalıdır. Ve yine de R'deki randomForest uygulaması (Breiman'ın orijinal koduna dayanarak) OOB hakkında çok konuşuyor (örneğin sonuç verileri ve bkz. Http://www.rdocumentation.org/packages/randomForest/functions/randomForest )0.37ntreesntreeerr.rateconfusion

Buna nasıl cevap vereceğimi bilmiyorum (ve soruyu sorduğunuz ve bana randomForests'in bu yönünü anlamadığımı anladığım için teşekkür ederim (+1)). Olası çözüm, sadece bir önyükleme var - ve tüm ağaçlar ondan inşa edilmiş - ama bildiğim kadarıyla durum böyle değil.


RF / Torbalama için herhangi bir sorun yoktur: topluluk oluşturma sürecindeki herhangi bir adımda, orijinal veri setindeki herhangi bir gözlem, bu gözlemden yoksun boostrap örnekleri üzerinde eğitilen tüm ağaçlara beslenebilir. Toplam ağaç sayısının yaklaşık üçte biri (~% 37) bu durumu karşılayacaktır. Ayrıca, bu ağacın oy kullanmasına izin vererek ve en popüler sınıfı alarak gözlem için bir tahmin elde edilebilir. Tahmin sayısı, tüm sınıflar üzerinde ortalaması alınan gözlemin gerçek etiketinden farklıdır, çanta dışı hata tahmini verir
Antoine

1
Ayrıca, Boosting'de OOB hata tahmin yeteneği train.fractionveren şey parametreden gelmez (bu sadece gbm fonksiyonunun bir özelliğidir, ancak orijinal algoritmada mevcut değildir) değil, gerçekten de Veriler, gözlemleri dışarıda bırakarak (test için kullanılabilen) sırayla her ağacı eğitmek için kullanılır. Bu da orijinal soruma geri dönüyor. Bu gözlemler, dizideki önceki birçok ağaç tarafından muhtemelen birçok kez görüldüğü için test için nasıl kullanılabilir?
Antoine

RF'deki her ağacın gerçekten orijinal verilerin kendine özgü, benzersiz bootstrap örneğinden oluşturulduğunu söylemeyi unuttum
Antoine

@ user2835597 RF ile ilgili açıklamalarınız için teşekkür ederiz. Bu nedenle, bir RF'nin bir OOB hatası, ormandaki ağaçların sadece 1 / 3'ünü gerçekten değerlendiriyor (bu benim için çok yararlı görünmüyor). Her gün bir şeyler öğrenmek.
Jacques Wainer

Her neyse, train.fraction parametresi sorunuzun cevabı gibi görünüyor. Sklearn uygulamasının da benzer bir parametresi vardır, alt örnek (bkz. Scikit-learn.org/stable/modules/generated/…
Jacques

-2

Her adımda çanta tahminleri yaptıklarına inanıyorum. Tüm adımların sonuçları (katsayılarla) eklendiğinden, aynı katsayılarla OOB hataları da eklenebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.