Rastgele Orman - Donanımın üstesinden nasıl gelinir?


41

Bilgisayar bilimi geçmişim var ama internette problem çözerek kendime veri bilimini öğretmeye çalışıyorum.

Son birkaç haftadır bu problem üzerinde çalışıyorum (yaklaşık 900 satır ve 10 özellik). Başlangıçta lojistik regresyon kullanıyordum ama şimdi rastgele ormanlara geçtim. Rasgele orman modelimi eğitim verilerimde çalıştırdığımda auc için gerçekten yüksek değerler elde ediyorum (>% 99). Ancak aynı modeli test verilerinde çalıştırdığımda sonuçlar o kadar iyi değil (Yaklaşık% 77 doğruluk). Bu, eğitim verilerini çok fazla doldurduğuma inanmamı sağlıyor.

Rastgele ormanlarda uyumu önlemeyle ilgili en iyi uygulamalar nelerdir?

Geliştirme ortamım olarak r ve rstudio'yu kullanıyorum. randomForestPaketi kullanıyorum ve tüm parametreler için varsayılanları kabul ettim


4
Breiman, RF'nin yetmediğini iddia ediyor. stat.berkeley.edu/~breiman/RandomForests/cc_home.htm Doğru olduğu varsayımı üzerine, muhtemelen eğitim ve test setiniz arasında bir tür tutarsızlık var mı?
Monica’yı

Eğer ayar parametresini optimize ederseniz, RF AVOIDS TEST VERİLERİNE geçer
Brash Dengesi

Örneklemenin tamamıyla gözden kaçan bir ayar parametresi buldum. stackoverflow.com/questions/34997134/…
Soren Havelund Welling

Yanıtlar:


30

Rastgele ormana fazla uymamak için yapmanız gereken en önemli şey, her ağacı önyükleme verilerinden büyütmek için rastgele seçilen özelliklerin sayısını düzenleyen bir ayar parametresini optimize etmektir. Genelde, bunu -kat çapraz doğrulama ile yaparsınız , burada ve test örneği tahmin hatasını en aza indiren ayar parametresini seçersiniz. Ek olarak, daha büyük bir orman yetiştirmek, yüzlerce ağaç aldığınızda genellikle azalan getiriler olmasına rağmen, tahmin doğruluğunu artıracaktır.k { 5 , 10 }kk{5,10}


1
Teşekkür ederim. Bu parametrelerin nasıl optimize edileceğini gösteren bir ders var mı?
Abhi

Oldukça basit olan Stanford çevrimiçi kurslarına kaydolmanız gerekir, ancak burada R: class.stanford.edu/courses/HumanitiesScience/StatLearning/…
Brash Dengesi ile ilgili olarak

Bunu doğru anlıyorsam, modelin her adımda deneyeceği özelliklerin aksine rastgele orman modeline giren özelliklerin sayısını belirlemek için çapraz doğrulama kullanıyoruz. Doğru mu?
Abhi

4
Bu cevaba karşı çıkarım: RF'lerin çekici özelliklerinden iki tanesi, onları yenmenin zor olması ve varsayılan parametrelerin genellikle oldukça iyi olmasıdır. Bu cevap, RF'nin nadiren durum olan varsayılanlara karşı hassas olduğu anlamına geliyor gibi görünüyor
charles

7
Ampirik olarak, rastgele ormanlara, rehberli rastgele ormanlara, düzenli rastgele ormanlara veya kılavuzlu düzenli ormanlara rastlamakta hiç zorlanmadım. Çapraz onaylamada düzenli olarak çok iyi performans gösterirler ancak aşırı uydurma nedeniyle yeni verilerle kullanıldığında kötüdürler. Modellenmekte olan fenomen türüyle ilgili olduğuna inanıyorum. Mekanik bir süreç modellenirken çok fazla bir sorun olmuyor, fakat davranışsal bir model gibi bir şeyle, iyi tanımlanmış bir regresyon ile çok daha kararlı sonuçlar elde ediyorum.
Hack-R,

33

Eğitim verilerinde bu% 99 AUC'yi nasıl alıyorsun? Arasında bir fark olduğunu unutmayın

predict(model)

ve

predict(model, newdata=train)

Eğitim veri seti için tahminler alırken. İlk seçenek , rastgele ormandaki çanta dışı tahminleri alır. Öngörülen değerleri egzersiz verilerindeki verilerle karşılaştırırken genellikle istediğiniz şey budur.

