Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Lineare Klassifizierung

Lineare Klassifizierung

In diesem Abschnitt werden wir die Grundlagen der linearen Klassifizierung durch einen einfachen ML-Algorithmus, den Perceptron. Darüber hinaus werden wir die Konzepte hinter dem Perceptron-Algorithmus erweitern, indem wir Aspekte der Regularisierung berücksichtigen, um einen Margen-Linear-Klassifikator aufzubauen.

Hyperplane

Angenommen, wir möchten positive und negative Objekte aus dem Trainingssatz unten (Abbildung links) klassifizieren:

decisionbound

Figure 1:Trainingsset von Punkten mit binären Labels (+1, -1) und zweidimensionalen (x1,x2)(x_1, x_2) Features. Die Entscheidungsgrenze (graue Linie) wird durch den Parametervektor θ\theta, der der Entscheidungsgrenze normal ist, und den Offsetparameter θ0\theta_0, der die Daten linear trennt, definiert.

Der vorstehende Datensatz wird als linear trennbar angesehen, da er mindestens eine lineare Entscheidungsgrenze zur korrekten Aufteilung des gesamten Datensatzes aufweist. Zum Beispiel könnten wir eine Entscheidungsgrenze wie die graue Linie oben passieren (Abbildung rechts)

Da die Merkmale (x1,x2)R2(x_1, x_2) \in \mathbb{R}^2 , d.h. der Merkmalssatz zum zweidimensionalen Raum gehört, stellt die Entscheidungsgrenze eine Linie dar. Wenn wir mit einer Reihe von Features im dreidimensionalen Raum (x1,x2,x3)(x_1, x_2, x_3) umgehen, wäre die Entscheidungsgrenze ein Flugzeug. In analoger Weise, wenn unser Feature-Set in einem höheren Raum wäre, würde die Entscheidungsgrenze eine Hyperplane bilden.

Ein Hyperplan mit dd-Dimensionen wird üblicherweise durch den flugzeugnormalen Vektor θRd\theta \in \mathbb{R}^d und Offset (scalar) Parameter θ0\theta_0 bezeichnet. Im obigen Beispiel würden wir das Hyperplan (oder die Entscheidungsgrenze) definieren als:

θX+θ0=0[θ1θ2][x1x2]+θ0=0\theta \cdot X + \theta_0 =0 \equiv \begin{bmatrix} \theta_1 & \theta_2 \end{bmatrix} \cdot \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} + \theta_0 = 0

Unser Klassifikatorh(x,θ,θ0)h(x, \theta, \theta_0) ist damit gleich sign(θX+θ0)sign(\theta \cdot X + \theta_0), woθR2\theta \in \mathbb{R}^2 und θ0R\theta_0 \in \mathbb{R}. Rufen Sie die Vorzeichenfunktion, auch als Vorzeichenfunktion bekannt, ist eine mathematische Funktion, die das Vorzeichen oder die Richtung einer realen Zahl zurückgibt. Das heißt, wenn die Eingangszahl positiv, negativ oder 0 ist, kehrt die Vorzeichenfunktion +1, -1 bzw. 0 zurück.

Perceptron-Algorithmus

Im Perceptron-Algorithmus initialisieren wir typischerweise θ\theta als Null (Nullvektor) und schleifen durch das Paar von Trainingsbeispielen. Bei jeder Iteration werden wir überprüfen, ob der Klassifikator einen Fehler macht, dieses Trainingsbeispiel (i-th Beispiel) einzustufen, und wenn ja, dann aktualisieren wir die Parameter von θ\theta.

Assume that θ0=0\theta_0 =0 for simplicity (the decision boundary must pass through the origin). Our perceptron classifier will make a mistake if y(i)(θx(i))0y^{(i)}(\theta \cdot x^{(i)}) \leq 0. We will then update our θ\theta to no longer misclassify that training example. The way to do this is by adding y(i)x(i)y^{(i)}x^{(i)} to the previous θ\theta. Thus, the update would look like:

θ=θ+y(i)x(i)\theta = \theta + y^{(i)}x^{(i)}

