Kernel fonksiyonları, doğrusal olarak ayrılamayan verileri daha yüksek boyutlu bir uzaya dönüştürerek doğrusal ayrılabilir hale getirir.
Aşağıda tam da bu mantığı simüle eden, 100 veri noktasından oluşan, verileri liste/dizi halinde ekrana yazdıran ve hem 2D (orijinal) hem de 3D (kernel ile dönüştürülmüş) hallerini görselleştiren Python kodunu bulabilirsiniz.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_circles
from sklearn.svm import SVC
# 1. Toplam 100 veriden oluşan dairesel (doğrusal ayrılamayan) veri kümesi üretme
X, y = make_circles(n_samples=100, factor=0.3, noise=0.05, random_state=42)
# Verileri dizi halinde görmen için basıyoruz:
print("--- İLK 10 VERİ NOKTASI (X koordinatları) ---")
print(X[:10])
print("\n--- İLK 10 SINIF ETİKETİ (0: Dış Halka, 1: İç Halka) ---")
print(y[:10])
print(f"\nToplam Veri Sayısı: {len(X)}")
# 2. Görseldeki yüksekliği (Z-ekseni) temsil eden RBF Kernel Fonksiyonu
# RBF mantığı: Merkeze yakın olan verilerin Z değeri yüksek olur, uzaklaşınca 0'a yaklaşır.
gamma = 1.0
z = np.exp(-gamma * np.sum(X**2, axis=1))
# 3. SVM Modeli (RBF Kernel kullanarak eğitiyoruz)
model = SVC(kernel='rbf', C=1.0)
model.fit(X, y)
# 4. Görselleştirme (2D vs 3D)
fig = plt.figure(figsize=(14, 6))
# --- Sol Grafik: 2D Orijinal Veri ---
ax1 = fig.add_subplot(121)
ax1.scatter(X[y == 0, 0], X[y == 0, 1], color='green', label='Sınıf 0 (Yeşil Daire)', s=50)
ax1.scatter(X[y == 1, 0], X[y == 1, 1], color='red', marker='s', label='Sınıf 1 (Kırmızı Kare)', s=50)
ax1.set_title("2D Orijinal Alan (Doğrusal Ayrılamaz)")
ax1.set_xlabel("X1")
ax1.set_ylabel("X2")
ax1.legend()
ax1.grid(True)
# --- Sağ Grafik: 3D Kernel Dönüşümü (Görseldeki Gibi) ---
ax2 = fig.add_subplot(122, projection='3d')
ax2.scatter(X[y == 0, 0], X[y == 0, 1], z[y == 0], color='green', label='Sınıf 0', s=50)
ax2.scatter(X[y == 1, 0], X[y == 1, 1], z[y == 1], color='red', marker='s', label='Sınıf 1', s=50)
# Ayırıcı Düzlemi (Decision Surface) Görselleştirme
xx, yy = np.meshgrid(np.linspace(-1.2, 1.2, 30), np.linspace(-1.2, 1.2, 30))
zz = np.full_like(xx, fill_value=0.5) # 0.5 yüksekliğine yatay bir düzlem çiziyoruz
ax2.plot_surface(xx, yy, zz, alpha=0.3, color='black')
ax2.set_title("3D Yüksek Boyutlu Alan (Karar Düzlemi ile Ayrılmış)")
ax2.set_xlabel("X1")
ax2.set_ylabel("X2")
ax2.set_zlabel("Kernel Dönüşümü (Z)")
plt.tight_layout()
plt.show()
Kodun Mantığı Özetle:
-
2D Uzayda: Veriler
X1veX2koordinatlarına sahiptir. İçteki kırmızı kareler ile dıştaki yeşil daireleri düz bir çizgi ile ayırmak imkansızdır. - RBF Kernel Dönüşümü (Z): Verilerin merkeze olan uzaklığı hesaplanır ve z = e-γ · (x12 + x22) formülü uygulanır. Bu formül içteki kırmızı noktaları yukarı kaldırarak Z ekseninde tepe noktasına taşır.
- 3D Uzayda: Artık araya siyah transparan bir düzlem (Decision Surface) koyarak yeşil ve kırmızı noktaları birbirinden %100 doğrulukla ayırabiliriz.
Kaynaklar
- https://link.springer.com/article/10.1007/s42979-025-03886-6#Sec3
- kaynak2

