Mémo d'étude Python & Machine Learning ⑥: Reconnaissance des nombres

introduction

① 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 A continué

Paramètre de problème

Reconnaissez les nombres écrits à partir de l'image des nombres manuscrits (8 x 8 px).

Code source

importer

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

Charger des exemples de données

#Lecture de données numériques
digits = datasets.load_digits()

Les chiffres contiennent les données suivantes.

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 est une liste de 64x1797, les valeurs des éléments représentent les couleurs dans l'échelle de gris et une liste de 64 éléments représente une image. Pour l'affichage de l'image, «digits.image» contient également des informations similaires bien que le format de la liste soit différent. digits.target montre la bonne réponse (= quel numéro est représenté) de chaque image.

Formation avec machine à vecteur de support

#Machine de vecteur de soutien
clf = svm.SVC(gamma=0.001, C=100.0) # gamma:L'ampleur de l'impact d'une donnée d'entraînement, C:Tolérance de fausse reconnaissance
#Formation avec machine à vecteur de support(60% des données sont utilisées, les 40% restants sont destinés à la vérification)
clf.fit(digits.data[:int(n*6/10)], digits.target[:int(n*6/10)])

La dernière fois que je l'ai utilisé, c'était LinearSVC (), mais cette fois j'utilise SVC (). N'est-il pas possible de classer par frontières linéaires?

Classification

Demandez au clf créé ci-dessus de lire les 40% restants des données en chiffres et de classer chaque nombre.

#Bonne réponse
expected = digits.target[int(-n*4/10):]
#Prévoir
predicted = clf.predict(digits.data[int(-n*4/10):])
#Taux de réponse correct
print(metrics.classification_report(expected, predicted))
#Matrice de méconnaissance
print(metrics.confusion_matrix(expected, predicted))

résultat

Taux de réponse correct

              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% des réponses prédites à 0 sont correctes et 99% des réponses correctes prédites à 0. Référence de lecture du tableau:

Matrice de méconnaissance

[[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]]

Sur les 0 images, 69 sont reconnues comme 0, 1 est reconnue comme 4, et ainsi de suite.

Image réelle et valeur prévue

#Correspondance entre prédiction et image (partie)
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

Vous pouvez voir que les nombres peuvent être reconnus.

prime

J'ai essayé de visualiser digits.data (image binaire en noir et blanc)

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")

résultat

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


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

...

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


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

Vous pouvez voir que c'est en quelque sorte manuscrit

Recommended Posts

Mémo d'étude Python & Machine Learning ⑥: Reconnaissance des nombres
Mémo d'étude Python & Machine Learning: Préparation de l'environnement
Mémo d'étude Python & Machine Learning ③: Réseau neuronal
Mémo d'étude Python & Machine Learning ④: Machine Learning par rétro-propagation
Mémo d'étude Python & Machine Learning ⑤: Classification d'Ayame
Mémo d'étude Python & Machine Learning ②: Introduction de la bibliothèque
Mémo d'étude Python & Machine Learning ⑦: Prévision du cours de l'action
Mémo d'apprentissage "Scraping & Machine Learning avec Python"
J'ai installé Python 3.5.1 pour étudier l'apprentissage automatique
Module Python (mémo d'apprentissage Python ④)
Gestion des exceptions Python (mémo d'apprentissage Python ⑥)
Défis d'apprentissage automatique de Coursera en Python: ex3 (reconnaissance de nombres manuscrits avec récursivité logistique)
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer du chapitre 2
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer chapitres 1 et 2
Apprentissage automatique avec Python! Préparation
Bloc-notes de ressources d'étude d'apprentissage automatique
Mémo pratique du système d'apprentissage automatique
Programmation Python Machine Learning> Mots-clés
Commencer avec l'apprentissage automatique Python
Mémo de construction d'environnement d'apprentissage automatique par Python
Créer un environnement d'étude d'apprentissage automatique Python avec macOS Sierra
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 7 Analyse de régression
Reconnaissance des nombres dans les images avec Python
Apprentissage automatique par python (1) Classification générale
Résumé de l'apprentissage automatique par les débutants de Python
Entrée / sortie avec Python (mémo d'apprentissage Python ⑤)
<Pour les débutants> bibliothèque python <Pour l'apprentissage automatique>
Python: prétraitement dans l'apprentissage automatique: présentation
Mémo d'apprentissage de la planification des sections ~ par python ~
Etude, jeu de numérotation avec Python
Mémo Python
mémo python
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 10 Introduction à Cupy
Apprentissage automatique
mémo python
Mémo Python
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 9 Introduction à scikit-learn
Mémo Python
Remarques sur la grammaire Python de l'apprentissage automatique PyQ
Numéros, chaînes, types de listes Python (mémo d'apprentissage Python ①)
[Mémo d'apprentissage] Bases de la classe par python
Utiliser le groupe d'API d'apprentissage automatique A3RT de Python
Apprentissage automatique avec python (2) Analyse de régression simple
Pourquoi Python est choisi pour l'apprentissage automatique
Python: prétraitement en machine learning: acquisition de données
[Shakyo] Rencontre avec Python pour l'apprentissage automatique
Structure et fonctionnement des données Python (mémo d'apprentissage Python ③)
[Python] Première analyse de données / apprentissage automatique (Kaggle)
[Python] Lorsqu'un amateur commence l'apprentissage automatique
[Python] Conception d'applications Web pour l'apprentissage automatique
[En ligne] Session d'étude Python pour tous # 55 Mémo approximatif
Créer un environnement pour Python et l'apprentissage automatique (macOS)
Bibliothèque standard Python: seconde moitié (mémo d'apprentissage Python ⑨)
Une introduction à Python pour l'apprentissage automatique
[Python] Enregistrement des résultats d'apprentissage (modèles) dans l'apprentissage automatique
Python: prétraitement dans l'apprentissage automatique: conversion de données
Study memo 1_eclipse (python) téléchargement, exécution python, téléchargement OpenPyXL
Construction d'environnement AI / Machine Learning avec Python
Bibliothèque standard Python: première moitié (mémo d'apprentissage Python ⑧)