Destek Vektör Makinesi (SVM)
Giriş
Destek Vektör Makinesi, en popüler makine öğrenimi algoritmalarından biridir. Sadece sınıflandırma için değil, aynı zamanda regresyon problemleri için de kullanılır. Ancak büyük ölçüde, makine öğrenimi alanındaki Sınıflandırma problemlerinde kullanımı gözlemlenmiştir. Birçok kişi, daha az işlem gücü kullanırken dikkate değer bir doğruluk sunduğu için destek vektör makinesini tercih eder. Destek Vektör Makinesi, verileri bir hiper düzlem aracılığıyla ayırır ve yeni veri noktası en uygun kategoriye konur. Support Vector Machine'in temel amacı budur. Bu hiperdüzlem, Destek Vektör Makinesi'nin karar sınırı olarak da adlandırılır. İki veri noktası sınıfını ayırmak için kullanılabilecek çeşitli farklı hiper düzlemler vardır. En büyük kenar boşluğuna sahip bir düzlem bulma - yani,
Örnek vermek
Kedi ile köpeği doğru bir şekilde ayırt edebilen bir model istiyorsak, köpeğe de benzeyen sıra dışı bir kedi gözlemlediğimizi varsayalım. SVM algoritmasını kullanarak böyle bir model oluşturabiliriz. Bu garip hayvanla test etmeden önce, kedi ve köpeklerin çeşitli özelliklerine aşina olabilmesi için modelimizi birkaç kedi ve köpek fotoğrafıyla eğiteceğiz. Sonuç olarak, bu iki veri seti (kedi ve köpek) arasında bir yargı sınırı çizdiği için, kedi ve köpeklerin aşırı durumları destek vektörü tarafından görülecektir. Destek vektörleri onu bir kedi olarak kategorize etmek için kullanılacaktır.
SVM türleri
Lineer SVM : “Doğrusal olarak ayrılabilir veri” terimi, yalnızca tek bir düz çizgi kullanılarak iki gruba ayrılabilen verileri ifade eder. Lineer SVM, bu tür verileri sınıflandırmak için kullanılır ve kullanılan sınıflandırıcı, Lineer SVM sınıflandırıcısı olarak bilinir.
N on-lineer SVM : Lineer Olmayan SVM, lineer olarak ayrılmamış veriler için kullanılır, yani bir veri seti düz bir çizgi kullanılarak sınıflandırılamıyorsa, bu tür veriler lineer olmayan veri olarak adlandırılır ve kullanılan sınıflandırıcı Non olarak adlandırılır. -doğrusal SVM sınıflandırıcısı.
Çalışma
SVM, verileri yüksek boyutlu bir özellik uzayına eşleyerek doğrusal olarak ayrılamaz durumda olsalar bile veri noktalarını kategorilere ayırır. Kategoriler arasında bir ayırıcı tanımlandıktan sonra, ayırıcının hiper düzlem temsilini etkinleştirmek için veriler dönüştürülür. Yeni bir kaydın ait olması gereken grup daha sonra yeni verilerin özellikleri kullanılarak tahmin edilebilir.
Maliyet Fonksiyonu ve Gradyan Güncellemeleri
SVM yönteminin amacı, veri noktaları ile hiperdüzlem arasındaki mesafeyi artırmaktır. Menteşeli kayıp, marjı en üst düzeye çıkarmaya yardımcı olan kayıp işlevidir.
Öngörülen değer ile gerçekleşen değer aynı işarete sahipse maliyet yoktur. Değilse, daha sonra kayıp değerini belirleriz. Maliyet işlevi ayrıca bizden bir düzenlileştirme parametresi alır. Düzenleme parametresinin amacı, marj maksimizasyonu ile kayıp arasında bir denge kurmaktır. Normalleştirme parametresi eklendikten sonra maliyet fonksiyonları aşağıdaki gibi görünür.
Artık kayıp fonksiyonumuz olduğuna göre, ağırlıklara göre kısmi türevler alarak gradyanları bulabiliriz. Gradyanları kullanarak ağırlıklarımızı değiştirebiliriz.
Yalnızca yanlış sınıflandırma olmadığında, yani modelimiz veri noktamızın sınıfını doğru tahmin ettiğinde, normalleştirme parametresinden gradyanı güncellememiz gerekir.
Bir yanlış sınıflandırma olduğunda veya modelimiz bir veri noktasının sınıfını yanlış tahmin ettiğinde bir gradyan güncellemesi gerçekleştirmek için, normalleştirme parametresiyle birlikte kaybı da dahil ederiz.
Örnek Program Parçacığı
Kitaplıkları İçe Aktarma
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
class SVM:
def __init__(self, learning_rate=0.0001, lambda_param=0.001, n_iters=10000):
self.weights = None
self.bias = None
self.lr = learning_rate
self.lambda_param = lambda_param
self.n_iters = n_iters
def fit(self,X,y):
n_samples, n_features = X.shape
y1 = np.where(y <= 0, -1, 1)
self.weights = np.zeros(n_features)
self.bias = 0
for i in range(self.n_iters):
for idx, x_i in enumerate(X):
condition = y1[idx] * (np.dot(x_i, self.weights) - self.bias) >= 1
if condition:
self.weights -= self.lr * (2 * self.lambda_param * self.weights)
else:
self.weights -= self.lr * (2 * self.lambda_param * self.weights - np.dot(x_i, y1[idx]))
self.bias -= self.lr * y1[idx]
def predict(self, X):
approx = np.dot(X, self.weights) - self.bias
return np.sign(approx)
def accuracy(y_true,y_pred):
acc = np.sum(y_true == y_pred)/len(y_true)
return acc
X, y = datasets.make_blobs(n_samples=10, n_features=2, centers=2, cluster_std=1.05, random_state=40)
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=42)
y = np.where(y == 0, -1, 1)
clf = SVM()
clf.fit(X_train,y_train)
predict = clf.predict(X_test)
svm_acc = accuracy(y_test,predict)
print('Accuracy:',svm_acc)
print(f'''
Final Weight:{clf.weights}
Final Bias:{clf.bias}
''')
Son Ağırlık:[0,34494241 0,1443094 ]
Son Sapma: -0,012899999999999977
görselleştirme
def visualize_svm():
def get_hyperplane_value(x, w, b, offset):
return (-w[0] * x + b + offset) / w[1]
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
plt.scatter(X[:,0], X[:,1], marker='x',c=y)
x0_1 = np.amin(X[:,0])
x0_2 = np.amax(X[:,0])
x1_1 = get_hyperplane_value(x0_1, clf.weights, clf.bias, 0)
x1_2 = get_hyperplane_value(x0_2, clf.weights, clf.bias, 0)
x1_1_m = get_hyperplane_value(x0_1, clf.weights, clf.bias, -1)
x1_2_m = get_hyperplane_value(x0_2, clf.weights, clf.bias, -1)
x1_1_p = get_hyperplane_value(x0_1, clf.weights, clf.bias, 1)
x1_2_p = get_hyperplane_value(x0_2, clf.weights, clf.bias, 1)
ax.plot([x0_1, x0_2],[x1_1, x1_2], 'b--')
ax.plot([x0_1, x0_2],[x1_1_m, x1_2_m], 'k')
ax.plot([x0_1, x0_2],[x1_1_p, x1_2_p], 'k')
x1_min = np.amin(X[:,1])
x1_max = np.amax(X[:,1])
ax.set_ylim([x1_min-3,x1_max+3])
plt.show()
visualize_svm()
Fig. Output of SVM
Yüz algılama — SVMc, görüntünün parçalarını yüz ve yüz olmayan olarak sınıflandırır ve yüzün çevresinde kare bir sınır oluşturur.
Metin ve hipermetin kategorizasyonu — DVM'ler, metin ve hipermetin sınıflandırması için hem tümevarımsal hem de transdüktif modelleri destekler. Makaleleri farklı gruplara ayırmak için eğitim verileri gerekir. Elde edilen puana göre sınıflandırır ve ardından eşik değerle karşılaştırır.
Resim sınıflandırması — DVM'ler, görüntü sınıflandırması için arama doğruluğunu artırır. Geleneksel sorgu tabanlı arama stratejileriyle karşılaştırıldığında, daha fazla doğruluk sunar.
Protein sınıflandırması ve kanser sınıflandırması, biyoinformatiğin iki örneğidir. SVM, genleri, hastaları genlerine göre ve diğer biyolojik sorunları sınıflandırmak için kullanılır.
Protein uzaktan homoloji tespiti ve protein kıvrımı tespiti için SVM algoritmalarını uygulayın.
Çözüm
Destek Vektör Makinesi, Makine öğreniminde sınıflandırma için güçlü bir algoritmadır. Regresyon problemleri için de kullanılabilse de, daha çok sınıflandırma amaçları için kullanılmasını öneriyoruz. Doğrusal veya doğrusal olmayan veriler için kullanılabilir ve gayet iyi çalışır. Bununla birlikte, denetimli bir öğrenme algoritmasıdır, bu nedenle etiketlenmiş verilere ihtiyaç duyar. Karmaşık olanlar yerine daha küçük veri kümelerinde en iyi sonucu verir.
Referanslar
Destek Vektör MakinesiYapay Zeka ve Veri Bilimi (AI&DS), Vishwakarma Institute of Technology, Pune öğrencileri tarafından İstatistiksel Çıkarım (SI) için Ev Ödevi.
Tarafından hazırlandı:-
- Ajinkya Mahajan
- Aditya Bodhankar
- Riya Dhakalkar
- Dikşa Prasad
- Shivani Mahajan