Support Vector Machine (SVM)
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.
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.
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.
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.
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.
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.
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.
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.
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-MaschineEine Hausaufgabe für statistische Inferenz (SI) von Studenten der Künstlichen Intelligenz und Datenwissenschaft (AI&DS), Vishwakarma Institute of Technology, Pune.
Hergestellt von:-
- Ajinkya Mahajan
- Aditya Bodhankar
- Riya Dhakalkar
- Diksha Prasad
- Shivani Mahajan