Support Vector Machine (SVM)

Nov 25 2022
Einführung Support Vector Machine ist einer der beliebtesten Algorithmen für maschinelles Lernen. Es wird nicht nur zur Klassifikation, sondern auch für Regressionsprobleme verwendet.
SVM (Ref. geospasialis.com)

Einführung

Support Vector Machine ist einer der beliebtesten Algorithmen für maschinelles Lernen. Es wird nicht nur zur Klassifikation, sondern auch für Regressionsprobleme verwendet. Seine Verwendung wurde jedoch hauptsächlich bei Klassifizierungsproblemen im Bereich des maschinellen Lernens beobachtet. Viele Menschen bevorzugen die Support-Vektor-Maschine, weil sie eine bemerkenswerte Genauigkeit bietet und gleichzeitig weniger Rechenleistung verbraucht. Die Support Vector Machine trennt die Daten durch eine Hyperebene und der neue Datenpunkt wird in die am besten geeignete Kategorie eingeordnet. Dies ist das grundlegende Ziel von Support Vector Machine. Diese Hyperebene wird auch als Entscheidungsgrenze der Support Vector Machine bezeichnet. Es gibt eine Vielzahl unterschiedlicher Hyperebenen, die verwendet werden könnten, um die zwei Klassen von Datenpunkten aufzuteilen. Das Finden eines Flugzeugs mit dem größten Spielraum – das heißt,

Beispiel

Wenn wir ein Modell suchen, das eine Katze von einem Hund unterscheiden kann, nehmen wir an, wir beobachten eine ungewöhnliche Katze, die auch einem Hund ähnelt. Wir können ein solches Modell erstellen, indem wir den SVM-Algorithmus verwenden. Bevor wir es mit diesem seltsamen Tier testen, werden wir unser Modell zunächst mit mehreren Fotos von Katzen und Hunden trainieren, damit es sich mit den verschiedenen Eigenschaften von Katzen und Hunden vertraut machen kann. Als Ergebnis werden die extremen Fälle von Katzen und Hunden vom Unterstützungsvektor gesehen, da er eine Beurteilungsgrenze zwischen diesen beiden Datensätzen (Katze und Hund) zieht. Die Unterstützungsvektoren werden verwendet, um es als Katze zu kategorisieren.

Abb. Beispiel für SVM (ref: www.javatpoint.com )

Arten von SVM

Lineare SVM : Der Begriff „linear trennbare Daten“ bezieht sich auf Daten, die mit nur einer einzigen geraden Linie in zwei Gruppen unterteilt werden können. Die lineare SVM wird verwendet, um solche Daten zu klassifizieren, und der verwendete Klassifikator ist als der lineare SVM-Klassifikator bekannt.

Abb. Linear SVM (Ref. www.javatpoint.com)

Nichtlineare SVM : Nichtlineare SVM wird für nichtlinear getrennte Daten verwendet, d. h. wenn ein Datensatz nicht mithilfe einer geraden Linie klassifiziert werden kann, werden solche Daten als nichtlineare Daten bezeichnet und der verwendete Klassifikator wird als nicht bezeichnet -linearer SVM-Klassifikator.

Abb. Nichtlineare SVM (Ref. www.javatpoint.com)

Arbeiten

SVM kategorisiert Datenpunkte, selbst wenn sie ansonsten nicht linear trennbar sind, indem die Daten auf einen hochdimensionalen Merkmalsraum abgebildet werden. Sobald ein Trennzeichen zwischen den Kategorien identifiziert ist, werden die Daten konvertiert, um die Hyperebenendarstellung des Trennzeichens zu ermöglichen. Die Gruppe, zu der ein neuer Datensatz gehören sollte, kann dann unter Verwendung der Eigenschaften neuer Daten vorhergesagt werden.

Kostenfunktions- und Gradientenaktualisierungen

Das Ziel des SVM-Verfahrens ist es, den Abstand zwischen den Datenpunkten und der Hyperebene zu vergrößern. Hinged Loss ist die Verlustfunktion, die bei der Maximierung der Marge hilft.

