Rastgele orman aşırı uyuyor


15

Ben scikits-learn Rastgele Orman Regresyonu kullanmaya çalışıyorum. Sorun gerçekten yüksek bir test hatası alıyorum:

train MSE, 4.64, test MSE: 252.25.

Verilerim şöyle görünüyor: (mavi: gerçek veriler, yeşil: tahmin edilen):

Orman regresyonu temizlendi

Eğitim için% 90, test için% 10 kullanıyorum. Bu, birkaç parametre kombinasyonunu denedikten sonra kullandığım kod:

rf = rf = RandomForestRegressor(n_estimators=10, max_features=2, max_depth=1000, min_samples_leaf=1, min_samples_split=2, n_jobs=-1) 
test_mse = mean_squared_error(y_test, rf.predict(X_test))
train_mse = mean_squared_error(y_train, rf.predict(X_train))

print("train MSE, %.4f, test MSE: %.4f" % (train_mse, test_mse))
plot(rf.predict(X))
plot(y)

Donanımımı geliştirmek için olası stratejiler nelerdir? Altta yatan modeli çıkarmak için yapabileceğim başka bir şey var mı? Aynı modelin birçok tekrarından sonra modelin yeni verilerle çok kötü davrandığı bana inanılmaz geliyor. Bu verilere uymaya çalışmak konusunda hiç umudum var mı?


Bu periyodik işlevi giriş olarak x ekseni ve x <= 245 için etiket olarak y ekseni ve sonra x> 245 için test yapıyor musunuz? Yoksa planınızı yanlış mı yorumluyorum?
rrenaud

Aslında, x ekseni gözlem endeksidir, toplamda 300 gözlem vardır, bu nedenle 245'ten itibaren, modeli eğitmek için kullanılmayan test verileri, giriş özelliği vektörü tamsayılardan oluşur, şekli vardır (300,2) ve yakından gözlem endeksinin doğrusal bir fonksiyonuna benziyor, bu yüzden soruyu aşırı karmaşıklaştırmamak için bu konuda bilgi eklemedim.
elyase

1
Önce döngüyü (mevsimsel kısım) verilerinizden (ve trendden) kaldırmak isteyebilirsiniz.
R. Prost

Zaman serileri analizine baktınız mı? X ekseninizde ne olduğu açık değil ama periyodik geliyor bana. Buraya bakın ve bunun yardımcı olup olmadığını bana bildirin: otexts.org/fpp/7/5
Bram Van Camp

Yanıtlar:


21

Sanırım yanlış araç kullanıyorsunuz; X'inizin tamamı dizine eşdeğerse, temel olarak bazı örneklenmiş işlevlerine sahip oluyorsunuz ve onu tahmin etmeye çalışıyorsunuz. Makine öğrenimi tamamen tarihin enterpolasyonu ile ilgilidir, bu nedenle bu durumda muhteşem başarısızlık elde etmesi şaşırtıcı değildir.f:RR

İhtiyacınız olan şey bir zaman serisi analizi (yani eğilim çıkarma, spektrumu analiz etme ve geri kalanı otomatikleştirme veya geri kalanı HMMing) veya fiziktir (yani, bu çıktıyı üretebilecek bir ODE olup olmadığını düşünmek ve parametrelerini korunmuş miktarlar ile uydurmaya çalışmak).


genelleştirilebilir modelleri verilerden çıkarmayı makine öğrenmiyor mu? Verilerin enterpolasyonu iyi olan belirli bir seti olduğunda, örneğin çapraz doğrulama kullanarak daha iyi ekstrapolasyon / genelleme özelliklerine sahip olanları seçebiliriz. Anladığımda yanlış bir şey mi var?
elyase

Ekstrapolasyon genellemeden farklıdır - aşağıdaki denemeye konu olduğunuzu düşünün: bir ekran görüyorsunuz ve kırmızı ve yeşil bir düğmeniz var. İlk olarak, ekran, başka bir kişinin ekranda gösterilen kedi, aslan ve kaplan için yeşil düğmeye, ardından kurt ve köpek için kırmızıya bastığı ve bu şekilde 5 lezzetli kurabiye topladığı odanın bir videosunu gösterir.

