Aşırı sığdırma o kadar kötü mü, test hatası daha küçük olsa bile, fazla uygun olan bir model seçmemelisiniz? Hayır. Ama bunu seçmek için bir gerekçe olmalı.
Bu davranış XGBoost ile sınırlı değildir. Tüm makine öğrenme teknikleri arasında ortak bir konu; eksik takma ve fazla takma arasında doğru dengeyi bulma. Resmi tanım, Sapma-varyans dengesidir (Wikipedia) .
Önyargı-varyans dengesi
Aşağıda, modelinizin seçimini haklı çıkarmaya yardımcı olmak için Önyargı-varyans toleransının basitleştirilmesi verilmiştir.
Bir modelin, verilerdeki bilgileri tam olarak kullanamaması durumunda yüksek bir önyargıya sahip olduğunu söylüyoruz . En sık karşılaşılan durum, yanıtın ortalaması veya birkaç güçlü özellik gibi genel bilgilere çok bağımlıdır. Önyargı, değişkenlerin Normal olarak dağıtıldığını veya modelin doğrusal olduğunu varsayarak yanlış varsayımlardan gelebilir.
Bir modelin verilerden çok fazla bilgi kullanıyor olması durumunda yüksek varyansa sahip olduğunu söylüyoruz . Sadece kendisine sunulan ve yeterince iyi genelleştirilmeyen eğitim setinde vahiy olan bilgilere dayanır. Genellikle, eğitim setini değiştirirseniz model çok değişecektir, bu nedenle "yüksek varyans" adı.
Bu tanım, yetersiz ve aşırı uydurma tanımlarına çok benzer. Bununla birlikte, bu tanım, çoğu zaman karşıt olmak için çok basitleştirilmiştir.
- Hem eğitim hem de test hatası yüksekse model uygun değildir. Bu, modelin çok basit olduğu anlamına gelir.
- Test hatası egzersiz hatasından yüksekse model aşırı uyuyor. Bu, modelin çok karmaşık olduğu anlamına gelir.
Bu basitleştirmeler, modelin doğru karmaşıklığını seçmeye yardımcı oldukları için elbette faydalıdır. Ancak önemli bir noktayı göz ardı ediyorlar, (neredeyse) her modelin hem bir önyargıya hem de bir varyans bileşenine sahip olması. Uygun olmayan / aşırı sığdırma açıklaması size çok fazla önyargı / çok fazla varyansınız olduğunu söyler, ancak (neredeyse) her zaman her ikisine de sahipsiniz .
Önyargı varyans dengesi hakkında daha fazla bilgi edinmek isterseniz, bunlar google üzerinden sunulan yararlı görselleştirme ve iyi kaynaklardır. Her makine öğrenimi ders kitabında önyargı-varyans dengesi hakkında bir bölüm olacak, işte birkaç
- İstatistiksel öğrenmeye giriş ve İstatistiksel öğrenmenin öğeleri (burada bulunabilir) .
- Örüntü Tanıma ve Makine Öğrenimi, Christopher Bishop.
- Makine Öğrenimi: Olasılıksal Bir Bakış, Kevin Murphy.
Ayrıca, bana yardımcı olan güzel bir blog yazısı Scott Fortmann-Roe'in Önyargı Varyans Anlayışını Anlamak'tır .
Sorununuz için uygulama
Yani iki modeliniz var,
MARSXGBoostMAE Tren∼ 4.0∼ 0.3Test MAE∼ 4.0∼ 2.4Düşük varyans, daha yüksek sapma ,Yüksek varyans, düşük sapma ,
ve birini seçmelisin. Bunu yapmak için neyin daha iyi bir model olduğunu tanımlamanız gerekir. Kararlarınıza dahil edilmesi gereken parametreler, modelin karmaşıklığı ve performansıdır.
- Kaç tane "birim" karmaşıklık, bir "birim" performansla değiş tokuş etmek istersiniz?
- Daha fazla karmaşıklık, daha yüksek varyans ile ilişkilidir. Modelinizin, eğitim verdiğinizden biraz farklı bir veri kümesinde iyi genelleştirilmesini istiyorsanız, daha az karmaşıklık hedeflemelisiniz.
- Kolayca anlayabileceğiniz bir model istiyorsanız, bunu modelin karmaşıklığını azaltarak performans maliyetiyle yapabilirsiniz.
- Eğitim setinizle aynı üretken süreçten geldiğini bildiğiniz bir veri kümesinde en iyi performansı hedefliyorsanız , test hatasını optimize etmek ve bunu bir metrik olarak kullanmak için karmaşıklığı değiştirebilirsiniz. Bu, egzersiz setiniz daha büyük bir setten rastgele örneklendiğinde gerçekleşir ve modeliniz bu sete uygulanır. Örnek vermek gerekirse, çoğu Kaggle yarışmalarında durum böyledir.
Buradaki amaç "fazla uymayan" bir model bulmak değil. En iyi sapma-varyans dengesine sahip modeli bulmaktır. Bu durumda, XGBoost modeli tarafından gerçekleştirilen önyargıdaki azalmanın, varyanstaki artışı haklı çıkaracak kadar iyi olduğunu iddia ediyorum.
Ne yapabilirsin
Bununla birlikte, hiperparametreleri ayarlayarak muhtemelen daha iyisini yapabilirsiniz.
Tur sayısını artırmak ve öğrenme oranını azaltmak bir olasılıktır. Gradyan yükseltme ile ilgili "garip" bir şey, eğitim hatasının sıfıra çarptığı noktadan daha iyi bir şekilde çalıştırılmasının test hatasını iyileştirmeye devam etmesidir (burada tartışıldığı gibi: Yalnızca Sığ İyiyken Daha Derin Daha İyi Midir? ). Diğer parametreleri ayarladıktan sonra modelinizi veri kümenizde biraz daha uzun süre eğitmeyi deneyebilirsiniz,
Yetiştirdiğiniz ağaçların derinliği başlamak için çok iyi bir yer. Her bir derinlik birimi için, inşa edilecek yaprak sayısını iki katına çıkardığınızı not etmelisiniz. Eğer 16 beden yerine iki beden ağaç yetiştirecekseniz,1 / 214zamanın! Daha küçük ağaçlar yetiştirmeyi denemelisin. Bunun nedeni , ağacın derinliğinin özellik etkileşiminin derecesini temsil etmesi gerektiğidir . Bu jargon olabilir, ancak özellikleriniz 3 derecelik bir etkileşime sahipse (Kabaca: 4 özelliğin kombinasyonu, bu özelliğin + dördüncü kombinasyonundan daha güçlü değildir), o zaman 3'ten büyük boyutta büyüyen ağaçlar zararlı. Üçüncü derinlikteki iki ağaç, dört derinlikteki bir ağaçtan daha fazla genelleme gücüne sahip olacaktır. Bu oldukça karmaşık bir kavram ve şu an buna girmeyeceğim, ancak bu kağıt koleksiyonunu bir başlangıç için kontrol edebilirsiniz . Ayrıca, derin ağaçların yüksek varyansa yol açtığını unutmayın!
Olarak bilinen alt örnekleme kullanılarak torbalama , çelişkileri azaltmak adına harika. Bireysel ağaçlarınız yüksek bir varyansa sahipse, torbalama ağaçları ortalama yapar ve ortalama, bireysel ağaçlardan daha az varyansa sahiptir. Ağaçlarınızın derinliğini ayarladıktan sonra hala yüksek sapma ile karşılaşırsanız, alt örneklemeyi artırmaya çalışın (yani, kullanılan verilerin oranını azaltın). Özellik alanının alt örneklemesi de bu hedefe ulaşır.