Makine Öğrenmesi
Veri hazırlama
SVM için veriyi hazırlar ve ölçeklersin.
Proje: müşteri kaybı tahmini
Bu projede bir abonelik hizmetinin hangi müşterilerinin ayrılacağını tahmin edeceğiz. Veri yapaydır ama gerçek projelerin üç zorluğunu taşır: 8 özellik, %5 eksik değer ve dengesiz sınıflar (müşterilerin yaklaşık %20'si ayrılıyor).
X, y = make_classification(n_samples=600, n_features=8, n_informative=4,
weights=[0.8, 0.2], random_state=7)
X[rng.random(X.shape) < 0.05] = np.nan # %5 eksik
Hedef: ayrılacak müşterileri (sınıf 1) mümkün olduğunca yakalamak. Bu yüzden ana metrik doğruluk değil F1 olacak.
Veriyi tanıma
İlk inceleme: sınıf dağılımı, sütun başına eksik sayısı ve katmanlı bölme. Eksik değerleri ön işleme adımında pipeline içinde dolduracağız:
print(np.bincount(y)) # sınıf dağılımı
print(np.isnan(X).sum(axis=0)) # sütun başına eksik
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=0, stratify=y)
stratify=y, azınlık sınıfının test kümesinde de aynı oranda bulunmasını sağlar.
Uygulama Sınıfları ve eksikleri say
Sınıf dağılımını np.bincount ile, toplam eksik değer sayısını np.isnan(X).sum() ile yazdır. Ardından test_size=0.25, random_state=0, stratify=y ile bölüp test kümesindeki sınıf dağılımını yazdır.
Örnek çözümü göster
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(n_samples=600, n_features=8, n_informative=4, weights=[0.8, 0.2], random_state=7)
rng = np.random.default_rng(7)
X[rng.random(X.shape) < 0.05] = np.nan
print(np.bincount(y))
print(np.isnan(X).sum())
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)
print(np.bincount(y_test))
Kendini test et
-
Bu projede neden doğruluk ana metrik değildir?
- Herkese "kalır" diyen model bile %80 alır
- Hesaplanamaz
- Eksik değer yüzünden
- Regresyon olduğu için
Cevabı göster
Herkese "kalır" diyen model bile %80 alır — Dengesiz sınıflarda doğruluk çoğunluk sınıfını ödüllendirir.
-
Sütun başına eksik değerleri say.
print(np.isnan(X).sum(____))
Cevabı göster
print(np.isnan(X).sum(axis=0))
-
Zorlukları çözümlerle eşleştir.
- Eksik değer
- SimpleImputer
- Dengesiz sınıf
- stratify ve F1
- Farklı ölçekler
- StandardScaler
- Ayar seçimi
- GridSearchCV
Sıradaki ders: Model eğitimi