Coursera-Herausforderungen beim maschinellen Lernen in Python: ex3 (Handschriftliche Zahlenerkennung mit logistischer Rekursion)

Einführung

Coursera Machine Learning ist die weltweit führende Einführung in das maschinelle Lernen. Dies ist der dritte in einer Reihe von Versuchen, nach dem Studium der Matlab / Octave-Programmieraufgaben in Python zu implementieren.

Diesmal in der ersten Hälfte von ex3 die Aufgabe, handgeschriebene Zahlen mithilfe der logistischen Regression zu erkennen. Der Datensatz ist eine Teilmenge von MNIST, die 5000 Graustufenbilder mit 20 x 20 Pixeln im Matlab / Octave .mat-Datenformat erhält. Tatsächlich verfügt scikit-learn über eine Funktion namens "fetch_mldata ()", mit der Sie auch MNIST-Daten (28 x 28 Pixel, 70.000 Blatt) herunterladen können (siehe diesen Artikel: [Handgeschrieben von MNIST mit Multilayer Perceptron] Nummernerkennung](http://aidiary.hatenablog.com/entry/20140205/1391601418), aber dieses Mal werde ich die obigen .mat-Daten zum Vergleich verwenden.

Die zweite Hälfte von ex3 ist ein wenig halbfertiger Inhalt, bei dem nur der Vorwärtsausbreitungsteil des neuronalen Netzwerks erstellt wird, daher werde ich ihn weglassen.

Code

Die Daten sind auch gut formatiert und es handelt sich um einfachen Code, da nur die Klasse "LogisticRegression" von scicit-learn verwendet wird. Die Daten im Mat-Format von Matlab können mit der Funktion scipy.io.loadmat () von Scipy gelesen werden.

ex3.py


import numpy as np
import matplotlib.pyplot as plt
import scipy.io as scio
from sklearn import linear_model

# scipy.io.loadmat()Lesen Sie Matlab-Daten mit
data = scio.loadmat('ex3data1.mat')
X = data['X']  #X ist eine 5000x400-Matrix
y = data['y'].ravel()  #y ist eine 5000 x 1 Matrix, ravel()Konvertieren Sie mit in einen 5000-dimensionalen Vektor

model = linear_model.LogisticRegression(penalty='l2', C=10.0) #Modelldefinition
model.fit(X,y)    #Lernen mit Trainingsdaten
model.score(X,y)  #Richtige Antwortrate in den Trainingsdaten

Bei der Ausführung wurde die korrekte Antwortrate für die Zeichenerkennung in den Trainingsdaten als 0,96499999999999997 angezeigt.

Maschinelles Lernen

Der Parameter $ \ lambda $, der die Stärke der Regularisierung angibt, war in Coursera $ \ lambda = 0.1 $. Wie im vorherigen Artikel beschrieben, wird in der Klasse "sklearn.linear_model.LogisticRegression" der Regularisierungsparameter durch $ C $ angegeben (entsprechend der Umkehrung von $ \ lambda $), sodass das Modell dieses Mal auf "C = 10.0" gesetzt wird. Definiert.

Infolgedessen betrug die korrekte Antwortrate in den Trainingsdaten wie oben erwähnt 96,5%. Das Ergebnis mit Matlab / Octave lag bei 94,9%. Ist es also ein wenig übertrieben? Ich bin mir nicht sicher warum.

Andere Punkte

Das ist zu einfach, deshalb habe ich einen Code geschrieben, um die Daten anzuzeigen, die falsch erkannt wurden. Beim Training mit dem oben genannten Modell werden 175 von 5000 Trainingsdaten falsch ermittelt. Lassen Sie uns die Beschriftungen (wie Sie einen Fehler gemacht haben) zusammen mit den Bildern für 25 zufällig ausgewählte Elemente anzeigen.

ex3-wrong.py


wrong_index = np.array(np.nonzero(np.array([model.predict(X) != y]).ravel())).ravel()
wrong_sample_index = np.random.randint(0,len(wrong_index),25)
fig = plt.figure()
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.5, hspace=0.5)
for i in range(0,25):
    ax = fig.add_subplot(5,5,i+1)
    ax.axis('off')
    ax.imshow(X[wrong_index[wrong_sample_index[i]]].reshape(20,20).T, cmap = plt.get_cmap('gray'))
    ax.set_title(str(model.predict(X[wrong_index[wrong_sample_index[i]]])[0]))
plt.show()

Das Ergebnis ist wie folgt. ex3-2.png

Es gibt einige überzeugende Fehler, wie etwa 4 mit 9 zu verwechseln und umgekehrt, aber es gibt auch andere, die dies nicht tun. Nun, es könnte so etwas sein, weil ich gerade eine logistische Regression der Pixeldaten durchgeführt habe, ohne irgendwelche Features zu extrahieren. Es kann ein wenig überpassend sein, daher sollte Coursera den entsprechenden Regularisierungsparameter $ C $ mithilfe der Kreuzvalidierung usw. auswählen, der in einem späteren Modul angezeigt wird.

