2013-02-13 7 views
16

Ben skolearn 's python içinde lojistik regresyon ile bir sınıflandırma problemi çözüyorum.sklearn lojistik regresyon

Sorunum genel/genel bir sorundur. İki sınıf/sonuç (pozitif/negatif veya 1/0) içeren bir veri kümem var, ancak set oldukça dengesiz. ~% 5 pozitif ve ~% 95 negatif vardır.

Bunun gibi dengesiz bir problemle başa çıkmanın birçok yolu olduğunu biliyorum, ancak sklearn paketini kullanarak düzgün bir şekilde nasıl uygulanacağına dair iyi bir açıklama bulamadı.

Şimdiye kadar yaptığım şey, pozitif sonuçlu ve eşit sayıda rastgele seçilmiş negatif giriş içeren girişler seçerek dengeli bir antrenman seti oluşturmaktır. Daha sonra modeli bu sete göre eğitebilirim, ancak modeli değiştirmeden sonra orijinal dengesiz popülasyonda/sette nasıl çalışacağım konusunda takılıyorum.

Bunu yapmak için belirli adımlar nelerdir? Sklearn belgelerini ve örneklerini döktüm ve iyi bir açıklama bulamadım.

cevap

16

class_weight="auto" sınıflandırıcınıza geçiş yapmayı denediniz mi? Sklearn'deki tüm sınıflandırıcılar bunu desteklemez, ancak bazıları bunu yapar. Belgelerini kontrol et. Ayrıca, negatif örnekler ve/veya aşırı örnekleme pozitif örneklerini (potansiyel olarak biraz hafif gauss özellikli gürültü ekleyerek) rastgele bırakarak veri kümenizi yeniden dengeleyebilirsiniz.

+0

Evet, class_weight = 'auto' harika çalışıyor. Yerleşik/kara kutu otomatik ağırlığını kullanmama avantajı var mı, bunun yerine eğitim setini yeniden dengelemek (aslında yaptığım gibi)? Ne olursa olsun, antrenman setini dengeleme yaklaşımını ele alsaydım, dengesiz bir test setine uygulamak için fit/eğitimli modeli nasıl ayarlayabilirim? – agentscully

+7

Bu kara kutu değil: sadece algoritma tarafından optimize edilen ampirik amaç fonksiyonundaki örnekleri yeniden ağırlıklandırıyor. Aşırı temsil edilen sınıflar düşüktür çünkü eğitim daha hızlıdır :) ancak, özellikle de modeliniz zaten aşırı bir rejimde bulunuyorsa (tren ve test puanları arasında önemli bir boşluk varsa) kötü olan verileri düşürüyorsunuz. Aşırı örnekleme genellikle matematiksel olarak yeniden ağırlıklandırmaya eşdeğerdir, ancak yinelenen işlemler nedeniyle daha yavaştır. – ogrisel

0

@agentscully aşağıdaki kağıtları,

[cezalandırdı] (https://www.jair.org/media/953/live-953-2037-jair.pdf) okudunuz. Aynı şeyi çok bilgilendirici buldum. İşte Repo'un bağlantısı. hedef sınıfları dengeleme konusunda gitmek, ya sen nasıl kullanabileceğinizi bağlı

'auto'
  • : ya da 'dengeli' ya da sınıf oranı ne kendinizi {belirtmek (yeni bir sürüme 0.17 önerilmiyor) 0: 0.1, 1: 0.9}.
  • 'dengeli': Bu mod

n_samples/(n_classes * np.bincount(y) daha anlayış gerekiyorsa bana, bildirin sınıf frekanslarına ağırlıkları ters orantılı olarak ayarlar.