Wir haben in den Händen eine Reihe von verschiedenen Trainingsbeispielen, die das Potenzial haben, unseren Klassifikator in viele Richtungen zu nudeln/zu aktualisieren. So ist es möglich und sogar erwartet, dass die letzten Trainingsbeispiele Updates verursachen, die frühere, erste Updates überschreiben werden. Dies führt dazu, dass frühere Beispiele nicht mehr korrekt klassifiziert werden. Aus diesem Grund müssen wir durch das gesamte Trainingsset mehrere TT-Zeiten schleifen, um sicherzustellen, dass alle Beispiele korrekt klassifiziert werden. Solche Iterationen können sowohl in Reihenfolge als auch zufällig aus den Trainingsbeispielen ausgewählt werden.

Wir können den Algorithmus wie folgt kodieren:

import numpy as np


# Algorithm always starting to loop from x1
def perceptron(X, y, theta, t_times):
    n_mistakes = 0

    # Initialize list to show the progress (updates) of theta
    progress_theta = []

    # Initialize an array with same size as the total number of examples to count how many mistake are made at each training example
    explicit_mistakes = np.zeros(shape=y.shape[0])

    # Loop through the training set T times
    for t in t_times:

        # Loop through the training examples in order
        for index, x in enumerate(X):

            # Check if the algorithm makes a mistake in the i-th (or index-th) example
            if y[index] * np.dot(theta, x) <= 0:
                # Update theta to no longer misclassify the i-th example
                theta = theta + y[index] * x

                # Save the update theta
                progress_theta.append(theta)

                # Update total number of mistakes
                n_mistakes += 1

                # Update total number of mistakes at the i-th training example
                explicit_mistakes[index] += 1
    print('The perceptron did {} mistakes until convergence'.format(n_mistakes))
    return progress_theta, n_mistakes, explicit_mistakes


if __name__ == '__main__':
    X = np.array([[-1, -1], [1, 0], [-1, 1.5]])
    # X = np.array([[-1, -1], [1, 0], [-1, 10]])

    y = np.array([1, -1, 1])

    t_times = range(0, 100)

    theta = np.array([-1, -1])

    a, b, c = perceptron(X, y, theta, t_times)

Margengrenzen und Scharnierverlust

Wie Sie vielleicht bemerkt haben, bietet der Perceptron-Algorithmus keinen Regularisierungsbegriff. Das Ziel war einfach, jede Entscheidungsgrenze zu finden, die die Daten richtig teilen kann. Hier werden wir das Konzept von hinge loss und margin Grenzen einführen, um das Problem des Lernens einer Entscheidungsgrenze in ein Optimierungsproblem unter Berücksichtigung der Regularisierung zu transformieren.

Motivation hinter Margengrenzen

Schauen wir uns unseren bisher vorgestellten Trainingsdatensatz an (Abbildung unten). Jede Entscheidungsgrenze innerhalb der gestrichelten Graulinien teilt die Trainingsbeispiele richtig auf. Intuitiv möchten wir jedoch eine Entscheidungsgrenze bevorzugen, die die Abstände zwischen der Entscheidungsgrenze und den Trainingspunkten maximieren kann. Der Grund dafür ist, dass es wahrscheinlich ist, dass die Punkte, die wir zukünftig klassifizieren möchten, statistische Geräusche haben, so dass eine zu nahe an den Ausbildungsbeispielen liegende Entscheidungsgrenze eher eine geringfügig veränderte (noisier) Versionen der Ausbildungsbeispiele falsch einstufen kann. Ein Klassifikator, der eine relativ höhere Marge zwischen der Entscheidungsgrenze und den Beispielen hält, wird hingegen bei der Klassifizierung künftiger, nicht gesicherter Daten wahrscheinlich erfolgreicher sein.

marginbound

Figure 3:Trainingsset von Punkten mit binären Etiketten (+1, -1) im zweidimensionalen Spielraum (x1,x2)(x_1, x_2). Jede Entscheidungsgrenze innerhalb der gestrichelten Graulinien kann die Daten richtig teilen.

Optimierungsproblem