Recommended Posts

Coursera-Herausforderungen beim maschinellen Lernen in Python: ex3 (Handschriftliche Zahlenerkennung mit logistischer Rekursion)
Coursera-Herausforderungen beim maschinellen Lernen in Python: ex2 (Logistic Return)
Coursera Machine Learning Challenge in Python: ex1 (lineare Regression)
Coursera Machine Learning Challenge in Python: ex7-1 (Bildkomprimierung mit K-bedeutet Clustering)
Coursera-Herausforderungen für maschinelles Lernen in Python: ex7-2 (Primäranalyse)
Coursera-Herausforderungen beim maschinellen Lernen in Python: ex5 (Anpassung der Regularisierungsparameter)
Coursera Machine Learning Challenge in Python: ex6 (Anpassen von SVM-Parametern)
Zahlenerkennung in Bildern mit Python
Maschinelles Lernen mit Python (2) Einfache Regressionsanalyse
Python & Machine Learning Study Memo ⑥: Zahlenerkennung
Logistische Regression beim maschinellen Lernen
Maschinelles Lernen mit Python! Vorbereitung
Beginnend mit maschinellem Python-Lernen
Algorithmus für maschinelles Lernen (logistische Regression)
Maschinelles Lernen mit Python (1) Gesamtklassifizierung
Klassifikation und Regression beim maschinellen Lernen
Python: Vorverarbeitung beim maschinellen Lernen: Übersicht
Logistische Regressionsanalyse Selbst erstellt mit Python
"Scraping & maschinelles Lernen mit Python" Lernnotiz
"Gauß-Prozess und maschinelles Lernen" Gauß-Prozessregression nur mit Python-Numpy implementiert
<Subjekt> Maschinelles Lernen Kapitel 3: Logistisches Regressionsmodell
Verstärken Sie Bilder für maschinelles Lernen mit Python
[Python] Techniken, die häufig beim maschinellen Lernen verwendet werden
Python: Vorverarbeitung beim maschinellen Lernen: Datenerfassung
[Shakyo] Begegnung mit Python zum maschinellen Lernen
Ich habe versucht, Couseras logistische Regression in Python zu implementieren
[Python] Speichern von Lernergebnissen (Modellen) beim maschinellen Lernen
Python: Vorverarbeitung beim maschinellen Lernen: Datenkonvertierung
Aufbau einer KI / maschinellen Lernumgebung mit Python
Richten Sie die Anzahl der Stichproben zwischen Datenklassen für maschinelles Lernen mit Python aus
[Python] Einfache Einführung in das maschinelle Lernen mit Python (SVM)
Maschinelles Lernen beginnend mit Python Personal Memorandum Part2
Maschinelles Lernen beginnend mit Python Personal Memorandum Part1
EV3 x Python Maschinelles Lernen Teil 2 Lineare Regression
[Python] Sammeln Sie Bilder mit Icrawler für maschinelles Lernen [1000 Blatt]
Lassen Sie uns einen Teil des maschinellen Lernens mit Python berühren
Ich habe mit der maschinellen Vorverarbeitung von Python Data begonnen
Erstellen Sie eine Python-Umgebung für maschinelles Lernen mit Containern
Lernen Sie das kollaborative Filtern zusammen mit Coursera-Materialien für maschinelles Lernen
Führen Sie eine Pipeline für maschinelles Lernen mit Cloud Dataflow (Python) aus.
Tool MALSS (Anwendung), das maschinelles Lernen in Python unterstützt
Tool MALSS (Basic), das maschinelles Lernen in Python unterstützt
Python Scikit-learn Lineare Regressionsanalyse Nichtlineare einfache Regressionsanalyse Maschinelles Lernen
Erstellen Sie mit Python eine Entwicklungsumgebung für maschinelles Lernen
Zusammenfassung des grundlegenden Ablaufs des maschinellen Lernens mit Python
Versuchen Sie, das Modell des maschinellen Lernens in das Python-Paket aufzunehmen
Cross-Entropie zur Überprüfung in Coursera Machine Learning Woche 2 Aufgaben
MALSS (Einführung), ein Tool, das maschinelles Lernen in Python unterstützt
Maschinelles Lernen Eine Geschichte über Menschen, die mit GBDT in GBDT in Python nicht vertraut sind
[Maschinelles Lernen] Schreiben Sie die Methode des nächsten Nachbarn in Python selbst und erkennen Sie handgeschriebene Zahlen.
Logistische Verteilung in Python
Python lernen mit ChemTHEATER 03
"Objektorientiert" mit Python gelernt
Python lernen mit ChemTHEATER 05-1
Python lernen mit ChemTHEATER 02
Lineare Regression des maschinellen Lernens
Spracherkennung mit Python
Python lernen mit ChemTHEATER 01
Python: Überwachtes Lernen (Rückkehr)
Primzahl 2 in Python