Dengesiz Sinir Ağları (CNN) ile dengesiz bir veri seti nasıl sınıflandırılır?


10

İkili sınıflandırma görevinde dengesiz bir veri setim var, burada pozitifler negatiflere karşı% 0.3'e karşı% 99.7. Pozitif ve negatifler arasındaki boşluk çok büyük. Bir CNN'yi MNIST probleminde kullanılan yapı ile eğittiğimde, test sonucu yüksek bir Yanlış Negatif Oran gösterir. Ayrıca, eğitim hatası eğrisi başlangıçta birkaç dönemde hızla düşer, ancak sonraki dönemlerde aynı değer olarak kalır.

Lütfen bu sorunu işlemek için bir yol önerebilir misiniz? Teşekkürler!

Yanıtlar:


10

Bunun nedeni, bir mini parti aldığınızda, (burada oranların oranı göz önüne alındığında) mini bir partinin pozitif örneklerin içermesi çok daha az olasıdır. Böylece negatif sınıfın modelini öğrenecek ve birkaç dönemden sonra her şey negatif sınıf olarak sınıflandırılacak.

Böyle bir durumu ele almanın iki olası yolu vardır.

  1. Oranların% 0.3 ila% 99.7 olduğu düşünüldüğünde, bu çok eğri bir veri kümesidir. Her 1000 örnek için 3 pozitif sınıf örneğiniz yok. Daha olumlu sınıflar alarak veri kümesini dengelemeye bakmanız gerektiğini söyleyebilirim. Gidip olabildiğince çok olumlu örnek alın. Ardından, daha dengeli bir veri kümesi kullanabilirsiniz. Örneğin, 1000 pozitif örnek alabilir ve daha sonra rastgele bir 1000 negatif örnek kümesi seçebilir ve sınıflandırıcıyı oluşturabilirsiniz. Şimdi, her iki sınıfı da öğrenebilmelidir.

  2. Mini partiden sonra ağırlıkları güncellerken ağırlıklı bir hata ölçüsü kullanın. Ağırlıklar, herhangi bir mini parti sırasında pozitif ve negatif sınıfların örnek sayısı ile orantılı olarak güncellenir. Şimdi, 3: 1000 oranlarıyla verilen mevcut durumda, bu hile bile işe yaramayabilir. Dolayısıyla, 297 daha fazla pozitif örnek alarak ve bunları 1000 negatif örnekle birleştirerek 300: 1000 gibi bir orana ulaşmayı deneyebilirsiniz. Daha sonra 300: 1000 oranıyla, mini partiler sırasında her sınıftaki örnek sayısına göre hatayı ağırlıklandırmalısınız. Bu çalışmalı.


Burada en uygun oranın ne olduğunu biliyor musunuz? saat 3:10 mu yoksa başka bir şey mi?
Christopher

4

Neden burada CNN'leri kullanmak istiyorsunuz? Aslında dengesiz verileri işleyen diğer modelleri düşündünüz mü?

Örneğin, aşağıdaki iki tekniğin benim için gerçekten iyi çalıştığını gördüm:

  • SMOTE Arttırmalı Rastgele Ormanlar : SMOTEÇoğunluk sınıfını örnekleyen ve azınlık sınıfını ayarlanabilir yüzdelerle aşırı örnekleyen bir melez kullanın . Egzersiz setindeki yanıt değişkeninizin dağılımına bağlı olarak bu yüzdeleri seçin. Bu verileri RF modelinize besleyin. RF'leriniz için en iyi parametre ayarlarını bulmak için her zaman çapraz doğrulayın / ızgara araması yapın.

  • Hiper parametre optimizasyonu ile XGBoost : Model için en iyi parametre ayarlarını bulmak için tekrar çapraz doğrulayın veya gird-arama gerçekleştirin. Ayrıca, xgboostpozitif ve negatif sınıf ağırlıklarını kullanarak dengelemenize izin verir scale_pos_weight. Tam bir liste için parametre belgelerine bakın .

Ayrıca, üzerinde çalıştığım veri kümesinin aynı çarpıklık yüzdesine sahip olduğunu ve 0.941 ve 0.71'lik bir Hassasiyet skoru elde edebildiğimi eklemeliyim xgboost, yani model gerçek pozitifleri oldukça doğru bir şekilde tahmin ediyor ve benim için iyi.

(Üzgünüm, yorum bırakamıyorum, yeterli itibar yok ve gerçekten neden CNN'leri seçtiğinizi bilmek istedim)


1

Dengesiz veri seti tüm alanlarda yaygın bir konudur ve özellikle bilgisayarla görme ve Evrişimli Sinir Ağları (CNN) tarafından ele alınan problemlerle ilgili değildir.

Bu sorunu çözmek için, azınlık sınıflarını fazla örnekleyerek veya az örnekleme çoğunluk sınıflarını (veya her ikisini) kullanarak veri kümenizi dengelemeye çalışmalısınız. Tartışmalı olarak, yukarıda belirtildiği gibi SMOTE (Sentetik Azınlık Aşırı Örnekleme Tekniği) algoritması iyi bir seçim olacaktır. Burada farklı aşırı örnekleme algoritmalarının bir karşılaştırmasını bulabilirsiniz. Bir Python kullanıcısıysanız, dengesiz öğrenme , veri kümelerini dengelemek için birçok yararlı teknik uygulayan güzel bir kütüphanedir.

Öte yandan, görüntüleri sınıflandırmaya çalışıyorsanız, veri kümesi boyutunuzu artırmanın güzel bir yolu onu büyütmektir (örneğin, benzer görüntüler, ancak orijinal görüntülere göre döndürülmüş / kaydırılmış küçük bit gibi makul sentetik örnekler oluşturarak). Bazen daha iyi bir denge elde etmek için azınlık sınıflarını güçlendirmeyi faydalı bulabilirsiniz. Keras ImageDataGenerator sınıfı bu amaç için iyi bir araçtır.

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.