CodeBlanks Logo Icon CodeBlanks

Çok sınıflı

Ç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 model

Tahmin 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

model.py
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

model.py
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.

Soru
sinif = p.____(axis=1)
Cevap
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ı

Başlangıç bölümündeki tüm dersler