Logistische Regression mit Pytorch

Logistische Regression mit Pytorch
Die logistische Regression ist ein bekannter Algorithmus für maschinelles Lernen, mit dem Binärklassifizierungsprobleme gelöst werden. Es wird aus dem linearen Regressionsalgorithmus abgeleitet, der eine kontinuierliche Ausgangsvariable aufweist, und die logistische Regression kann sogar mehr als zwei Klassen klassifizieren, indem sie leicht modifiziert werden. Wir werden uns mit dem Konzept der logistischen Regression und der Implementierung in Pytorch befassen, einer nützlichen Bibliothek zum Erstellen von Modellen für maschinelles Lernen und Deep Learning.

Konzept der logistischen Regression

Logistische Regression ist ein Binärklassifizierungsalgorithmus. Es ist ein Entscheidungsalgorithmus, was bedeutet, dass er Grenzen zwischen zwei Klassen schafft. Es erweitert das lineare Regressionsproblem, das eine verwendet Aktivierungsfunktion auf seinen Ausgängen, um es zwischen 1 und 0 zu begrenzen. Infolgedessen wird dies für Binärklassifizierungsprobleme verwendet. Die Grafik der logistischen Regression sieht aus wie die folgende Abbildung:

Wir können sehen, dass die Grafik zwischen 0 und 1 eingeschränkt ist. Eine normale lineare Regression kann den Zielwert als reelle Zahl angeben, dies ist jedoch bei der logistischen Regression aufgrund der Sigmoidfunktion nicht der Fall. Die logistische Regression basiert auf dem Konzept der maximalen Wahrscheinlichkeitsschätzung (MLE). Die maximale Wahrscheinlichkeit ist einfach eine Wahrscheinlichkeitsverteilung mit einem bestimmten Parametersatz und der Frage: „Wie wahrscheinlich würde ich diese Daten sehen, wenn meine Daten aus dieser Wahrscheinlichkeitsverteilung generiert würden?Es funktioniert durch die Berechnung der Wahrscheinlichkeit für jeden einzelnen Datenpunkt und multipliziert dann alle diese Wahrscheinlichkeiten miteinander. In der Praxis fügen wir die Logarithmen der Wahrscheinlichkeiten hinzu.

Wenn wir ein maschinelles Lernmodell erstellen müssen, beträgt jeder unabhängige variable Datenpunkt x1 * W1 + x2 * W2… und so weiter, wenn Sie einen Wert zwischen 0 und 1 ergeben, wenn die Aktivierungsfunktion überliefert wird. Wenn wir 0 nehmen.50 als entscheidender Faktor oder Schwellenwert. Dann jedes Ergebnis größer als 0.5 wird als 1 angesehen, während jedes Ergebnis weniger als dieses als 0 angesehen wird.

Für mehr als 2 Klassen verwenden wir den One-VS-All-Ansatz. Ein-VS-All, auch als ein-VS-REST bekannt, ist ein Multilabel- und Multiclas-ML-Klassifizierungsprozess. Es funktioniert durch das erste Training eines binären Klassifikator. Wenn Ihr Problem N-Klassen enthält, wandelt ein-VS-All Ihren Trainingsdatensatz in N-Binärklassifizierungsprobleme um.

Die mit der logistische Regression verbundene Verlustfunktion ist Binärkreuzentropie Welches ist das Gegenteil des Informationsgewinns. Dies ist auch als Name bekannt Protokollverlust. Die Verlustfunktion wird durch die Gleichung angegeben:

Was ist Verlustfunktion?

Eine Verlustfunktion ist eine mathematische Metrik, die wir reduzieren möchten. Wir möchten ein Modell erstellen, das genau vorhersagen kann, was wir wollen, und eine Möglichkeit, die Leistung des Modells zu messen, besteht darin, den Verlust zu untersuchen, da wir wissen, was das Modell ausgibt und was wir bekommen sollten. Wir können unser Modell trainieren und verbessern, indem wir diesen Verlust verwenden und die Parameter des Modells entsprechend anpassen. Die Verlustfunktionen variieren je nach Art des Algorithmus. Für die lineare Regression sind mittlere quadratische Fehler und der mittlere absolute Fehler beliebte Verlustfunktionen, während die Kreuzentropie für Klassifizierungsprobleme geeignet ist.

Was ist die Aktivierungsfunktion??

Aktivierungsfunktionen sind einfach mathematische Funktionen, die die Eingabevariable so ändern, dass sie eine neue Ausgabe ergeben. Dies geschieht normalerweise im maschinellen Lernen, um die Daten entweder zu standardisieren oder die Eingabe auf eine bestimmte Grenze zu beschränken. Beliebte Aktionsfunktionen sind Sigmoid, behobene lineare Einheit (Relu), Tan (H) usw.

Was ist Pytorch?

