Dengesiz veri nedir?
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 87/112
- 5 dk
Dengesiz veri, sınıfların eşit olmayan sayıda örneğe sahip olduğu veridir.
Dengesiz veri nedir?
Sınıflardan biri diğerlerinden çok daha az örneğe sahipse veri dengesizdir: sahte işlemler (%0.1), nadir hastalıklar (%1), makine arızaları. Model çoğunluk sınıfını tahmin ederek yüksek doğruluk alır ama asıl aranan azınlığı kaçırır.
print(np.bincount(y)) # [1900 100]
print(np.bincount(y) / len(y)) # [0.95 0.05]Dengesizlik bir hata değil, problemin doğasıdır; çözüm doğru metrik ve doğru eğitim stratejisidir.
Dengesizliğin etkisi
Çoğu model toplam hatayı küçültmeye çalıştığından azınlığın hatalarını önemsemez. Sonuç: azınlık sınıfının duyarlılığı düşer, karar sınırı azınlığın içine kayar.
m = LogisticRegression().fit(X_train, y_train)
p = m.predict(X_test)
print(accuracy_score(y_test, p)) # yüksek
print(recall_score(y_test, p)) # azınlık: düşükBu grupta çözüm yollarını göreceksin: yeniden örnekleme, sınıf ağırlıkları, eşik ayarı ve doğru metrik.
Uygulama Sorunu gör
Sınıf dağılımını yazdır. LogisticRegression() eğit; test doğruluğunu ve azınlık duyarlılığını round(..., 3) ile aynı satırda yazdır.
Başlangıç kodu
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(n_samples=2000, n_features=10, n_informative=4, weights=[0.95, 0.05], flip_y=0, random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0, stratify=y)
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, recall_score
# buraya yazÖrnek çözüm
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(n_samples=2000, n_features=10, n_informative=4, weights=[0.95, 0.05], flip_y=0, random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0, stratify=y)
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, recall_score
print(np.bincount(y))
m = LogisticRegression().fit(X_train, y_train)
p = m.predict(X_test)
print(round(accuracy_score(y_test, p), 3), round(recall_score(y_test, p), 3))Beklenen çıktı
[1900 100] 0.95 0.033
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 %5 azınlıklı veride her şeye "çoğunluk" diyen modelin doğruluğu kaçtır?
- 0
- 0.95 Doğru cevap
- 0.05
- 0.5
Açıklama: Doğruluk yüksek görünür ama azınlık duyarlılığı 0'dır.
2 Sınıf oranlarını hesapla.
print(np.bincount(y) / ____)
print(np.bincount(y) / len(y))
Açıklama: Sayımlar örnek sayısına bölünerek oranlar elde edilir.
3 Örnekleri eşleştir.
| Kavram | Anlamı |
|---|---|
sahtekârlık |
Çok nadir azınlık |
çoğunluk tahmini |
Yüksek doğruluk, sıfır duyarlılık |
stratify |
Oranı korur |
duyarlılık |
Azınlığı yakalama |