Sklearn Kütüphanesi ile Destek Vektör Makineleri(DVM) Uygulaması
Bu eğitimde Sklearn kütüphanesi kullanarak destek vektör makinesi uygulaması gerçekleştirilecektir. Destek vektör makineleri ile ilgili sunumu aşağıda bulabilirsiniz.
Videolu Anlatım
Kodlar
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn import svm # DVM kütüphanesi
from sklearn.model_selection import train_test_split # eğitim ve test veri seti ayırımı için
from sklearn.metrics import confusion_matrix, classification_report, accuracy_score # eğitim kalitesini ölçmek için
El yazısı rakam tanıma uygulaması¶
Bu örnekte ele alınacak olan veri seti bu adreste bulunan veri setidir. Bu veri setinde 0-10 arasındaki rakamlardan oluşan 10 adet sınıf var. Yapacağımız çalışmada veri setini modelleyerek öğretmenli öğrenme gerçekleştirmeye çalışacağız.
veriseti = datasets.load_digits() # 10 adet sınıftan oluşan veri seti
- Sınıf Sayısı: 10
- Her sınıftaki özellik sayısı: ~180
- Toplam örnek sayısı: 1797
- Boyut: 64
- Alınan değerler: 0-16
type(veriseti)
veriseti sözlük benzeri Bunch yapısındadır ve önemli özellikleri:
- ‘data’, veriler,
- ‘images’, resim değerleri,
- ‘target’, çıktı sonuç değerleri (0-10),
- ‘target_names’, çıktı etiketleri,
- ‘DESCR’, veri setinin tanımı.
veriler = veriseti.data # verisetindeki her bir satırdaki elemanların tutulduğu dizi
veriler[0]
resimler = veriseti.images # 8x8 boyutunda numpy dizisi
resimler[0]
# resim gösterimi yapmak için
plt.gray() # resimleri siyah beyaz göster.
plt.imshow(resimler[0]); # 1. 8x8 piksellik görüntüyü göster
# 0 değeri tam siyah 15 değeri tam beyaz değeri göstermektedir. Aradaki değerler grinin tonlarıdır.
# Sonuçta ortaya çıkan görüntünün hangi sayıya ait olduğunu belirtelim.
ciktilar = veriseti.target # tüm resimlerin sonuçta aldığı gerçek değerler
cikti_isimleri = veriseti.target_names # tüm resimlere ait etiketler
print("gerçek çıktılar: {} değerlerinden oluşur ve {} adet elemana sahiptir.".format(ciktilar, ciktilar.shape))
print("çıktı isimleri: {} değerlerinden oluşur ve {} adet elemana sahiptir.".format(cikti_isimleri, cikti_isimleri.shape))
Öğrenme Aşaması¶
Verisetini ve özelliklerini tanıdıktan sonraki aşamada veriseti üzerinde DVM kullanarak bir model kurmaya çalışacağız. Bu model toplam 1797 resimden oluşan verisetini eğitim ve test veri seti olarak ikiye bölecek. Daha sonra eğitim verisetini kullanarak veriler arasındaki ilişkiyi ve sonuç verisine nasıl gidildiğini öğrenecek. Sonuçta elde ettiği DVM yapısını test veriseti üzerinde deneyerek ne kadar başarılı olduğunu görmeye çalışacak.
Önce verilerimizi eğitim ve test seti olarak ikiye ayıralım.
X_train, X_test, y_train, y_test = train_test_split(veriler, ciktilar, test_size=0.2, random_state=42)
X_train.shape, X_test.shape, y_train.shape, y_test.shape
model = svm.SVC(gamma=0.001, C=100) # sınıflandırıcı(classifier) gamma yükselirse kalite düşer
model.fit(X_train, y_train)
y_predicted = model.predict(X_test)
y_predicted
y_test
plt.imshow(resimler[5]); # 5. resim
veriler[5] # 5. görselin verileri
resimler[5] # 5. görselin matris yapısı
ciktilar[5] # 5. görselin çıktısı
veriler[5].shape # tek satır ve çok sütunlu hale dönüştürmek gerekiyor.
model.predict(veriler[5].reshape(1,-1)) # 5. veriyi modelin tahmini
Eğitimin Performansı¶
confusion_matrix(y_test, y_predicted)
accuracy_score(y_test, y_predicted)
classification_report(y_test,y_predicted)
Iris Veriseti¶
iris = datasets.load_iris()
iris_X, iris_y = datasets.load_iris(return_X_y=True) # direkt X ve y şeklinde değerleri almak için
iris_model = svm.SVC()
iris_model.fit(iris_X, iris_y)
iris_X[5] # beşinci değerler
iris_y[5] # beşinci değerin sınıfı
iris.target_names[iris_y[5]] # 5. gözlemin sınıf ismi
iris_model.predict(iris_X[5].reshape(1,-1)) # modelin tahmini
iris.target_names[iris_model.predict(iris_X[5].reshape(1,-1))] # modelin tahmin sınıfı
Iris Seti Performans Değerleri¶
iris_X_train, iris_X_test, iris_y_train, iris_y_test = train_test_split(iris_X, iris_y, test_size=0.2, random_state=42)
iris_y_predicted = iris_model.predict(iris_X_test)
confusion_matrix(iris_y_test,iris_y_predicted)
accuracy_score(iris_y_test,iris_y_predicted)
classification_report(iris_y_test,iris_y_predicted)
Iris veri setinin test verileri %100 oranda tahmin edilmiş.
Bu örnek adresindeki bilgilerden derlenmiştir.
Okuma ve İzleme Önerileri¶
- https://www.youtube.com/watch?v=g8D5YL6cOSE (Uygulama)
- https://github.com/akshayr89/MNSIST_Handwritten_Digit_Recognition-SVM (Uygulama)
- https://github.com/pramodini18/Digit-recognition-using-SVM (Uygulama)
- https://scikit-learn.org/stable/tutorial/basic/tutorial.html#introduction (Uygulama)
- https://www.youtube.com/watch?v=_PwhiWxHK8o (Teorik kısım)