Abb. Gelenkverlustfunktion (Linke Funktion kann als rechte Funktion dargestellt werden)

Wenn der prognostizierte Wert und der tatsächliche Wert das gleiche Vorzeichen haben, fallen keine Kosten an. Wenn nicht, bestimmen wir als nächstes den Verlustwert. Auch die Kostenfunktion erhält von uns einen Regularisierungsparameter. Das Ziel des Regularisierungsparameters ist es, ein Gleichgewicht zwischen Margenmaximierung und Verlust zu finden. Die Kostenfunktionen erscheinen wie folgt, nachdem der Regularisierungsparameter hinzugefügt wurde.

Feige. Verlustfunktion für SVM

Da wir nun die Verlustfunktion haben, können wir die Gradienten finden, indem wir partielle Ableitungen in Bezug auf die Gewichte nehmen. Wir können unsere Gewichte mithilfe der Gradienten ändern.

Abb. Farbverläufe

Wir müssen den Gradienten aus dem Regularisierungsparameter nur dann aktualisieren, wenn keine Fehlklassifizierung vorliegt, d. h. wenn unser Modell die Klasse unseres Datenpunkts korrekt vorhersagt.

Abb. Gradient Update – Keine Fehlklassifizierung

Um eine Gradientenaktualisierung durchzuführen, wenn eine Fehlklassifizierung vorliegt oder wenn unser Modell die Klasse eines Datenpunkts falsch vorhersagt, schließen wir den Verlust zusammen mit dem Regularisierungsparameter ein.

Abb. Gradientenaktualisierung – Fehlklassifizierung

Beispielprogrammausschnitt

Bibliotheken importieren

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}
     ''')

Endgültiges Gewicht: [0,34494241 0,1443094 ]
Endgültige Neigung: -0,012899999999999977

Visualisierung

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

Gesichtserkennung – SVMc klassifiziert Teile des Bildes als Gesicht und Nicht-Gesicht und erstellt eine quadratische Grenze um das Gesicht.

Text- und Hypertext-Kategorisierung – SVMs unterstützen sowohl induktive als auch transduktive Modelle für die Text- und Hypertext-Klassifizierung. Um Artikel in verschiedene Gruppen zu klassifizieren, benötigen sie Trainingsdaten. Es klassifiziert basierend auf der erhaltenen Punktzahl und kontrastiert dann mit dem Schwellenwert.
Bildklassifizierung – SVMs verbessern die Suchgenauigkeit für die Bildklassifizierung. Im Vergleich zu den herkömmlichen abfragebasierten Suchstrategien bietet es eine höhere Genauigkeit.
Proteinklassifizierung und Krebsklassifizierung sind zwei Beispiele für Bioinformatik. SVM wird verwendet, um Gene, Patienten nach ihren Genen und andere biologische Aspekte zu klassifizieren.
Wenden Sie SVM-Algorithmen für die Protein-Remote-Homologieerkennung und Proteinfaltungserkennung an.

Fazit

Support Vector Machine ist ein leistungsstarker Algorithmus zur Klassifizierung im maschinellen Lernen. Obwohl es auch für Regressionsprobleme verwendet werden kann, empfehlen wir, es hauptsächlich für Klassifizierungszwecke zu verwenden. Es kann für lineare oder nichtlineare Daten verwendet werden und funktioniert einwandfrei. Da es sich jedoch um einen überwachten Lernalgorithmus handelt, benötigt er beschriftete Daten. Es funktioniert am besten bei kleineren Datensätzen und nicht bei komplexen.

Verweise

Support-Vektor-Maschine

Eine Hausaufgabe für statistische Inferenz (SI) von Studenten der Künstlichen Intelligenz und Datenwissenschaft (AI&DS), Vishwakarma Institute of Technology, Pune.

Hergestellt von:-

  1. Ajinkya Mahajan
  2. Aditya Bodhankar
  3. Riya Dhakalkar
  4. Diksha Prasad
  5. Shivani Mahajan