Pytorch ist eine populäre Deep Learning -Alternative, die mit Taschenlampe funktioniert. Es wurde von der KI -Abteilung von Facebook erstellt, kann aber ähnlich wie bei anderen Optionen verwendet werden. Es wird verwendet, um eine Vielzahl von Modellen zu entwickeln, wird jedoch in den Anwendungsfällen (natürliche Sprachverarbeitung) am weitesten verbreitet. Pytorch ist immer eine gute Option, wenn Sie Modelle mit sehr wenigen Ressourcen erstellen möchten und eine benutzerfreundliche, einfach zu bedienende und leichte Bibliothek für Ihre Modelle wünschen. Es fühlt sich auch natürlich an, was beim Abschluss des Prozesses hilft. Wir werden Pytorch aus den genannten Gründen für die Implementierung unserer Modelle verwenden. Der Algorithmus bleibt jedoch mit anderen Alternativen wie Tensorflow gleich bleiben.

Implementierung der logistischen Regression in Pytorch

Wir werden die folgenden Schritte zur Implementierung unseres Modells verwenden:

  1. Erstellen Sie ein neuronales Netzwerk mit einigen Parametern, die nach jeder Iteration aktualisiert werden.
  2. Durch die angegebenen Eingabedaten durchführen.
  3. Die Eingabe wird das Netzwerk mithilfe der Vorwärtsvermehrung durchlaufen.
  4. Wir berechnen nun den Verlust mit binärer Kreuzentropie.
  5. Um die Kostenfunktion zu minimieren, aktualisieren wir die Parameter mithilfe von Gradientenabstiegungen.
  6. Führen Sie erneut die gleichen Schritte mit aktualisierten Parametern aus.

Wir werden die klassifizieren MNIST -Datensatz Ziffern. Dies ist ein beliebtes Deep -Lern -Problem, das Anfänger beigebracht hat.

Importieren wir zuerst die erforderlichen Bibliotheken und Module.

Taschenlampe importieren
Von Fackel.Autograd -Importvariable
Torchvision importieren.transformiert als Transformationen
Torchvision importieren.Datensätze als DSETs

Der nächste Schritt besteht darin, den Datensatz zu importieren.

Zug = dsets.MNIST (root = './data ', train = true, transform = transformationen.Totensor (), download = false)
test = dsets.MNIST (root = './data ', train = false, transform = transformationen.TOTENSOR ())

Verwenden Sie den Datenlader, um Ihre Daten iterbar zu machen

Train_loader = Torch.Utils.Daten.Dataloader (DataSet = Train, batch_size = batch_size, shuffle = true)
test_loader = fackel.Utils.Daten.Dataloader (DataSet = Test, batch_size = batch_size, shuffle = false)

Definieren Sie das Modell.

Klassenmodell (Fackel.nn.Modul):
def __init __ (self, inp, out):
Super (Modell, Selbst).__drin__()
selbst.linear = Fackel.nn.Linear (INP, out)
Def Forward (Selbst, x):
Ausgänge = Selbst.linear (x)
Ausgänge zurückgeben

Geben Sie die Hyperparameter, den Optimierer und den Verlust an.

Batch = 50
n_iters = 1500
epochs = n_iters / (len (train_dataset) / batch)
INP = 784
out = 10
Alpha = 0.001
model = logisticRegression (INP, out)
Verlust = Fackel.nn.Crosseltropylosloss ()
Optimierer = Fackel.Optim.SGD (Modell.Parameter (), LR = Alpha)

Trainiere das Modell endlich.

itr = 0
für Epochen in Reichweite (int (Epochen)):
Für mich (Bilder, Beschriftungen) in Enumerate (Train_loader):
Bilder = Variable (Bilder.View (-1, 28 * 28))
Labels = Variable (Etiketten)
Optimierer.Zero_grad ()
Ausgänge = Modell (Bilder)
Verlustfunc = Verlust (Ausgänge, Etiketten)
Verlustfunc.rückwärts()
Optimierer.Schritt()
itr+= 1
Wenn ITR%500 == 0:
korrekt = 0
Gesamt = 0
Für Bilder, Beschriftungen in test_loader:
Bilder = Variable (Bilder.View (-1, 28*28))
Ausgänge = Modell (Bilder)
_, vorhergesagt = Torch.Max (Ausgänge.Daten, 1)
Gesamt+= Etiketten.Größe (0)
Richtig+= (vorhergesagt == Etiketten).Summe()
Genauigkeit = 100 * richtig/Gesamt
print ("Iteration ist . Verlust ist . Genauigkeit ist .".Format (ITR, Verlustfunc.item (), Genauigkeit)))

Abschluss

Wir haben die Erklärung der logistischen Regression und ihrer Implementierung mit Pytorch durchlaufen, einer beliebten Bibliothek für die Entwicklung von Deep -Learning -Modellen. Wir haben das Problem der MNIST -Datensatzklassifizierung implementiert, bei dem wir die Ziffern basierend auf den Parametern der Bilder erkannt haben.