microsoft power bi python classification analyze support vector machine statistic

Python ile Sınıflandırma Analizleri – Destek Vektör Makinası – DVM

Merhaba, iyi günler.

Bugün; çeşitli veri kümeleri üzerinde özel işlemler ile farklı çözümlemeler için yapılandırılmış gözetimli öğrenme algoritmalarından uzayı tabanlı makine öğrenme yöntemi olan Destek Vektör MakinasıDVM üzerine çeşitli bilgi ve çözümlemeler aktarmaya çalışacağım.

Genel konu özetinin bulunduğu Python Veri Analizi yazısına link üzerinden ulaşabilirsiniz.

(Karar) Destek Vektör Makinesi –  DVM (Support Vector MachineSVM) ; modellediğimiz veri kümemiz üzerinde belirlediğimiz eğitim verilerindeki herhangi bir noktadan en uzak olan iki sınıf arasında bir karar sınırı bulan vektör uzayı tabanlı makine öğrenme yöntemi olarak ifade edilmektedir.

İlk olarak AT&T Labs‘ta  Vladimir Vapnik ve arkadaşları tarafından geliştirilen Destek Vektör Makineleri (DVM) ileri yönde beslemeli yeni bir ağ kategorisi olarak da yorumlanmaktadır.

Destek Vektör Makinası algoritmasının, sınıflandırma problemlerinin çözümlenmesinin doğrultusunda ortaya çıktığı ifade edilmektedir.
İlerleyen zaman dilimlerinde ise regresyon problemleri için de uyarlamaları gerçekleşmiştir.

Zaman geçtikçe çok faklı yaklaşımlar ile uyarlamaları genişletilmiş ve geliştirilmiştir.

Genel manada Veriler (Küme Elemanları – Veri Grupları)

kullanılarak birbirilerinden ayrılmaktadır.

Tek boyut mantığı (temsili olarak);

microsoft power bi python classification analyze support vector machine statistic one dimension point example

Ayrılma Noktası (Point of Departure) : Tek boyutta iki veri grubunu birbirinden ayıran en yakın iki noktanın orta noktası olarak ifadelendirilmektedir.

İki boyutta (temsili olarak);

microsoft power bi python classification analyze support vector machine statistic two dimension example

Destek Vektörleri (Support Vector) : Bir sınıftan (gruplara ait elemanlardan) hiper düzeleme en yakın olan farklı veri grubu noktaları olarak ifadelendirilmektedir.
*(Üst görsel temsili olarak oluşturulmuştur.)

Hiper Düzlem (Hyper Plane) : Bir sınıfa ait iki veri grubunu (en az) birbirinden ayıran düzlem olarak ifadelendirilmektedir.

Marjin (Margin) : En yakın gruba ait veri noktası ve hiper düzlem arasındaki mesafeleri en üst düzeye çıkarmak için doğru hiper düzlemi belirlememize yardımcı olan mesafe olarak ifadelendirilmektedir.

Çeşitli çalışma durumlarında değerlerimiz-örneklerimiz marjinine göre farklı bölgelerde bulunabilir.

microsoft power bi python classification analyze support vector machine statistic margin area hard soft dimension example

Hard Margin : Değerlerimizin-Örneklerimizin marjin bölgesi dışında bulunması olarak ifade edilmektedir.
Soft Margin 
: Değerlerimizin-Örneklerimizin marjin bölgesinde bulunması olarak ifade edilmektedir.

Üç boyut ise (temsili olarak);

microsoft power bi python classification analyze support vector machine statistic three dimension example

şeklinde görselleştirilebilir.
*İki boyutta bulunan aynı çözüm öğeleri üçüncü boyutta da tanımlanmaktadır.

Genel olarak Destek Vektör Makinaları (DVM);

  • Doğrusal Destek Vektör Makinaları ve
  • Doğrusal Olmayan Destek Vektör Makinaları

şeklinde ikiye ayrılmaktadır.

Doğrusal Destek Vektör Makinaları

Doğrusal Destek Vektör Makinası uygulamasında:

Veri grupları doğrular (çizgiler) ile kolay bir şekilde ayrılıp, veriler düzlem-hiper düzlem ile sınıflandırılmaktadır.

Temsili olarak;

microsoft power bi python classification analyze support vector machine statistic two dimension linear example

