class_weight
Scikit-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 C
parametrenin 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_weight
sadece 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 None
ve auto
.
Bu sefer sonuçlar tamamen yanlıştı. Tüm hatırlamalarım class_weight
hariç her değer için küçük (<0.05) çıktı auto
. Bu yüzden sadece class_weight
sö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ı C
ve 1: 1'e denk geldiğini tahmin ettim?
Sorularım
class_weight
Eğitim verilerinde gerçekte verdiğinizden farklı dengeler elde etmek için doğru şekilde nasıl kullanıyorsunuz ? Spesifik olarak,class_weight
negatif: pozitif eğitim örneklerinin n: m oranlarını kullanmak için hangi sözlüğe geçmeliyim?class_weight
GridSearchCV'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
auto
göreclass_weight
yapmanı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?