1
Şimdi, ekran bir bobcat gösteriyor; tarihin uygun, genelleştirilebilir enterpolasyonunu gerçekleştirirsiniz, yeşil düğmeye basın ve çerez yerine elektrik çarpması yaşarsınız. Bu neden oldu? Çünkü çözüm bir döngüdür (gggrrr) ve hayvan resimleri sadece bir aldatmacadır. Ormanınız için de aynısını yaptınız - gerçek bilgileri saklarken eğitim setinizin aptalca bir kopyasına daldınız.

İyi bir örnek ama sizin yaptığınız gibi görmüyorum. Örneğinizde şu verilere sahibiz: bir hedef ( gveya r) ve 2 özellik ( index(geçici) ve animal). Bu verilerden, özellik 1 veya 2'ye (veya her ikisine eşit) daha fazla veya daha az ağırlık verebilen birden fazla modele sığabilirim. Çapraz doğrulama (yeterli veri olduğu varsayılarak) özellik 2 (hayvan) daha az öneme sahip bir modele ulaşmalıdır. Modelimin verileri fazla uyduğunu görebiliyorum, ancak yine de bu modeli takip eden bir modeli (davranış değişmediği için) yeterince geniş bir model alanı ile çıkartabilmem gerektiğini düşünüyorum.
elyase

1
Hayır; daha fazla veri isteseniz bile, deneyci hala hayvan aldatmacasını uzatabilir ve daha açık tutmak için paterni daha da gizleyebilir. Yani, ekstrapolasyon sadece öğrenme ile yapılamaz çünkü tanım gereği eğitimde mevcut olmayan bilgileri gerektirir - bu şekilde problemin enterpolasyon haline gelmesi için ya bazı varsayımlar uygulamanız ya da ek veriler toplamanız gerekir.

9

En büyük sorun, regresyon ağaçlarının (ve rastgele ormanlar gibi bunlara dayanan algoritmaların) parçalı sabit fonksiyonları öngörmesi ve her yaprağın altına düşen girdiler için sabit bir değer vermesidir. Bu, eğitim alanlarının dışında tahmin edildiklerinde, eğitim verilerinin olduğu en yakın nokta için yaptıkları değeri tahmin ettikleri anlamına gelir. @mbq, zaman dizisini öğrenmek için büyük olasılıkla genel makine öğrenimi tekniklerinden daha iyi olacak özel araçlar olduğu konusunda doğrudur. Bununla birlikte, rastgele ormanlar bu örnek için özellikle kötüdür ve diğer genel ML teknikleri muhtemelen gördüğünüzden çok daha iyi performans gösterecektir. Doğrusal olmayan çekirdeklere sahip SVM'ler akla gelen bir seçenektir. İşlevin periyodik yapısı olduğundan, bu aynı zamanda frekans etki alanının,


AFAIK SVM aynı rastgele orman sorununa sahiptir. Eğitildikleri alanın dışında iyi bir tahmin yapmıyorlar. Muhtemelen sinir ağı daha iyi bir çözüm olacaktır
Donbeo

Veriler bir eğri üzerinde bulunuyorsa ve çekirdek bu eğriye uyacak doğru türdeyse, bir SVM bu eğri boyunca tahmin edilebilecektir. Verilerin doğrusal bir eğilimi varsa, o zaman lineer bir SVM çizgiye sığacak ve bu çizgi boyunca ekstrapolasyon yapacaktır. Daha karmaşık çekirdek daha karmaşık davranışlara sığabilir ve tahmin edilebilir. Doğru çekirdeğe sahip olmasına bağlıdır. SVM'leri ekstrapolasyon ve TS tahmini için doğru araç yapmaz, ancak onları rastgele ormanlardan daha iyi yapar.
Daniel Mahler

3

Bu, aşırı veri uyumu için bir ders kitabı örneğidir, model eğitimli verilerde çok iyi sonuç verir, ancak yeni test verilerinde daraltır. Bu, bunu ele alan stratejilerden biridir: Parametreleri optimize etmek için eğitim verilerinin on kat çapraz doğrulamasını yapın.

Adım 1. NM optimizasyonunu kullanarak bir MSE küçültme fonksiyonu oluşturun. Burada bir örnek görülebilir: http://glowingpython.blogspot.de/2011/05/curve-fitting-using-fmin.html

