• Yapay zeka soru ve sorunlarınızı uygun olan kategorilere açıp yanıt alabilirsiniz...

Scikit-learn ile destek vektör makinesi nasıl kullanılır?

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
664
Mesajlar
689
AI Seviyesi
Yeni
Destek vektör makinesini scikit-learn ile kullanmak için veriyi eğitim ve test kümelerine ayırın, özellikleri ölçeklendirin, uygun bir SVM modelini Pipeline içinde kurup eğitin ve test başarımını ölçün. Aşağıdaki örnek, üç sınıflı bir sınıflandırma problemini baştan sona çalıştırır; sonuç olarak modelin yeni örnekler için sınıf tahmini üretmesini ve başarımını yorumlamayı öğrenirsiniz.

Çalışan en küçük sınıflandırma örneği​


Destek vektör makinesi, sınıfları birbirinden ayıran bir karar sınırı bulur. Sınırın çevresindeki ve modele en fazla katkı veren gözlemler destek vektörleridir. scikit-learn içinde sınıflandırma için en yaygın sınıf SVC sınıfıdır.

Örnekte scikit-learn içindeki gerçek Iris veri kümesinin üç sınıfının tamamını kullanacağız. Her satır bir çiçeği, sütunlar ölçüm özelliklerini temsil eder. Kendi verinizde X özellik matrisi, y hedef sınıf dizisi olmalıdır.

Ön koşul olarak Python ile birlikte scikit-learn ve gerekli temel paketlerin kurulu olması gerekir. Kurulumdan sonra aşağıdaki kod tek dosya olarak çalıştırılabilir.
  1. Veriyi yükleyin ve eğitim-test kümelerine ayırın. Test kümesi modelin eğitim sırasında görmediği verilerden oluşmalıdır; aksi durumda ölçülen başarı gerçeğinden yüksek çıkabilir.
  2. Ölçeklendirme ve SVM modelini Pipeline içinde birleştirin. Özelliklerden biri diğerlerinden çok daha büyük sayısal aralığa sahipse model bundan etkilenebilir. Pipeline, ölçekleme parametrelerini yalnızca eğitim verisinden öğrenir; aynı dönüşümü test verisine ve yeni örneklere de uygulayarak veri sızıntısı riskini azaltır.
  3. Modeli eğitin. fit() çağrısından sonra model, eğitim verilerindeki sınıfları ayıran karar sınırını öğrenir.
  4. Test verisi üzerinde tahmin ve ölçüm yapın. accuracy_score değeri, doğru sınıflandırılan test örneklerinin oranını verir; tek başına her veri kümesinde yeterli bir ölçüt değildir.
Python:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, classification_report

# Örnek veri kümesini yükle
iris = load_iris()
X = iris.data
y = iris.target

# Eğitim ve test verilerini ayır
X_train, X_test, y_train, y_test = train_test_split(
    X,
    y,
    test_size=0.2,
    random_state=42,
    stratify=y
)

# Ölçeklendirme ile SVM'i tek işlem hattında birleştir
model = make_pipeline(
    StandardScaler(),
    SVC(kernel="rbf", C=1.0, gamma="scale")
)

# Eğit
model.fit(X_train, y_train)

# Tahmin yap ve başarımı ölç
y_pred = model.predict(X_test)