İkincisi, eğitim verilerinizi yeni bir veri kümesiymiş gibi ele alır ve gözlemleri her ağacın üzerinden geçirir. Bu, RF algoritması genellikle bireysel ağaçları budamadığı için tahminler ve gerçekler arasında yapay olarak yakın bir korelasyonla sonuçlanacaktır. Bu nedenle, antrenman verileriyle ilgili tahminler almak istiyorsanız bunu yapmayın.


3
Tahmin kullanıyordum (model, data = train). Şimdi tahmin etmeye (model) geçtim ve aucum% 87'ye düştü. Bu iyi bir şey ya da kötü bir şey midir?
Abhi

2
Teşekkür ederim! Bunun benim için de sorun olduğunu öğrendim. Ben bir takip soru haberi burada RF modelleri için 'eğitim hatası' olarak kullanılmak ne önlem: stats.stackexchange.com/questions/162353/...
Berk U.

Harika teşekkür ederim!! Ben de bu hatayı yapıyordum! @Abhi'ye: Bu iyi bir şey, çünkü önceki AUC saçma sapan derecede yüksekti. Bu daha gerçekçi. Çapraz doğrulamayı deneyin ve bunun üzerinde AUC'yi ölçün ve muhtemelen benzer bir değer göreceksiniz.
Meraklı

7

Karar ağaçları için, fazladan donatmanın iki yolu vardır: (a) ağaçları tam olarak büyütmeyin (b) kuru erik

Aynısı bir ağaç ormanı için de geçerlidir - onları fazla büyütmeyin ve budama.

Çok randomForestfazla kullanmıyorum , ama bildiğim kadarıyla, ormanlarınızı ayarlamak için kullanabileceğiniz çeşitli parametreler var:

  • nodesize - minimum terminal düğüm büyüklüğü
  • maxnodes - maksimum terminal düğüm sayısı
  • mtry - Her bir ağacı oluşturmak için kullanılan değişkenlerin sayısı (thanks @ user777)

1
Ve mtry, algoritmanın her ağacı oluşturmak için çizdiği değişkenlerin sayısı, varsayılan olarak toplam özelliklerin sayısının kareköküdür.
Monica’yı

Maxnodes bırakıp yerine örnekleme daha düşük olur. Yavaşlayan maksnot ve örneklemlerin her ikisi de daha az derinliğe ve daha sağlam bir ormana sahip ağaçlar verir, bununla birlikte daha düşük ağaç korelasyonunu da örneklendirir ve orman muhtemelen daha düşük çapraz onaylanmış tahmin hatasına yakınlaşır, bkz. Stackoverflow.com/questions/34997134/…
Soren Havelund Welling

2

K katlama çapraz doğrulama gibi çapraz doğrulama yöntemlerini kullanmak isteyebilirsiniz.


özellikleri normalleştirmek / ölçeklendirmek mi istiyorsunuz?
charles

4
@charles özür dilerim. Gerçekten rastgele ormanları kullanmadaki özelliklerin ölçeklendirilmesi gerekli değildir. Bkz: stackoverflow.com/questions/8961586/...
Fre

Çapraz onaylamanın faydalı olacağını düşünüyorum. Bu, potansiyel olarak dengesiz hata tahminleri üreten bölünmüş örnek doğrulama ile göreceli olarak küçük bir veri kümesidir (kuşkusuz bunun meselesi olmadığı anlamına gelse de)
charles

1

gridsearch kullanarak parametrelerinizi ayarlayabilirsiniz

from sklearn.ensemble import RandomForestClassifier

from sklearn.grid_search import GridSearchCV

random_classifier = RandomForestClassifier()

parameters = { 'max_features':np.arange(5,10),'n_estimators':[500],'min_samples_leaf': [10,50,100,200,500]}

random_grid = GridSearchCV(random_classifier, parameters, cv = 5)

Denenmiş bir düzenleyici, modülün GridSearchCViçinde model_selectionbulunduğunu ve ikinci kod satırının olması gerektiğini önerir from sklearn.model_selection import GridSearchCV.
gung - Reinstate Monica

0

Max_depth parametresini [5, 15] aralığında ayarlamaya çalışın , ancak bundan daha fazla olmaya çalışın, çünkü daha fazla derinlik alırsanız, fazla uydurma şansı yüksektir.

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.