Machine à vecteurs de support (SVM)
Introduction
Support Vector Machine est l'un des algorithmes d'apprentissage automatique les plus populaires. Il n'est pas seulement utilisé pour la classification, mais aussi pour les problèmes de régression. Mais surtout, son utilisation a été observée dans les problèmes de classification dans le domaine de l'apprentissage automatique. De nombreuses personnes préfèrent la machine à vecteurs de support car elle offre une précision remarquable tout en utilisant moins de puissance de traitement. La machine à vecteurs de support sépare les données via un hyperplan et le nouveau point de données est placé dans la catégorie la mieux adaptée. C'est l'objectif fondamental de Support Vector Machine. Cet hyperplan est également appelé frontière de décision de Support Vector Machine. Il existe une variété d'hyperplans différents qui pourraient être utilisés pour diviser les deux classes de points de données. Trouver un avion avec la plus grande marge - c'est-à-dire,
Exemple
Si nous voulons un modèle capable de distinguer correctement un chat d'un chien, disons que nous observons un chat inhabituel qui ressemble également à un chien. Nous pouvons construire un tel modèle en utilisant l'algorithme SVM. Avant de le tester avec cet animal étrange, nous allons d'abord former notre modèle avec plusieurs photographies de chats et de chiens afin qu'il puisse se familiariser avec les différents attributs des chats et des chiens. En cas de résultat, les cas extrêmes de chats et de chiens seront vus par le vecteur de support car il trace une frontière de jugement entre ces deux ensembles de données (chat et chien). Les vecteurs de support seront utilisés pour le catégoriser en tant que chat.
Types de SVM
SVM linéaire : Le terme « données séparables linéairement » fait référence à des données qui peuvent être divisées en deux groupes à l'aide d'une seule ligne droite. Le SVM linéaire est utilisé pour classer ces données, et le classificateur utilisé est connu sous le nom de classificateur SVM linéaire.
SVM non linéaire : le SVM non linéaire est utilisé pour les données séparées de manière non linéaire, ce qui signifie que si un ensemble de données ne peut pas être classé à l'aide d'une ligne droite, ces données sont appelées données non linéaires et le classificateur utilisé est appelé non. -classificateur SVM linéaire.
Travail
SVM catégorise les points de données même lorsqu'ils ne sont pas autrement séparables linéairement en mappant les données à un espace de caractéristiques de grande dimension. Une fois qu'un séparateur entre les catégories est identifié, les données sont converties pour permettre la représentation hyperplan du séparateur. Le groupe auquel un nouvel enregistrement doit appartenir peut alors être prédit à l'aide des caractéristiques des nouvelles données.
Mises à jour de la fonction de coût et du gradient
Le but de la méthode SVM est d'augmenter la distance entre les points de données et l'hyperplan. La perte articulée est la fonction de perte qui aide à maximiser la marge.
Si la valeur projetée et la valeur réelle ont le même signe, il n'y a aucun coût. Sinon, nous déterminons ensuite la valeur de la perte. La fonction de coût reçoit également un paramètre de régularisation de notre part. L'objectif du paramètre de régularisation est de trouver un équilibre entre la maximisation de la marge et la perte. Les fonctions de coût apparaissent comme suit après l'ajout du paramètre de régularisation.
Maintenant que nous avons la fonction de perte, nous pouvons trouver les gradients en prenant des dérivées partielles par rapport aux poids. Nous pouvons modifier nos poids en utilisant les gradients.
Nous n'avons besoin de mettre à jour le gradient à partir du paramètre de régularisation que lorsqu'il n'y a pas d'erreur de classification, c'est-à-dire lorsque notre modèle prédit correctement la classe de notre point de données.
Afin d'effectuer une mise à jour du gradient en cas d'erreur de classification ou lorsque notre modèle prédit de manière incorrecte la classe d'un point de données, nous incluons la perte avec le paramètre de régularisation.
Exemple d'extrait de programme
Importation de bibliothèques
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}
''')
Poids final : [0,34494241 0,1443094 ]
Biais final : -0,012899999999999977
Visualisation
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
Détection de visage - SVMc classe les parties de l'image en tant que visage et non-visage et crée une limite carrée autour du visage.
Catégorisation de texte et d'hypertexte — Les SVM prennent en charge les modèles inductifs et transductifs pour la classification de texte et d'hypertexte. Pour classer les articles en groupes distincts, ils ont besoin de données d'entraînement. Il classe en fonction du score obtenu puis contraste avec la valeur seuil.
Classification des images — Les SVM améliorent la précision de la recherche pour la classification des images. Comparé aux stratégies de recherche classiques basées sur des requêtes, il offre une plus grande précision.
La classification des protéines et la classification du cancer sont deux exemples de bioinformatique. SVM est utilisé pour classer les gènes, les patients en fonction de leurs gènes et d'autres problèmes biologiques.
Appliquez des algorithmes SVM pour la détection d'homologie à distance des protéines et la détection du repliement des protéines.
Conclusion
Support Vector Machine est un puissant algorithme de classification en Machine Learning. Bien qu'il puisse également être utilisé pour les problèmes de régression, nous suggérons de l'utiliser principalement à des fins de classification. Il peut être utilisé pour des données linéaires ou non linéaires et cela fonctionne très bien. Cependant, il s'agit d'un algorithme d'apprentissage supervisé, il a donc besoin de données étiquetées. Cela fonctionne mieux sur des ensembles de données plus petits que sur des ensembles complexes.
Les références
Soutenir la machine vectorielleUn devoir à domicile pour l'inférence statistique (SI) par des étudiants en intelligence artificielle et en science des données (AI&DS), Vishwakarma Institute of Technology, Pune.
Préparé par:-
- Ajinkya Mahajan
- Aditya Bodhankar
- Riya Dhakalkar
- Diksha Prasad
- Shivani Mahajan