import numpy as np #Sayısal işlemler ve veri üretimi için kullanılır.
from sklearn import linear_model
#SGDClassifier sınıfı, doğrusal sınıflandırma modeli eğitmek için kullanılır.
np.random.seed(0)
X=np.r_[np.random.randn(10,2)+[1,1], np.random.randn(10,2)]
y=[1]*10+[-1]*10 #İlk 10 noktanın etiketi 1, sonraki 10 noktanın etiketi -1.
sample_weight=100*np.abs(np.random.randn(20))# 20 rastgele ağırlık oluşturulur
sample_weight[:10]*=10 #İlk 10 noktanın ağırlıkları 10 kat artırılır.
#-4 ile 5 arasındaki noktaları içeren karar sınırını çizebilmek için bir grid oluşturur.
xx,yy=np.meshgrid(np.linspace(-4,5,500),np.linspace(-4,5,500))
fig,ax=plt.subplots() #Grafik için bir eksen (ax) oluşturur.
ax.scatter( #Noktaları çizer.
X[:,0]
X[:,1]
c=y, #Sınıflara göre renklendirir.
s=sample_weight, #Noktaların büyüklüğünü ağırlıklarıyla orantılı hale getirir.
alpha=0.9,
cmap=plt.cm.spring,
edgecolor=”black”, #Noktaların kenarlarını siyah çizer.
)
clf=linear_model.SGDClassifier(alpha=0.01, max_iter=100)
clf.fit(X,y)
Z=clf.decision_function(np.c_[xx.ravel(),yy.ravel()])
Z=Z.reshape(xx.shape)
no_weights=ax.contour(xx,yy,Z,levels=[0],linestyles=[“solid”])
clf=linear_model.SGDClassifier(alpha=0.01, max_iter=100)
clf.fit(X,y,sample_weight=sample_weight)
Z=clf.decision_function(np.c_[xx.ravel(),yy.ravel()])
“””
1️⃣SGDClassifier modeli, bir karar fonksiyonu öğrenir.
▪️decision_function(), her noktaya bir sayı (decision score) döndürür.
▪️Bu sayı, sınıfa olan uzaklığı temsil eder.
▪️0 olan noktalar karar sınırı üzerindedir!
Pozitif değerler → Pozitif sınıfa ait (örneğin y = 1).
Negatif değerler → Negatif sınıfa ait (örneğin y = -1).
2️⃣ np.c_[xx.ravel(), yy.ravel()]
▪️xx ve yy, karar sınırını çizmek için oluşturulmuş bir ızgara (grid).
▪️xx.ravel() ve yy.ravel(), bu ızgarayı düz bir liste (vektör) haline getiriyor.
▪️np.c_[…], bu iki vektörü birleştirerek (n, 2) boyutunda bir (x, y) koordinat matrisi oluşturuyor.
▪️Bu işlem, her noktayı modelin karar fonksiyonuna girdi olarak vermek için yapılıyor.
3️⃣ Z Değeri (Çıktı):
▪️clf.decision_function(…), her noktanın decision score’unu hesaplar.
▪️Z artık bir matris şeklindedir ve her (x, y) noktasının sınıfa aitlik skorunu içerir.
▪️Z = 0 olan yerler, sınıfları ayıran karar sınırıdır!
“””
Z=Z.reshape(xx.shape)#Z’yi 1D vektörden, 2D matris formuna çeviriyor.
samples_weights=ax.contour(xx,yy,Z,levels=[0],linestyles=[“dashed”])
“””
▪️Ağırlıklandırılmamış (standart) modeli eğitiyor ve onun karar sınırını (decision boundary) çiziyor.
▪️ax.contour(), kontur çizgilerini (eşit değer eğrilerini) çizmek için kullanılan bir fonksiyondur.
▪️Burada karar fonksiyonunun 0 seviyesindeki eğrisini çiziyoruz, yani sınıfları ayıran sınırı gösteriyoruz.
▪️xx, yy: Koordinat noktalarıdır, karar sınırını çizmek için kullanılır.
▪️Z: Modelin karar fonksiyonunun çıktılarıdır (tahmin edilen değerler).
▪️levels=[0]: Karar sınırını belirler. Z = 0 olan yerlerde, yani sınıfları ayıran çizgide, kontur çizgisi oluşturulur.
“””
no_weights_handles,_=no_weights.legend_elements()
weight_handles,_=samples_weights.legend_elements()
ax.legend(
[no_weights_handles[0],weights_handles[0]],
[“no weights”,”with weights”]
loc=”lower left”,
)
“””
▪️”no weights” → Ağırlıksız modelin karar sınırını temsil eder.
▪️”with weights” → Ağırlıklı modelin karar sınırını temsil eder.
“””
ax.set(xticks=(),yticks=())#X ve Y ekseni işaretleri kaldırılıyor
plt.show()