Python & Machine Learning Study Memo ⑥: Zahlenerkennung

Einführung

① https://qiita.com/yohiro/items/04984927d0b455700cd1 ② https://qiita.com/yohiro/items/5aab5d28aef57ccbb19c ③ https://qiita.com/yohiro/items/cc9bc2631c0306f813b5 ④ https://qiita.com/yohiro/items/d376f44fe66831599d0b ⑤ https://qiita.com/yohiro/items/3abaf7b610fbcaa01b9c Fortsetzung

Erkennen Sie die geschriebenen Zahlen anhand des handgeschriebenen Zahlenbildes (8 x 8 Pixel).

Quellcode

importieren

from sklearn import datasets
from sklearn import svm
from sklearn import metrics
import matplotlib.pyplot as plt

Laden von Beispieldaten

#Numerische Daten lesen
digits = datasets.load_digits()

Die Ziffern enthalten die folgenden Daten.

digits.data


[[ 0.  0.  5. ...  0.  0.  0.]
 [ 0.  0.  0. ... 10.  0.  0.]
 [ 0.  0.  0. ... 16.  9.  0.]
 ...
 [ 0.  0.  1. ...  6.  0.  0.]
 [ 0.  0.  2. ... 12.  0.  0.]
 [ 0.  0. 10. ... 12.  1.  0.]]

digits.target


[0 1 2 ... 8 9 8]

digits.data ist eine Liste von 64x1797, die Werte der Elemente repräsentieren die Farben in der Graustufe und eine 64-Elemente-Liste repräsentiert ein Bild. Für die Bildanzeige enthält "digits.image" ähnliche Informationen, obwohl das Listenformat unterschiedlich ist. digits.target zeigt die richtige Antwort (= welche Zahl dargestellt wird) jedes Bildes.

Training mit Support Vector Machine

#Unterstützung Vektormaschine
clf = svm.SVC(gamma=0.001, C=100.0) # gamma:Das Ausmaß der Auswirkung einer Trainingsdaten, C:Falsche Erkennungstoleranz
#Training mit Support Vector Machine(60% der Daten werden verwendet, die restlichen 40% dienen der Überprüfung)
clf.fit(digits.data[:int(n*6/10)], digits.target[:int(n*6/10)])

Das letzte Mal habe ich "LinearSVC ()" verwendet, aber dieses Mal verwende ich "SVC ()". Ist es nicht möglich, durch lineare Grenzen zu klassifizieren?

Einstufung

Lassen Sie das oben erstellte clf die restlichen 40% der Daten in digits.data lesen und klassifizieren Sie jede Zahl.

#Richtige Antwort
expected = digits.target[int(-n*4/10):]
#Prognose
predicted = clf.predict(digits.data[int(-n*4/10):])
#Richtige Antwortrate
print(metrics.classification_report(expected, predicted))
#Fehlerkennungsmatrix
print(metrics.confusion_matrix(expected, predicted))

Ergebnis

Richtige Antwortrate

              precision    recall  f1-score   support

           0       0.99      0.99      0.99        70
           1       0.99      0.96      0.97        73
           2       0.99      0.97      0.98        71
           3       0.97      0.86      0.91        74
           4       0.99      0.96      0.97        74
           5       0.95      0.99      0.97        71
           6       0.99      0.99      0.99        74
           7       0.96      1.00      0.98        72
           8       0.92      1.00      0.96        68
           9       0.96      0.97      0.97        71

    accuracy                           0.97       718
   macro avg       0.97      0.97      0.97       718
weighted avg       0.97      0.97      0.97       718

99% der Antworten, die als 0 vorhergesagt wurden, sind korrekt, und 99% der richtigen Antworten wurden als 0 vorhergesagt. Referenz zum Lesen der Tabelle:

Fehlerkennungsmatrix

[[69  0  0  0  1  0  0  0  0  0]
 [ 0 70  1  0  0  0  0  0  2  0]
 [ 1  0 69  1  0  0  0  0  0  0]
 [ 0  0  0 64  0  3  0  3  4  0]
 [ 0  0  0  0 71  0  0  0  0  3]
 [ 0  0  0  0  0 70  1  0  0  0]
 [ 0  1  0  0  0  0 73  0  0  0]
 [ 0  0  0  0  0  0  0 72  0  0]
 [ 0  0  0  0  0  0  0  0 68  0]
 [ 0  0  0  1  0  1  0  0  0 69]]

Von den 0 Bildern werden 69 als 0, 1 als 4 usw. erkannt.

Tatsächliches Bild und vorhergesagter Wert

#Entsprechung zwischen Vorhersage und Bild (Teil)
images = digits.images[int(-n*4/10):]
for i in range(12):
    plt.subplot(3, 4, i + 1)
    plt.axis("off")
    plt.imshow(images[i], cmap=plt.cm.gray_r, interpolation="nearest")
    plt.title("Guess: " + str(predicted[i]))
plt.show()

pred.png

Sie können sehen, dass die Nummern erkannt werden können.

Bonus

Ich habe versucht, digits.data (Schwarzweiß-Binärbild) zu visualisieren.

for i in range(10):
    my_s = ""
    for k, j in enumerate(digits.data[i]):
        if (j > 0):
            my_s += " ■ "
        else:
            my_s += "   "
        if k % 8 == 7:
            print(my_s)
            my_s = ""
    print("\n")

