class_weightScikit-learn'ün Lojistik Regresyonundaki parametrenin nasıl çalıştığını anlamakta çok sorun yaşıyorum.
Durum
Çok dengesiz bir veri kümesi üzerinde ikili sınıflandırma yapmak için lojistik regresyon kullanmak istiyorum. Sınıflar, 0 (negatif) ve 1 (pozitif) olarak etiketlenmiştir ve gözlemlenen veriler, yaklaşık 19: 1 oranında olup, numunelerin çoğu negatif sonuca sahiptir.
İlk Deneme: Eğitim Verilerini Manuel Olarak Hazırlama
Sahip olduğum verileri eğitim ve test için ayrık kümelere ayırdım (yaklaşık 80/20). Daha sonra eğitim verilerini 19: 1'den farklı oranlarda almak için eğitim verilerini elle rastgele örnekledim; 2: 1 -> 16: 1 arasında.
Daha sonra bu farklı eğitim veri alt kümeleri üzerinde lojistik regresyon eğitimi aldım ve farklı eğitim oranlarının bir fonksiyonu olarak geri çağırmayı (= TP / (TP + FN)) çizdim. Elbette, geri çağırma, gözlenen 19: 1 oranlarına sahip ayrık TEST örneklerinde hesaplandı. Not, farklı modelleri farklı eğitim verileri üzerinde eğitmeme rağmen, geri çağırmayı hepsi için aynı (ayrık) test verileri üzerinde hesapladım.
Sonuçlar beklendiği gibiydi: 2: 1 eğitim oranlarında geri çağırma yaklaşık% 60 idi ve 16: 1'e ulaştığında oldukça hızlı düştü. Geri çağırmanın makul bir şekilde% 5'in üzerinde olduğu 2: 1 -> 6: 1 oranlarında birkaç oran vardı.
İkinci Deneme: Grid Search
Sonra, farklı düzenlileştirme parametrelerini test etmek istedim ve bu yüzden GridSearchCV'yi kullandım ve Cparametrenin yanı sıra parametrenin çeşitli değerlerinden bir ızgara yaptım class_weight. Negatif: pozitif eğitim örneklerinin n: m oranlarını sözlük diline çevirmek için, class_weightsadece aşağıdaki gibi birkaç sözlük belirttiğimi düşündüm:
{ 0:0.67, 1:0.33 } #expected 2:1
{ 0:0.75, 1:0.25 } #expected 3:1
{ 0:0.8, 1:0.2 } #expected 4:1
ve ben de dahil Noneve auto.
Bu sefer sonuçlar tamamen yanlıştı. Tüm hatırlamalarım class_weighthariç her değer için küçük (<0.05) çıktı auto. Bu yüzden sadece class_weightsözlüğün nasıl kurulacağına dair anlayışımın yanlış olduğunu varsayabilirim . İlginç bir şekilde, class_weightızgara aramasında 'auto'nun değeri tüm değerleri için% 59 civarındaydı Cve 1: 1'e denk geldiğini tahmin ettim?
Sorularım
class_weightEğitim verilerinde gerçekte verdiğinizden farklı dengeler elde etmek için doğru şekilde nasıl kullanıyorsunuz ? Spesifik olarak,class_weightnegatif: pozitif eğitim örneklerinin n: m oranlarını kullanmak için hangi sözlüğe geçmeliyim?class_weightGridSearchCV'ye çeşitli sözlükler iletirseniz, çapraz doğrulama sırasında eğitim katlama verilerini sözlüğe göre yeniden dengeleyecek, ancak test katındaki puanlama işlevimi hesaplamak için verilen gerçek örnek oranlarını kullanacak mı? Bu kritiktir, çünkü herhangi bir metrik sadece gözlemlenen oranlardaki verilerden geliyorsa benim için yararlıdır.Oranlara
autogöreclass_weightyapmanın değeri nedir ? Belgeleri okudum ve "veriyi frekansları ile ters orantılı olarak dengelediğini" varsayıyorum sadece 1: 1 anlamına geliyor. Bu doğru mu? Değilse, birisi netleştirebilir mi?