Doğrusal Olmayan Destek Vektör Makinaları

Doğrusal Olmayan Destek Vektör Makinası uygulamasında:

Veri grupları doğrular (çizgiler) ile ayrılamayabilir (eğri olabilir), veriler düzlem-hiper düzlem ile sınıflandırılamaz ise Çekirdek (Kernel) Fonksiyonu-Yöntemi kullanılır.

Temsili olarak;

microsoft power bi python classification analyze support vector machine statistic two dimension non linear example

Çekirdekleme (Kernel Trick(s))

Düşük boyutlardaki çözümlenemeyen-anlamlandırılamayan verilerin boyutlandırılıp ek işlemler ile işlenerek anlamlandırılması Çekirdekleme (Kernel Trick – Kernel Method) olarak ifade edilmektedir.

Polinomal Çekirdekleme ve  Gaussian Çekirdekleme olarak ikiye ayrılmaktadır.

Polinomal Çekirdekleme (Polynomial Kernel)

Polinomal Çekirdekleme; çalıştığımız uzayda bir üst-alt uzaya geçiş ile boyutlandırma işlemi gerçekleştirdiğimiz-uyguladığımız çözümleme modelidir.

Veri modelleri üzerindeki boyutlandırma işlemlerinde ağırlıklı olarak 2.Boyuttan → 3.Boyuta ya da genel olarak ifade edecek olursak N.Boyut’a geçiş gerçekleşmektedir.
( N∈ Z+ ∧  N ≥ 3 )

Temsili olarak; 

microsoft power bi python classification analyze support vector machine statistic two dimension non linear kernel trick example
Gauss Çekirdekleme (Gaussian RBF-Radial Basis Function/Kernel)

Gauss Çekirdekleme (Gaussian RBF Kernel); Destek Vektör Makinaları belirlenip, her bir noktanın belirli noktalara ne ölçüde benzediğini normal dağılım yöntemi ile hesaplayıp sınıflandırma işlemini gerçekleştirdiğimiz çözümleme modelidir.

Bu modelde dağılım genişliği hiper parametre değeri (Gama – Gamma : γ) ile kontrol edilmektedir.

Çözümleme modele uygulanırken; model Overfit* olmasına karşın gama değeri düşürülür, Underfit* olmasına karşın ise gama değeri arttırılır. 

*Overfit : Modelin veri setini öğrenmek yerine ezberlemesi olarak ifade edilir.
*
Underfit: Modelin veri setini ezberlemek yerine anlamlandırmaya çalışıp anlamlandıramaması olarak ifade edilir.
*Overfitting : Model ve veri seti üzerindeki aşırı uygunluk olarak ifade edilir.

microsoft power bi python classification analyze support vector machine statistic two dimension non linear kernel trick radial bases functions example

Destek Vektör Makinası Örneği

Destek Vektör Makinası uygulamasına örnek olarak, çokça duyulan ve kullanılan Iris Veri Seti üzerinden basit bir örnek ile çözümlemelerde bulunalım.

İlgili veri setine ait csv. uzantılı dosyasına buradan ulaşabilirsiniz.

microsoft power bi iris machine learning data sets support vector machine

Iris Veri Seti 3 Iris bitki türüne (Iris Setosa, Iris Virginica ve Iris Versicolor) ait, her bir türden 50 örnek olmak üzere toplam 150 örnek sayısına sahip bir veri setidir.

Iris Veri Seti içerisinde;

Sınıflar (Türler);

  • Iris Setosa,
  • Iris Versicolor,
  • Iris Virginica.

Veri Özellikleri (Ortak Özellikler);

  • Sepal Uzunluk (cm),
  • Sepal Genişlik (cm),
  • Petal Genişliği (cm)
  • Petal Uzunluk (cm).

özellik ve değerleri bulunmaktadır.

Dilerseniz hızlıca analizimizi gerçekleştirmek için adımlarımızı uygulamaya başlayalım. 

1-Gerçekleştireceğimiz analizler için kullanacağımız kütüphaneleri sırası ile projemize dahil edelim; (Sklearn, Numpy, MatplotLib)

>>> from sklearn import datasets    
>>> from sklearn import svm       
>>> from sklearn.metrics import accuracy_score
>>> import numpy as np
>>> import matplotlib.pyplot as plt

microsoft power bi python classification analyze support vector machine statistic svm example 1