print("Doğruluk:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred, target_names=iris.target_names))

# Yeni örnek için sınıf tahmini
new_sample = [[5.1, 3.5, 1.4, 0.2]]
predicted_class = model.predict(new_sample)[0]
print("Tahmin edilen sınıf:", iris.target_names[predicted_class])

Bu örnekte stratify=y, sınıf oranlarının eğitim ve test kümelerinde yaklaşık olarak korunmasına yardım eder; dengesiz bir veri kümesini kendiliğinden dengelemez. random_state aynı kodun aynı bölme ile tekrar çalıştırılmasını sağlar; bu, karşılaştırma yaparken yararlıdır. new_sample içindeki dört değer, eğitim verisindeki dört özellik ile aynı sırada ve aynı ölçü biriminde verilmelidir.

Test doğruluğu yüksekse model bu test bölmesinde çok sayıda örneği doğru sınıflandırmıştır. Bu sonuç, modelin her yeni veri üzerinde aynı başarıyı kesinlikle göstereceğini kanıtlamaz. Özellikle veri kümesi küçükse farklı bölmelerde farklı sonuçlar görülebilir. Daha güvenilir değerlendirme için çapraz doğrulama ve sınıf dağılımına uygun ölçütler kullanın.

SVM ayarlarını nasıl seçmelisiniz?​


SVM'de en önemli ayarlardan biri C parametresidir. Büyük C, eğitim hatalarını daha fazla cezalandırır ve modelin eğitim verisine daha sıkı uymasına yol açabilir. Küçük C daha geniş tolerans bırakır; bu da aşırı öğrenmeyi azaltabilir ancak modelin fazla basit kalmasına neden olabilir.

kernel karar sınırının biçimini belirler. linear doğrusal bir sınır kullanır. rbf doğrusal olmayan ilişkileri modelleyebilir ve genel amaçlı sık kullanılan bir seçenektir. poly polinom temelli sınır kurar. rbf kullanıldığında gamma değeri, tek tek örneklerin karar sınırını ne ölçüde etkilediğini belirler.

Seçimi yalnızca eğitim doğruluğuna bakarak yapmayın. Aşağıdaki ayarlar, hangi durumda başlanabileceğini karşılaştırır.
SeçenekNe zaman başlanır?Dikkat edilmesi gereken
SVC(kernel="linear")Özellik sayısı fazla ve ilişki yaklaşık olarak doğrusal olduğundaDoğrusal olmayan örüntüleri yakalayamayabilir
SVC(kernel="rbf")Karar sınırının doğrusal olmadığı düşünüldüğündeC ve gamma ayarları başarımı önemli ölçüde değiştirebilir
SVC(kernel="poly")Polinom biçimli bir ilişki için gerekçe olduğundaDerece ve diğer ayarlar uygun seçilmezse gereksiz karmaşıklık oluşabilir
SVRHedef değişken sürekli sayısal olduğundaSınıflandırma değil, regresyon problemi çözer
Ayarları elle tek tek denemek yerine eğitim verisi üzerinde GridSearchCV veya RandomizedSearchCV kullanabilirsiniz. Test kümesini ayar seçimi için kullanmayın; test kümesi en son, seçilmiş modelin tarafsız değerlendirmesi için ayrılmalıdır.

Çok sınıflı veriler​


SVC sınıfı ikiden fazla sınıfı doğrudan destekler. Bu nedenle hedef dizinizde örneğin 0, 1 ve 2 sınıfları bulunuyorsa ayrıca her sınıf için ayrı model kurmanız gerekmez. predict() çıktısı, eğitim sırasında görülen sınıf etiketlerinden birini döndürür.

Dengesiz sınıflar​


Bir sınıf diğerlerinden çok daha fazlaysa yalnızca doğruluk oranı yanıltıcı olabilir. Örneğin model çoğunluk sınıfını sürekli tahmin ederek yüksek doğruluk elde edebilir ama azınlık sınıfını hiç yakalayamayabilir. Böyle bir durumda classification_report içindeki precision, recall ve F1-score değerlerini ayrıca inceleyin. Gerekirse SVC(class_weight="balanced") seçeneğini çapraz doğrulama ile değerlendirin.

Modelin sonucunu doğru yorumlama​


Modelin eğitim başarımı test başarımından çok yüksekse aşırı öğrenme ihtimali vardır. C değerini, kernel seçimini veya özellikleri çapraz doğrulama ile yeniden değerlendirin. Eğitim ve test başarımı ikisi de düşükse veri özellikleri sınıfları ayırmak için yetersiz olabilir; bu durumda özelliklerin anlamını, eksik değerleri ve hedef etiketlerinin doğruluğunu kontrol edin.

Tahmin sırasında hata alırsanız önce yeni girdinin eğitimde kullanılan özellik sayısıyla aynı olduğunu kontrol edin. Ölçeklendirme Pipeline içinde olduğundan, yeni veriye ayrıca StandardScaler.fit_transform() uygulamayın; model Pipeline'ını kullanarak doğrudan model.predict(new_sample) çağırın. Ayrıca eğitimde kullanılan sütun sırasını ve ölçü birimlerini değiştirmeyin.

Sonraki uygulama adımı, tek bir test bölmesine bağlı kalmadan aynı Pipeline'ı çapraz doğrulama ile değerlendirmek ve C, kernel ve gerekiyorsa gamma değerlerini yalnızca eğitim verisi üzerinde seçmektir. Böylece test kümesi, model seçimi tamamlandıktan sonra gerçek performansı ölçmek için saklanır.
 
Son düzenleme:

Sen de şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic
Geri
Üst