Python Scikit-Learn ile Diğer SVM Lezzetlerini Uygulama

Python Scikit-Learn ile Diğer SVM Lezzetlerini Uygulama

Giriş

Bu kılavuz, Destek Vektör Makineleri (SVM'ler) ile ilgili üç kılavuzun üçüncü ve son bölümüdür. Bu kılavuzda, sahte banknot kullanım durumuyla çalışmaya devam edeceğiz, SVM'lerin arkasındaki genel fikir hakkında hızlı bir özet yapacağız, çekirdek numarasının ne olduğunu anlayacağız ve Scikit-Learn ile farklı türde doğrusal olmayan çekirdekler uygulayacağız.

Eksiksiz DVM kılavuzları serisinde, diğer DVM türleri hakkında bilgi edinmenin yanı sıra, basit SVM, SVM önceden tanımlanmış parametreler, C ve Gamma hiperparametreleri ve bunların ızgara arama ve çapraz doğrulama ile nasıl ayarlanabileceğini de öğreneceksiniz.

Önceki rehberleri okumak isterseniz ilk iki rehbere göz atabilir veya en çok hangi konuların ilginizi çektiğini görebilirsiniz. Her kılavuzda ele alınan konuların tablosu aşağıdadır:

  1. Python Scikit-Learn ile SVM ve Kernel SVM Uygulaması
  • Kullanım örneği: Banknotları unutun
  • SVM'lerin arka planı
  • Basit (Doğrusal) SVM Modeli
    • Veri Kümesi Hakkında
    • Veri Kümesini İçe Aktarma
    • Veri Kümesini Keşfetmek
  • Scikit-Learn ile SVM Uygulama
    • Verileri Eğitim/Test Setlerine Bölme
    • Modeli Eğitmek
    • Tahminler Yapmak
    • Modelin Değerlendirilmesi
    • Sonuçları Yorumlama
  1. SVM Hiperparametrelerini Anlamak
  • C Hiperparametresi
  • Gama Hiperparametresi

3. Diğer SVM çeşitlerini Python'un Scikit-Learn'ü ile uygulamak

  • SVM'lerin Genel Fikri (bir özet)
  • Çekirdek (Hile) SVM
  • Scikit-Learn ile Doğrusal Olmayan Çekirdek SVM'yi Uygulama
  • Kütüphaneleri İçe Aktarma
    • Veri Kümesini İçe Aktarma
    • Verileri Unsurlara (X) ve Hedefe (y) Bölme
    • Verileri Tren/Test Setlerine Bölme
    • Algoritmayı Eğitmek
  • polinom çekirdek
    • Tahminler Yapmak
    • Algoritmayı Değerlendirmek
  • Gauss çekirdeği
    • Tahmin ve Değerlendirme
  • Sigmoid Çekirdek
    • Tahmin ve Değerlendirme
  • Doğrusal Olmayan Çekirdek Performanslarının Karşılaştırılması

Bazı ilginç SVM çekirdek varyasyonlarını görmeden önce SVM'nin neyle ilgili olduğunu hatırlayalım.

SVM'lerin Genel Fikri

İki boyutta doğrusal olarak ayrılabilen veriler söz konusu olduğunda (Şekil 1'de gösterildiği gibi), tipik makine öğrenimi algoritması yaklaşımı, verileri yanlış sınıflandırma hatası en aza indirilecek şekilde bölen bir sınır bulmaya çalışmak olacaktır. Şekil 1'e yakından bakarsanız, veri noktalarını doğru şekilde bölen birkaç sınır (sonsuz) olabileceğine dikkat edin. İki kesikli çizgi ve düz çizgi, verilerin geçerli sınıflandırmalarıdır.

Çoklu Karar Sınırları

Şekil 1: Çoklu Karar Sınırları

SVM seçtiğinde karar sınırı, kendisi ile sınıfların en yakın veri noktaları arasındaki mesafeyi maksimize eden bir sınır seçer. En yakın veri noktalarının destek vektörleri olduğunu ve mesafenin şu şekilde parametrelendirilebileceğini zaten biliyoruz: C ve gamma hiperparametreler.

Bu karar sınırını hesaplarken, algoritma kaç noktanın dikkate alınacağını ve marjın ne kadar ileri gidebileceğini seçer - bu bir marj maksimizasyon problemi yapılandırır. Bu marj maksimizasyon problemini çözerken, DVM destek vektörlerini kullanır (Şekil 2'de görüldüğü gibi) ve marj mesafesini daha büyük tutan optimal değerlerin ne olduğunu bulmaya çalışırken, kullanılan fonksiyona göre daha fazla noktayı doğru şekilde sınıflandırır. verileri ayırın.

Destek Vektörleri ile Karar Sınırı

Şekil 2: Destek Vektörleri ile Karar Sınırı

Bu nedenle DVM, yalnızca bir karar sınırı bulmadığı, aynı zamanda en uygun karar sınırını bulduğunda diğer sınıflandırma algoritmalarından farklıdır.

Destek vektörlerini bulmanın, karar sınırı ile destek vektörleri arasındaki marjı hesaplamanın ve bu marjı maksimize etmenin arkasında yer alan istatistiklerden ve hesaplama yöntemlerinden türetilen karmaşık matematik vardır. Bu kez matematiğin nasıl işlediğinin ayrıntılarına girmeyeceğiz.

Daha derine inmek ve makine öğrenimi algoritmalarının bir tür gizemli büyü olmadığından emin olmak her zaman önemlidir, ancak şu anda her matematiksel ayrıntıyı bilmemek algoritmayı yürütüp sonuç almanızı engellemedi ve etmeyecektir.

Önerileri: Artık algoritmik sürecin bir özetini yaptığımıza göre, veri noktaları arasındaki mesafenin SVM'nin seçeceği karar sınırını etkileyeceği açıktır, bu nedenle, verileri ölçeklendirme genellikle bir SVM sınıflandırıcısı kullanılırken gereklidir. kullanmayı dene Scikit-learn'ün Standart Ölçekleyici yöntemi verileri hazırlamak ve ardından sonuçlarda bir fark olup olmadığını görmek için kodları tekrar çalıştırmak.

Çekirdek (Hile) SVM

Önceki bölümde, doğrusal olarak ayrılabilir veriler için en uygun karar sınırını bulmak için nasıl kullanılabileceğini görerek DVM'nin genel fikrini hatırladık ve düzenledik. Bununla birlikte, Şekil 3'te gösterilen gibi doğrusal olarak ayrılamayan veriler söz konusu olduğunda, düz bir çizginin bir karar sınırı olarak kullanılamayacağını zaten biliyoruz.

Doğrusal Olarak Ayrılamayan Veriler

Şekil 3: Doğrusal Olarak Ayrılamayan Veriler

Bunun yerine, başlangıçta tartıştığımız Kernel SVM adı verilen değiştirilmiş SVM sürümünü kullanabiliriz.

Temel olarak, çekirdek SVM'nin yapacağı şey, daha düşük boyutlardaki doğrusal olarak ayrılamayan verileri daha yüksek boyutlarda karşılık gelen forma yansıtmaktır. Bu bir hiledir, çünkü doğrusal olarak ayrılamayan verileri daha yüksek boyutlarda yansıtırken, veri şekli ayrılabilir hale gelecek şekilde değişir. Örneğin, 3 boyut düşünüldüğünde, her sınıftan veri noktaları farklı bir boyutta tahsis edilerek ayrılabilir hale gelebilir. Veri boyutlarını artırmanın bir yolu, onu üstelleştirmek olabilir. Yine, bunun içinde karmaşık matematik var ama SVM'yi kullanmak için bu konuda endişelenmenize gerek yok. Bunun yerine, doğrusal olmayan çekirdekleri doğrusal çekirdeği kullandığımız şekilde uygulamak ve kullanmak için Python'un Scikit-Learn kitaplığını kullanabiliriz.

Scikit-Learn ile Doğrusal Olmayan Çekirdek SVM'yi Uygulama

Bu bölümde, zaten bildiğimiz dört özelliğe göre bir banknotun gerçek mi yoksa sahte mi olduğunu tahmin etmek için aynı veri setini kullanacağız.

Geri kalan adımların tipik makine öğrenimi adımları olduğunu ve Doğrusal Olmayan Çekirdek SVM'lerimizi eğittiğimiz kısma gelene kadar çok az açıklama gerektirdiğini göreceksiniz.

Kütüphaneleri İçe Aktarma

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from sklearn.model_selection import train_test_split

Veri Kümesini İçe Aktarma

data_link = "https://archive.ics.uci.edu/ml/machine-learning-databases/00267/data_banknote_authentication.txt"
col_names = ["variance", "skewness", "curtosis", "entropy", "class"] bankdata = pd.read_csv(data_link, names=col_names, sep=",", header=None)
bankdata.head()mes)

Verileri Unsurlara (X) ve Hedefe (y) Bölme

X = bankdata.drop('class', axis=1)
y = bankdata['class']

Verileri Eğitim/Test Setlerine Bölme

SEED = 42 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.20, random_state = SEED)

Algoritmayı Eğitmek

Çekirdek SVM'yi eğitmek için aynısını kullanacağız SVC Scikit-Learn sınıfı svm kütüphane. Aradaki fark, çekirdek parametresinin değerinde yatmaktadır. SVC sınıf.

Basit SVM durumunda, çekirdek parametresi için değer olarak "doğrusal" kullandık. Ancak, daha önce de belirttiğimiz gibi, çekirdek SVM için Gauss, polinom, sigmoid veya hesaplanabilir çekirdekler kullanabiliriz. Polinom, Gauss ve sigmoid çekirdekleri uygulayacağız ve hangisinin daha yüksek bir metrikle sınıflarımıza uyduğunu görmek için son metriklerine bakacağız.

1. Polinom çekirdeği

Cebirde, bir polinom şu formun bir ifadesidir:

$$
2a*b^3 + 4a – 9
$$

Bunun gibi değişkenleri vardır. a ve b, sabitler, örneğimizde, 9 ve katsayılar (değişkenlerin eşlik ettiği sabitler), örneğin 2 ve 4. 3 polinomun derecesi olarak kabul edilir.

Bir polinom fonksiyonu kullanırken en iyi şekilde tanımlanabilecek veri türleri vardır, burada çekirdeğin yapacağı şey, verilerimizi derecesini seçeceğimiz bir polinomla eşlemektir. Derece ne kadar yüksek olursa, işlev verilere o kadar fazla yaklaşmaya çalışır, bu nedenle karar sınırı daha esnektir (ve fazla uydurmaya daha yatkındır) - derece ne kadar düşükse, o kadar az esnektir.

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

Yani, uygulanması için polinom çekirdeğiseçmenin yanı sıra, poly çekirdek için bir değer de ileteceğiz. degree parametresi SVC sınıf. Aşağıda kodudur:

from sklearn.svm import SVC
svc_poly = SVC(kernel='poly', degree=8)
svc_poly.fit(X_train, y_train)

Tahminler Yapmak

Şimdi, algoritmayı eğittikten sonraki adım, test verileri üzerinde tahminler yapmaktır.

Daha önce yaptığımız gibi, bunu yapmak için aşağıdaki betiği çalıştırabiliriz:

y_pred_poly = svclassifier.predict(X_test)

Algoritmayı Değerlendirmek

Her zaman olduğu gibi, son adım polinom çekirdeği üzerinde değerlendirmeler yapmaktır. Sınıflandırma raporu ve karışıklık matrisi kodunu birkaç kez tekrarladığımız için, bunu bir fonksiyona dönüştürelim. display_results ilgilileri aldıktan sonra y_test, y_pred ve Seaborn'un kafa karışıklığı matrisinin başlığı cm_title:

def display_results(y_test, y_pred, cm_title): cm = confusion_matrix(y_test,y_pred) sns.heatmap(cm, annot=True, fmt='d').set_title(cm_title) print(classification_report(y_test,y_pred))

Şimdi fonksiyonu çağırabilir ve polinom çekirdeği ile elde edilen sonuçlara bakabiliriz:

cm_title_poly = "Confusion matrix with polynomial kernel"
display_results(y_test, y_pred_poly, cm_title_poly)

Çıktı şöyle görünür:

 precision recall f1-score support 0 0.69 1.00 0.81 148 1 1.00 0.46 0.63 127 accuracy 0.75 275 macro avg 0.84 0.73 0.72 275
weighted avg 0.83 0.75 0.73 275

Python'un Scikit-Learn PlatoBlockchain Veri Zekasıyla Diğer SVM Çeşitlerinin Uygulanması. Dikey Arama. Ai.

Şimdi aynı adımları Gaussian ve sigmoid kerneller için tekrarlayabiliriz.

2. Gauss çekirdeği

Gauss çekirdeğini kullanmak için, yalnızca değer olarak 'rbf' belirtmemiz gerekir. kernel SVC sınıfının parametresi:

svc_gaussian = SVC(kernel='rbf', degree=8)
svc_gaussian.fit(X_train, y_train)

Bu çekirdeği daha fazla keşfederken, onu farklı özelliklerle birleştirmek için ızgara aramayı da kullanabilirsiniz. C ve gamma değerleri.

Tahmin ve Değerlendirme

y_pred_gaussian = svc_gaussian.predict(X_test)
cm_title_gaussian = "Confusion matrix with Gaussian kernel"
display_results(y_test, y_pred_gaussian, cm_title_gaussian)

Gauss çekirdeği SVM'sinin çıktısı şöyle görünür:

 precision recall f1-score support 0 1.00 1.00 1.00 148 1 1.00 1.00 1.00 127 accuracy 1.00 275 macro avg 1.00 1.00 1.00 275
weighted avg 1.00 1.00 1.00 275

Python'un Scikit-Learn PlatoBlockchain Veri Zekasıyla Diğer SVM Çeşitlerinin Uygulanması. Dikey Arama. Ai.

3. Sigmoid Çekirdek

Son olarak, Kernel SVM'yi uygulamak için bir sigmoid çekirdeği kullanalım. Aşağıdaki komut dosyasına bir göz atın:

svc_sigmoid = SVC(kernel='sigmoid')
svc_sigmoid.fit(X_train, y_train)

Sigmoid çekirdeğini kullanmak için, değer olarak 'sigmoid' belirtmeniz gerekir. kernel parametresi SVC sınıf.

Tahmin ve Değerlendirme

y_pred_sigmoid = svc_sigmoid.predict(X_test)
cm_title_sigmoid = "Confusion matrix with Sigmoid kernel"
display_results(y_test, y_pred_sigmoid, cm_title_sigmoid)

Sigmoid çekirdeği ile Kernel SVM'nin çıktısı şöyle görünür:

 precision recall f1-score support 0 0.67 0.71 0.69 148 1 0.64 0.59 0.61 127 accuracy 0.65 275 macro avg 0.65 0.65 0.65 275
weighted avg 0.65 0.65 0.65 275

Python'un Scikit-Learn PlatoBlockchain Veri Zekasıyla Diğer SVM Çeşitlerinin Uygulanması. Dikey Arama. Ai.

Doğrusal Olmayan Çekirdek Performanslarının Karşılaştırılması

Farklı doğrusal olmayan çekirdek türlerinin performansını kısaca karşılaştırırsak, sigmoid çekirdeğin en düşük metriklere sahip olduğu, yani en kötü performansa sahip olduğu görünebilir.

Gauss ve polinom çekirdekleri arasında, Gauss çekirdeğinin mükemmel bir %100 tahmin oranına ulaştığını görebiliriz - bu genellikle şüphelidir ve bir fazla uyumu gösterebilirken, polinom çekirdeği sınıf 68'in 1 örneğini yanlış sınıflandırmıştır.

Bu nedenle, hiperparametreleri daha fazla araştırmadan, her işlev şeklini anlamadan, verileri keşfetmeden ve algoritmanın doğru olup olmadığını görmek için tren ve test sonuçlarını karşılaştırmadan her senaryoda veya mevcut senaryomuzda hangi çekirdeğin en iyi performansı gösterdiğine dair kesin ve hızlı bir kural yoktur. genelleme yapıyor.

Her şey, tüm çekirdekleri test etmek ve projenizin bağlamına göre beklenen sonuçları veren parametre ve veri hazırlama kombinasyonuna sahip olanı seçmekle ilgilidir.

Daha İleriye Gidiyoruz – El tipi uçtan uca proje

Meraklı doğanız daha ileri gitmek istemenizi sağlıyor mu? bizim kontrol etmenizi öneririz Rehberli Proje: "Uygulamalı Ev Fiyat Tahmini - Python'da Makine Öğrenimi".

Python'un Scikit-Learn PlatoBlockchain Veri Zekasıyla Diğer SVM Çeşitlerinin Uygulanması. Dikey Arama. Ai.

Bu rehberli projede – güçlü geleneksel makine öğrenimi modellerinin yanı sıra derin öğrenme modellerini nasıl oluşturacağınızı, Ensemble Learning'i nasıl kullanacağınızı ve Scikit-Learn ve Keras modellerinden oluşan bir çantadan ev fiyatlarını tahmin etmek için meta-öğrenicileri eğitmeyi öğreneceksiniz.

Tensorflow'un üzerine inşa edilen derin öğrenme API'si Keras'ı kullanarak mimarileri deneyecek, bir yığın model topluluğu oluşturacak ve bir meta-öğrenci Bir evin fiyatını bulmak için sinir ağı (seviye-1 modeli).

Derin öğrenme şaşırtıcıdır - ancak buna başvurmadan önce, sorunu aşağıdaki gibi daha basit tekniklerle çözmeyi denemeniz önerilir. sığ öğrenme algoritmalar. Temel performansımız bir Rastgele Orman Regresyonu algoritma. Ek olarak – Scikit-Learn aracılığıyla aşağıdaki gibi teknikler aracılığıyla model toplulukları oluşturmayı keşfedeceğiz: sarkık ve oylama.

Bu uçtan uca bir projedir ve tüm Makine Öğrenimi projeleri gibi, bununla başlayacağız - ile Açıklayıcı Veri Analizi, Ardından Veri ön işleme ve sonunda Sığ Bina ve Derin Öğrenme Modelleri daha önce araştırdığımız ve temizlediğimiz verilere uyması için.

Sonuç

Bu makalede DVM'ler hakkında hızlı bir özet yaptık, çekirdek hilesi hakkında çalıştık ve doğrusal olmayan DVM'lerin farklı çeşitlerini uyguladık.

Her bir çekirdeği uygulamanızı ve ilerlemeye devam etmenizi öneririm. Farklı çekirdeklerin her birini oluşturmak için kullanılan matematiği, bunların neden oluşturulduğunu ve hiperparametreleriyle ilgili farklılıkları keşfedebilirsiniz. Bu şekilde, bağlama ve mevcut verilere bağlı olarak teknikleri ve hangi tür çekirdeğin en iyi şekilde uygulanacağını öğreneceksiniz.

Her bir çekirdeğin nasıl çalıştığı ve ne zaman kullanılacağı konusunda net bir anlayışa sahip olmak, yolculuğunuzda size kesinlikle yardımcı olacaktır. İlerlemenin nasıl gittiğini bize bildirin ve mutlu kodlamalar!

Zaman Damgası:

Den fazla Yığın kötüye kullanımı