2-Modeli oluşturmak için üzerinde çalışacağımız Iris Veri Seti’ni proje içerisine aktaralım;

>>> iris = datasets.load_iris()

microsoft power bi python classification analyze support vector machine statistic svm example 2

3-Sepal Uzunluk ve Sepal Genişlik üzerinden türler arasındaki korelasyonları gözlemlemek için keşif verisi adımlarımızı sırası ile gerçekleştirelim;

>>> def visualize_sepal_data():
>>> iris = datasets.load_iris()
>>> X = iris.data[:, :2]
>>> y = iris.target
>>> plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.coolwarm)
>>> plt.xlabel(‘Sepal length’)
>>> plt.ylabel(‘Sepal width’)
>>> plt.title(‘Sepal Width & Length’)
>>> plt.show()
>>> visualize_sepal_data()

microsoft power bi python classification analyze support vector machine statistic svm example 3

keşif verilerini işleyerek grafik üzerinde görselleştirelim;

microsoft power bi python classification analyze support vector machine statistic svm example 4

4-Sepal Uzunluk ve Sepal Genişlik üzerinde gerçekleştirdiğimiz türler arasındaki korelasyonları gözlemlemek için keşif verisi adımlarını şimdi Petal Uzunluk ve Petal Genişlik için gerçekleştirelim;

>>> def visualize_petal_data():
>>> iris = datasets.load_iris()
>>> X = iris.data[:, 2:]
>>> y = iris.target
>>> plt.scatter(X[:, 0], X[:, 1], c=y)
>>> plt.xlabel(‘Petal length’)
>>> plt.ylabel(‘Petal width’)
>>> plt.title(‘Petal Width & Length’)
>>> plt.show()
>>> visualize_petal_data()

microsoft power bi python classification analyze support vector machine statistic svm example 5

keşif verilerini işleyerek grafik üzerinde görselleştirelim;

microsoft power bi python classification analyze support vector machine statistic svm example 6

5-Çiçeğin ait olduğu sınıfın türünü tahmin etmek için ilk iki özelliği (Sepal Uzunluk/Genişlik) kullanarak bir DVM / SVM modeli oluşturalım.
(Petal Uzunluk/Genişlik alternatif olarak kullanılabilir.) 

>>> X = iris.data[:, :2]
>>> y = iris.target

#ALTERNATIF KULLANIM.
# X = iris.data[:, 2:]
# y = iris.target

6-Çeşitli çekirdekler kullanarak DVM / SVM karar sınırlarını çizmek için bir model ağacı oluşturalım;

>>> def plotSVM(title):
       x_min, x_max = X[:, 0].min() -1, X[:, 0].max() + 1
       y_min, y_max = X[:, 1].min() – 1, X[:, 1].max() + 1
       h = (x_max / x_min)/100
       xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
       np.arange(y_min, y_max, h))
       plt.subplot(1, 1, 1)
       Z = svc.predict(np.c_[xx.ravel(), yy.ravel()])
       Z = Z.reshape(xx.shape)
       plt.contour(xx, yy, Z,alpha=0.8)
       plt.scatter(X[:, 0], X[:, 1], c=y)
       plt.xlabel(“Sepal length”)
       plt.ylabel(“Sepal width”)
       plt.xlim(xx.min(), xx.max())
       plt.title(title)
       plt.show()

microsoft power bi python classification analyze support vector machine statistic svm example 10

7-Oluşturduğumuz yapımız için Lineer ve Lineer Olmayan (Polinomal ve Gauss) modellemeler üzerinden çekirdek işlemleri gerçekleştirelim;

>>> kernels = [“linear”, “rbf”, “poly”]
       for kernel in kernels:
       svc = svm.SVC(kernel=kernel).fit(X, y)
       plotSVM(“kernel=” + str(kernel))

microsoft power bi python classification analyze support vector machine statistic svm example 11

çekirdek işleme işlemlerimizi gerçekleştirdikten sonra sınıflandırma modelimizi görselleştirirsek;

microsoft power bi python classification analyze support vector machine statistic svm example 7
microsoft power bi python classification analyze support vector machine statistic svm example 8
microsoft power bi python classification analyze support vector machine statistic svm example 9

çıktılarına ulaşırız.

