CodeBlanks Logo Icon CodeBlanks

Marj

Marj, hiperdüzlemin iki sınıfa en yakın noktalara olan uzaklığıdır.

Marj

Marj, sınır ile en yakın noktalar arasındaki boşluktur. Doğrusal SVM w·x + b = 0 sınırını, marj genişliği 2 / ‖w‖ en büyük olacak biçimde seçer. Geniş marj, yeni noktalarda daha güvenli kararlar demektir.

m = SVC(kernel="linear", C=1000).fit(X, y)   # sert marja yakın
w = m.coef_[0]
print(2 / np.linalg.norm(w))   # marj genişliği

Destek vektörlerinde |w·x + b| = 1 olur; bu noktalar marjın kenarındadır.

Sert ve yumuşak marj

Sert marj hiçbir noktanın marj içine girmesine izin vermez; veri tam ayrılamıyorsa çözüm yoktur ve tek bir aykırı değer sınırı çok kaydırır. Yumuşak marj bazı ihlallere ceza karşılığında izin verir; denge C ile ayarlanır.

# C büyük: ihlal pahalı -> dar marj, eğitime sıkı uyum
# C küçük: ihlal ucuz  -> geniş marj, daha düzgün sınır

Gerçek verilerin neredeyse hepsi gürültülüdür; bu yüzden pratikte her zaman yumuşak marj kullanılır.

Uygulama Marjı ölç

SVC(kernel="linear", C=1000) eğit. Marj genişliğini 2 / np.linalg.norm(m.coef_[0]) ile hesaplayıp round(..., 3) ile yazdır. Ardından destek vektörlerinde decision_function değerlerinin mutlak değerini np.round(..., 2) ile yazdır.

Başlangıç kodu

model.py
import numpy as np
from sklearn.svm import SVC

X = np.array([[0, 0], [1, 0], [0, 1], [3, 3], [4, 3], [3, 4]])
y = np.array([0, 0, 0, 1, 1, 1])

# buraya yaz

Örnek çözüm

model.py
import numpy as np
from sklearn.svm import SVC

X = np.array([[0, 0], [1, 0], [0, 1], [3, 3], [4, 3], [3, 4]])
y = np.array([0, 0, 0, 1, 1, 1])

m = SVC(kernel="linear", C=1000).fit(X, y)
print(round(2 / np.linalg.norm(m.coef_[0]), 3))
print(np.round(np.abs(m.decision_function(m.support_vectors_)), 2))

Beklenen çıktı

3.536
[1. 1. 1.]

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Marjı büyütmek ‖w‖ için ne demektir?

  • ‖w‖ küçülür Doğru cevap
  • ‖w‖ büyür
  • ‖w‖ değişmez
  • ‖w‖ sıfır olur

Açıklama: Marj 2/‖w‖ olduğu için ağırlık normu küçüldükçe marj genişler.

2 Ağırlık vektörünün normunu hesapla.

Soru
marj = 2 / np.linalg.____(m.coef_[0])
Cevap
marj = 2 / np.linalg.norm(m.coef_[0])

Açıklama: norm ‖w‖ Öklid uzunluğunu verir.

3 Kavramları eşleştir.

Kavram Anlamı
marj 2 / ‖w‖
sert marj İhlale izin yok
yumuşak marj Cezalı ihlal
|w·x + b| = 1 Destek vektörleri

Orta seviye bölümündeki tüm dersler