SVM (Support Vector Machine) ist als maschinelles Lernverfahren mit hoher Klassifizierungsgenauigkeit bekannt. Für eine höhere Klassifizierungsgenauigkeit in SVM müssen Hyperparameter aus Trainingsdaten bestimmt werden. In diesem Artikel werde ich erklären, wie sich die Entscheidungsgrenze durch Anpassen der Hyperparameter von SVM unter Verwendung des RBF-Kernels (Gaußscher Kernel) ändert.
Passen Sie für SVM mit RBF-Kernel die folgenden beiden Hyperparameter an.
SVM ist eine Methode zum Bestimmen der Superplane, die den Satz von Datenpunkten trennt, die dem Feature-Space zugeordnet sind. Die Menge der Punkte im Feature-Space ist jedoch nicht immer trennbar. In der folgenden Abbildung ist es beispielsweise nicht möglich, eine gerade Linie zu zeichnen, die die beiden Symboltypen perfekt voneinander trennt.
Betrachten wir nun eine Fehlklassifizierung, zeichnen Sie eine gerade Linie und teilen Sie die Punktmenge. Zeichnen Sie beispielsweise in der vorherigen Abbildung eine gerade Linie, wie unten gezeigt, um die beiden Symboltypen zu trennen.
Der Kostenparameter $ C $ ist ein Parameter, der bestimmt, wie viel Fehlklassifizierung toleriert wird. $ C $ erscheint in der Gleichung für das von SVM gelöste sekundäre Planungsproblem.
\min_{\beta}\frac{1}{2}\|\beta\|^2+C\sum_{i=1}^{N}\xi_i
Bestimmen Sie die Hyperebene so, dass ein kleineres $ C $ eine Fehlklassifizierung zulässt und ein größeres $ C $ keine Fehlklassifizierung toleriert.
RBF-Kernel-Parameter: $ \ gamma $ wird in der folgenden RBF-Kernelformel angezeigt.
K(x, x')=\exp(-\gamma\|x-x'\|^2)
Wie in dem später beschriebenen Experiment gezeigt wird, ist die Entscheidungsgrenze umso komplexer, je kleiner der Wert von $ \ gamma $ ist, je einfacher die Entscheidungsgrenze ist und je größer der Wert ist.
Zeichnen wir eine Entscheidungsgrenze, wenn $ C $ und $ \ gamma $ auf Extremwerte gesetzt sind. $ C $ wurde auf $ 2 ^ {-5} $ und $ 2 ^ {15} $ gesetzt, und $ \ gamma $ wurde auf $ 2 ^ {-15} $ bzw. $ 2 ^ 3 $ gesetzt. Verwenden Sie die in scikit-learn (0.15) implementierte SVM. (Intern [LIBSVM](http: // www. csie.ntu.edu.tw/~cjlin/libsvm/) wird verwendet.) Verwenden Sie iris für den Datensatz. iris ist ein Datensatz, der 3 Klassenbeschriftungen und 4 Funktionen enthält. Dieses Mal werden nur 2 Klassenbeschriftungen und 2 Funktionen verwendet. Um das Problem zu erschweren, fügen wir jeder der beiden Funktionen Rauschen hinzu.
# -*- coding: utf-8 -*-
import numpy as np
from sklearn import svm, datasets
import matplotlib.pyplot as plt
from itertools import product
if __name__ == '__main__':
iris = datasets.load_iris()
#Die ersten beiden Funktionen,Verwenden Sie die ersten beiden Klassenbezeichnungen
X = iris.data[:100, :2]
#Fügen Sie Funktionen Rauschen hinzu
E = np.random.uniform(0, 1.0, size=np.shape(X))
X += E
y = iris.target[:100]
#Maschenschrittgröße
h = 0.02
#Kostenparameter
Cs = [2 ** -5, 2 ** 15]
#RBF-Kernelparameter
gammas = [2 ** -15, 2 ** 3]
svms = [svm.SVC(C=C, gamma=gamma).fit(X, y) for C, gamma in product(Cs, gammas)]
titles = ["C: small, gamma: small", "C: small, gamma: large",
"C: large, gamma: small", "C: large, gamma: large"]
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
for i, clf in enumerate(svms):
plt.subplot(2, 2, i + 1)
plt.subplots_adjust(wspace=0.4, hspace=0.4)
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
plt.xlabel("Sepal length")
plt.ylabel("Sepal width")
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.xticks(())
plt.yticks(())
plt.title(titles[i])
plt.show()
Die horizontale Achse und die vertikale Achse repräsentieren jeweils zwei Merkmalsgrößen. Wenn $ C $ klein ist, gibt es viele Fehlklassifizierungspunkte im Entscheidungsbereich, während wenn $ C $ groß ist, es nur wenige Fehlklassifizierungspunkte im Entscheidungsbereich gibt. Die Entscheidungsgrenze, wenn $ \ gamma $ klein ist, ist eine einfache Entscheidungsgrenze (gerade Linie), während die Entscheidungsgrenze, wenn $ \ gamma $ groß ist, eine komplizierte Form hat.
Das Anpassen von $ C $ und $ \ gamma $ scheint bei Verwendung eines linearen Kernels etwas Ähnliches wie die Entscheidungsgrenzen zu ergeben. Wenn Sie sich über die Kernelauswahl nicht sicher sind, scheint es in Ordnung zu sein, wenn Sie den RBF-Kernel verwenden, aber es wird einige Zeit dauern, bis die Parameter eingestellt sind. (´ ・ ω ・ `)