Çok sınıflı
- Makine Öğrenmesi kursu
- Başlangıç
- Ders 61/112
- 5 dk
Çok sınıflı sınıflandırmada ikiden fazla sınıf vardır.
Çok sınıflı sınıflandırma
İkiden fazla sınıf varsa (Iris'in 3 türü, 10 rakam) çoğu scikit-learn sınıflandırıcısı bunu doğrudan destekler. predict_proba her sınıf için bir sütun verir ve satır toplamı 1'dir:
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
m = LogisticRegression(max_iter=1000).fit(X, y)
print(m.classes_) # [0 1 2]
print(m.predict_proba(X[:1]).round(3))max_iter, optimizasyonun yakınsaması için daha fazla adım tanır; uyarı alırsan artır.
Bire karşı hepsi
Doğası gereği ikili olan modeller çok sınıfa bire karşı hepsi (OvR) stratejisiyle genişletilir: her sınıf için "bu sınıf mı, değil mi?" diye ayrı bir model eğitilir, en yüksek skoru veren kazanır.
from sklearn.multiclass import OneVsRestClassifier
from sklearn.svm import LinearSVC
m = OneVsRestClassifier(LinearSVC()).fit(X, y)
print(len(m.estimators_)) # 3: sınıf başına bir modelTahmin edilen sınıf, olasılık dizisinde argmax ile bulunur.
Uygulama Iris'te üç sınıf
Iris'te LogisticRegression(max_iter=1000) eğit. İlk örnek, 51. örnek (indeks 50) ve 101. örnek (indeks 100) için olasılıkları al; argmax(axis=1) ile sınıfları yazdır ve bunun predict sonucuyla aynı olduğunu (... == ...).all() ile yazdır.
Başlangıç kodu
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
X, y = load_iris(return_X_y=True)
secim = X[[0, 50, 100]]
# buraya yazÖrnek çözüm
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
X, y = load_iris(return_X_y=True)
secim = X[[0, 50, 100]]
m = LogisticRegression(max_iter=1000).fit(X, y)
p = m.predict_proba(secim)
sinif = p.argmax(axis=1)
print(sinif)
print((sinif == m.predict(secim)).all())Beklenen çıktı
[0 1 2] True
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 3 sınıflı bir problemde <code>predict_proba(X)</code> sonucunun şekli nedir (X'te 10 örnek)?
- (10,)
- (3, 10)
- (10, 1)
- (10, 3) Doğru cevap
Açıklama: Her örnek için her sınıfın olasılığı: 10 satır, 3 sütun.
2 Olasılıklardan tahmin edilen sınıfları bul.
sinif = p.____(axis=1)
sinif = p.argmax(axis=1)
Açıklama: argmax(axis=1) her satırda en yüksek olasılıklı sınıfın indeksini verir.
3 Kavramları eşleştir.
| Kavram | Anlamı |
|---|---|
OvR |
Sınıf başına bir ikili model |
predict_proba satırı |
Toplamı 1 |
argmax(axis=1) |
En olası sınıf |
max_iter |
Optimizasyon adım sınırı |