8-Farklı Gama (Gamma : γ) değerleri (0.1, 1, 10, 100) üzerinden çeşitli çekirdekleri gözlemleyerek hiperparametre ayarı oluşturalım;

>>> gammas = [0.1, 1, 10, 100]
       for gamma in gammas:
       svc = svm.SVC(kernel=’rbf’, gamma=gamma).fit(X, y)
       plotSVM(‘gamma=’ + str(gamma))

microsoft power bi python classification analyze support vector machine statistic svm example 23
microsoft power bi python classification analyze support vector machine statistic svm example 12
microsoft power bi python classification analyze support vector machine statistic svm example 13
microsoft power bi python classification analyze support vector machine statistic svm example 14
microsoft power bi python classification analyze support vector machine statistic svm example 15

Genel olarak gama değeri arttıkça model uyumunda artış gözlemlenmektedir.

9-C* (Hata Değeri / Ceza Değeri) parametresi üzerinde belirli değerler (0.1, 1, 10, 100, 1000) belirleyerek gözlemde bulunalım.

C*=Sorunsuz bir karar sınırı ile eğitim noktalarının doğru şekilde sınıflandırılması arasındaki dengeyi kontrol eder.

>>> cs = [0.1, 1, 10, 100, 1000]
       for c in cs:
       svc = svm.SVC(kernel=’rbf’, C=c).fit(X, y)
       plotSVM(‘C=’ + str(c))

microsoft power bi python classification analyze support vector machine statistic svm example 16
microsoft power bi python classification analyze support vector machine statistic svm example 17
microsoft power bi python classification analyze support vector machine statistic svm example 18
microsoft power bi python classification analyze support vector machine statistic svm example 19
microsoft power bi python classification analyze support vector machine statistic svm example 20
microsoft power bi python classification analyze support vector machine statistic svm example 21

Küçük veri kümelerinde C* (Hata Değeri / Ceza Değeri) parametresi  göz ardı edilebilir.
Fakat yüksek ölçekteki veri kümelerinde bu büyük hatalara neden olabilir. 

10-Son olarak ise uyguladığımız modelin doğruluğunu çekirdek modelinde lineer yapıyı (Doğruluk Yüzdesi) baz alarak hesaplayalım;

microsoft power bi python classification analyze support vector machine statistic svm example 22

Oluşturduğumuz DVM / SVM modelimiz bize %82 oranında doğruluk değeri sağlamaktadır.

Burada daha hassas Gama ve C değerleri saptanarak doğruluk değeri optimuma yükseltilebilir.
Böylelikle oluşturacağımız sınıflandırma işlemi için daha net/doğru sonuçlar elde edebiliriz.

İlgili verilerin işlenmesinin yanı sıra görselleştirilmesi de analiz işlemleri adına önem arz etmektedir.

Görselleştirme işlemleri için dilerseniz Python üzerinde ki çeşitli kütüphaneleri kullanarak dilerseniz de geçmiş dönemlerde uygulamış olduğumuz Power BI ile görselleştirme (12) çalışmalarından faydalanabilirsiniz. 

Günlük Hayatta Destek Vektör Makinası Uygulamaları

Avantaj ve Dezavantaj

  1. Düşük ölçekli-kapasiteli veri kümeleri için çok hızlı ve doğruluk oranı yüksek bir yöntemdir.
  2. Doğrusal ve Doğrusal Olmayan veri kümeleri için uygulanabilir.
  3. Yüksek boyutlu veri kümelerinde sonuç odaklı olarak etkili bir çözümdür.
  4. Düşük bir iyileştirme-bakım (Gama/C) ile yüksek doğruluk değerlerine ulaşılabilir. 
  1. Büyük veri kümelerinde eğitim verisi üzerindeki işleme süresi yüksek olduğundan sonuç çıktısı uzun sürmektedir.
  2. İç-içe veri kümelerinde düşük oranda etkili ve hassas olduğundan doğruluk oranları düşüktür.
  3. Çekirdekleme (Kernel Trick) işlemlerinde yüksek ölçüde zaman kaybı oluşturmaktadır.

Bu bölümde genel manada Sınıflandırma metoduna ait ve Destek Vektör Makinası algoritmasına değinmeye çalıştım.

Gelecek yazımda Yapay Sinir Ağları algoritmasını ele almaya çalışacağım.

İyi günler, iyi çalışmalar…

, , , , , , ,

İlgili Yazılar