Ergebnis

       ■  ■  ■  ■       
       ■  ■  ■  ■  ■    
    ■  ■  ■     ■  ■    
    ■  ■        ■  ■    
    ■  ■        ■  ■    
    ■  ■     ■  ■  ■    
    ■  ■  ■  ■  ■       
       ■  ■  ■          


          ■  ■  ■       
          ■  ■  ■       
       ■  ■  ■  ■       
    ■  ■  ■  ■  ■       
       ■  ■  ■  ■       
       ■  ■  ■  ■       
       ■  ■  ■  ■       
          ■  ■  ■

...

       ■  ■  ■  ■       
       ■  ■  ■  ■       
       ■  ■     ■  ■    
       ■  ■  ■  ■  ■    
       ■  ■  ■  ■       
    ■  ■  ■  ■  ■  ■    
    ■  ■  ■  ■  ■  ■    
       ■  ■  ■  ■  ■    


       ■  ■             
    ■  ■  ■  ■  ■       
    ■  ■  ■  ■  ■       
    ■  ■  ■  ■  ■       
       ■  ■  ■  ■  ■    
          ■     ■  ■    
             ■  ■  ■    
       ■  ■  ■  ■   

Sie können sehen, dass es irgendwie handgeschrieben ist

Recommended Posts

Python & Machine Learning Study Memo ⑥: Zahlenerkennung
Python & Machine Learning Study Memo: Vorbereitung der Umgebung
Python & Machine Learning Study Memo ③: Neuronales Netz
Python & maschinelles Lernen Lernnotiz Machine: Maschinelles Lernen durch Rückausbreitung
Python & Machine Learning Study Memo ⑤: Klassifikation von Ayame
Python & Machine Learning Study Memo Introduction: Einführung in die Bibliothek
Python & Machine Learning Study Memo ⑦: Aktienkursprognose
"Scraping & maschinelles Lernen mit Python" Lernnotiz
Ich habe Python 3.5.1 installiert, um maschinelles Lernen zu studieren
Python-Modul (Python-Lernnotiz ④)
Behandlung von Python-Ausnahmen (Python-Lernnotiz ⑥)
Coursera-Herausforderungen beim maschinellen Lernen in Python: ex3 (Handschriftliche Zahlenerkennung mit logistischer Rekursion)
Python-Lernnotiz für maschinelles Lernen von Chainer aus Kapitel 2
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 1 und 2
Maschinelles Lernen mit Python! Vorbereitung
Lernressourcen-Lernblock für maschinelles Lernen
Praktisches Memo zum maschinellen Lernsystem
Python Machine Learning Programming> Schlüsselwörter
Beginnend mit maschinellem Python-Lernen
Konstruktionsnotiz für eine maschinelle Lernumgebung von Python
Erstellen Sie mit macOS sierra eine Python-Lernumgebung für maschinelles Lernen
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 7 Regressionsanalyse
Zahlenerkennung in Bildern mit Python
Maschinelles Lernen mit Python (1) Gesamtklassifizierung
Zusammenfassung des maschinellen Lernens von Python-Anfängern
Eingabe / Ausgabe mit Python (Python-Lernnotiz ⑤)
<Für Anfänger> Python-Bibliothek <Für maschinelles Lernen>
Python: Vorverarbeitung beim maschinellen Lernen: Übersicht
Abschnittsplanung Lernnotiz ~ von Python ~
Studiere, nummeriere das Spiel mit Python
Python-Memo
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 8 Einführung in Numpy
Python-Memo
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 10 Einführung in Cupy
Maschinelles Lernen
Python-Memo
Python-Memo
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 9 Einführung in das Scikit-Lernen
Python-Memo
Hinweise zur Python-Grammatik für maschinelles Lernen in PyQ
Python-Zahlen, Zeichenfolgen, Listentypen (Python-Lernnotiz ①)
[Lernnotiz] Grundlagen des Unterrichts mit Python
Verwenden Sie die API-Gruppe A3RT für maschinelles Lernen aus Python
Maschinelles Lernen mit Python (2) Einfache Regressionsanalyse
Warum Python für maschinelles Lernen ausgewählt wird
Python: Vorverarbeitung beim maschinellen Lernen: Datenerfassung
[Shakyo] Begegnung mit Python zum maschinellen Lernen
Struktur und Betrieb der Python-Daten (Python-Lernnotiz ③)
[Python] Erste Datenanalyse / maschinelles Lernen (Kaggle)
[Python] Wenn ein Amateur mit dem maschinellen Lernen beginnt
[Python] Webanwendungsdesign für maschinelles Lernen
[Online] Jedermanns Python-Lernsitzung Nr. 55 Grobes Memo
Erstellen einer Umgebung für Python und maschinelles Lernen (macOS)
Python-Standardbibliothek: zweite Hälfte (Python-Lernnotiz ⑨)
Eine Einführung in Python für maschinelles Lernen
[Python] Speichern von Lernergebnissen (Modellen) beim maschinellen Lernen
Python: Vorverarbeitung beim maschinellen Lernen: Datenkonvertierung
Studienmemo 1_eclipse (Python) herunterladen, Python ausführen, OpenPyXL herunterladen
Aufbau einer KI / maschinellen Lernumgebung mit Python
Python-Standardbibliothek: Erste Hälfte (Python-Lernnotiz ⑧)