Erinnern Sie sich, dass unser Ziel ist, einen linearen Klassifikator zu finden, der die Entfernungen zwischen der Entscheidungsgrenze und den Trainingspunkten (margin linear Klassifikator) maximiert, aber auch den Trainingsfehler minimiert. Dies stellt also ein Optimierungsproblem dar, das diesen beiden Faktoren entgegenwirken muss, die wir als:

Margengrenzen

Zuvor sahen wir, dass die Gleichung, die eine Entscheidungsgrenze definiert, θX+θ0=0\theta \cdot X + \theta_0 =0 genügt.

Wir können jetzt parallele Margengrenzen definieren (gestrichelt in der vorherigen Abbildung) als:

θX+θ0=±1\theta \cdot X + \theta_0 = \pm 1

Beachten Sie, dass wir die Grenzen so definieren können, weil wir einen Grad an Freiheit in unserer Definition der Entscheidungsgrenze haben, nämlich die Größe des normalen Vektors θ\| \theta \|. Das ist, unabhängig vom Wert θ\| \theta \|, unsere Entscheidungsgrenze bleibt unverändert.

Rufen Sie das Problem der Berechnung der kleinsten Entfernung eines Punktes an eine plan. Diese Entfernung ist:

θx(i)+θ0θ\frac{\theta \cdot x^{(i)} + \theta_0 }{\| \theta \|}

Wir können nun den unterschriebenen Abstand zwischen der Entscheidungsgrenze und dem i-ten Beispiel berechnen:

γi(θ,θ0)=θx(i)+θ0θ\gamma_i (\theta, \theta_0) = \frac{\theta \cdot x^{(i)} + \theta_0 }{\| \theta \|}

Somit ist der Abstand zwischen den Randgrenzen und der Entscheidungsgrenze:

γi(θ,θ0)=1θ\gamma_i (\theta, \theta_0) = \frac{1}{\| \theta \|}

Hinfälliger Verlust

Bisher wissen wir, dass sign(θx(i)+θ0)sign(\theta \cdot x^{(i)} + \theta_0 ) das i-te Beispiel klassifiziert. Der Weg zu wissen, ob die Klassifikation mit dem Label einverstanden ist, indem es von y(i)y^{(i)} multipliziert. Wir können diese Vereinbarung auch in einer leicht modifizierten Version mit dem Scharnierverlust ausdrücken:

Lossh(z)={=0    if    z1=1z    if    <1Loss_h(z)= \begin{cases} = 0 \;\; \mbox{if} \;\; z \geq 1 \\ =1-z \;\; \mbox{if} \;\;< 1\end{cases}

wobei zz die Vereinbarung ist (bezeichnete Entfernung von der Entscheidungsgrenze) y(i)(θx(i)+θ0)y^{(i)}(\theta \cdot x^{(i)}+\theta_0).

Die folgende Abbildung zeigt, wie der Scharnierverlust entlang der z-Achse (Abstand von Grenze) arbeitet:

hinge-loss-function

Zielfunktion

So können wir jetzt eine objektive Funktion schaffen, die (1) den durchschnittlichen Scharnierverlust über die Trainingsbeispiele minimiert und (2) maximiert 1θ\frac{1}{\| \theta \|}. Expression (2) kann auch auf eine Minimierung 12θ2\frac{1}{2}\| \theta \|^2 zu reformieren. So definieren wir die Zielfunktion als:

C(θ,θ0)=1ni=1nLossh(y(i)(θx(i)+θ0))+λ2θ2C(\theta, \theta_0) = \frac{1}{n}\sum_{i=1}^n Loss_h(y^{(i)}(\theta \cdot x^{(i)}+\theta_0)) + \frac{\lambda}{2} \| \theta \|^2

wobei λ\lambda der Regelparameter ist, der die Bedeutung der Minimierung des Regelungsterms λ2θ2\frac{\lambda}{2}\| \theta \|^2 zu den Kosten für die Einbindung von mehr Verlusten (Erhöhung der Verlustdauer) ausgleicht. Je kleiner der Wert von λ\lambda ist, desto mehr betonen wir, den durchschnittlichen Verlust zu minimieren.