Adım 2. Bu minimizasyon fonksiyonu içinde amaç MSE'yi azaltmaktır. Bunu yapmak için, 9 katta yeni bir modelin öğrenildiği ve 10. katta test edildiği verilerin on katını oluşturun. Her kat üzerinde MSE elde etmek için bu işlem on kez tekrarlanır. Toplanan MSE, hedefin sonucu olarak geri döndürülür.

Adım 3. Python'daki fmin sizin için yinelemeleri yapacak. Hangi hiper parametrelerin ince ayarlanması gerektiğini kontrol edin (n_estimators, max_features vb.) Ve bunları fmin'e aktarın.

Sonuç, aşırı takılma olasılığını azaltacak en iyi hiper parametreleri olacaktır.


Evet, aşırı uyuyor gibi görünüyor (Rastgele Orman Regresyonu normalde öyle değil, bu yüzden soru). Şimdi parametreleri değiştirmenin RF Regresörleri ile çok az etkisi olduğunu gözlemledim. Şimdi çapraz doğrulama, optimize edilebilecek kadar esnek bir model gerektiriyor. Bu tür veriler için ne tür ML modelleri / algoritmaları önerirsiniz?
elyase

3

Bazı öneriler:

  1. Değişken pencere yaklaşımı kullanarak parametrelerinizi ayarlayın (modeliniz , verilenler arasında değerleri tahmin etmek için değil, zaman serisindeki bir sonraki değerleri tahmin etmek için optimize edilmelidir )
  2. Diğer modelleri deneyin (daha basit olanlar, doğru özellik seçimi ve özellik mühendisliği stratejileriyle, sorununuza daha uygun olabilir)
  3. Hedef değişkenin optimal dönüşümlerini öğrenmeye çalışın (bunu da ayarlayın, negatif doğrusal / üstel eğilim var, tahmin edebilirsiniz)
  4. Spektral analiz belki
  5. Maksima / minima eşit aralıklı görünüyor. Özelliklerinizin nerede verildiğini öğrenin (operatör girişi yok, bir algoritmanın önyargıyı kaldırmak için keşfetmesini sağlayın) ve bunu bir özellik olarak ekleyin. Ayrıca bir özellik tasarlar nearest maximum. Dunno, işe yarayabilir veya belki de çalışmayabilir, ancak test edip edemeyeceğinizi biliyorsunuz :)

Ancak, Daniel'in cevabında söylediği gibi, rastgele orman, tren örneğinde gözlemlenen aralığın dışındaki değerleri tahmin edemediği için tasarımla bu tür problemler için çalışmayacaktır. Ayar parametreleri vb. Hiçbir yere götürmez.
Tim

1
Öneri # 2 @Zaman. Ve Rastgele Ormanlar bu veriler üzerinde naif bir şekilde çalışmaz, ancak akıllı özellik çıkarma işlemi onu çalıştırabilir.
Firebug


0

Yukarıdaki yazıyı okuduktan sonra farklı bir cevap vermek istiyorum.

Rastgele orman gibi ağaç tabanlı modeller için, eğitim setinin ötesindeki değeri tahmin edemezler. Bu yüzden bunun aşırı uyumlu bir sorun olduğunu düşünmüyorum, ama yanlış bir modelleme stratejisi.

Peki, ağaç modeli ile zaman serisi tahmini için ne yapabiliriz?

Olası yol onu lineer regresyon ile birleştirmektir: ilk önce zaman serilerini (veya lineer regresyon ile modelleme eğilimini) deraltın, daha sonra artığı ağaçlarla modelleyin (artıklar sınırlıdır, böylece ağaç modelleri bunu halledebilir).

Ayrıca, doğrusal regresyon ile kombine bir ağaç modeli var, kübist denir, yaprak üzerinde doğrusal regresyon yapar.


0

Sadece grafiğin sınırları dahilinde tahmin etmek istiyorsanız, veri kümesini bölmeden önce gözlemleri rastgele seçmek sorunu çözmelidir. Daha sonra gösterildiği gibi ekstrapolasyondan bir enterpolasyon problemi haline gelir.

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.