Défis d'apprentissage automatique de Coursera en Python: ex3 (reconnaissance de nombres manuscrits avec récursivité logistique)

introduction

Coursera Machine Learning est devenu la première introduction mondiale à l'apprentissage automatique. Il s'agit de la troisième d'une série d'essais d'implémentation en Python après avoir étudié les tâches de programmation Matlab / Octave.

Cette fois, dans la première moitié de l'ex3, la tâche de reconnaître les nombres manuscrits à l'aide de la régression logistique. L'ensemble de données est un sous-ensemble de MNIST, qui reçoit 5000 images en niveaux de gris 20x20 pixels au format de données Matlab / Octave .mat. En fait, scikit-learn a une fonction appelée fetch_mldata (), qui vous permet également de télécharger des données MNIST (28x28 pixels, 70 000 feuilles) (voir cet article: [Handwritten by MNIST with Multi-layer Perceptron] Reconnaissance des numéros](http://aidiary.hatenablog.com/entry/20140205/1391601418), mais cette fois, j'utiliserai les données .mat ci-dessus à des fins de comparaison.

La seconde moitié de ex3 est un petit contenu à moitié fini dans lequel seule la partie de propagation directe du réseau neuronal est créée, je vais donc l'omettre.

code

Les données sont également bien formées et leur code est simple car il utilise simplement la classe LogisticRegression de scicit-learn. Les données au format .mat de Matlab peuvent être lues à l'aide de la fonction scipy.io.loadmat () de Scipy.

ex3.py


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

# scipy.io.loadmat()Lire les données Matlab en utilisant
data = scio.loadmat('ex3data1.mat')
X = data['X']  #X est une matrice 5000x400
y = data['y'].ravel()  #y est une matrice de 5000 x 1, ravel()Convertir en vecteur de 5000 dimensions en utilisant

model = linear_model.LogisticRegression(penalty='l2', C=10.0) #Définition du modèle
model.fit(X,y)    #Apprendre avec les données d'entraînement
model.score(X,y)  #Taux de réponse correct dans les données d'entraînement

Lors de l'exécution, le taux de réponse correct pour la reconnaissance de caractères dans les données d'apprentissage était affiché sous la forme 0,96499999999999997.

Points d'apprentissage automatique

Le paramètre $ \ lambda $, qui indique la force de la régularisation, était $ \ lambda = 0,1 $ dans Coursera. Comme présenté dans l'article précédent, dans la classe sklearn.linear_model.LogisticRegression, le paramètre de régularisation est spécifié par $ C $ (correspondant à l'inverse de $ \ lambda $), donc cette fois le modèle est défini comme C = 10.0. Défini.

En conséquence, le taux de réponse correcte dans les données de formation était de 96,5% comme mentionné ci-dessus. Le résultat avec Matlab / Octave était de 94,9%, est-ce donc un peu overfit? Je ne sais pas pourquoi.

Autres points

C'est trop simple, j'ai donc écrit un code pour afficher les données mal reconnues. Lors de l'entraînement avec le modèle ci-dessus, 175 des 5000 données d'entraînement seront incorrectement déterminées. J'afficherai les étiquettes (comment j'ai fait une erreur) avec les images de 25 éléments sélectionnés au hasard.

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

Le résultat est le suivant. ex3-2.png

Il y a des erreurs convaincantes, comme confondre 4 pour 9 et vice versa, mais il y en a aussi d'autres qui ne le sont pas. Eh bien, c'est peut-être quelque chose comme ça parce que je viens de faire une régression logistique des données de pixels sans extraire de fonctionnalités. Cela peut être un peu surajustement que cela, il semble donc que Coursera devrait sélectionner le paramètre de régularisation approprié $ C $ en utilisant la validation croisée, etc. qui apparaîtra dans un module ultérieur.

Recommended Posts

Défis d'apprentissage automatique de Coursera en Python: ex3 (reconnaissance de nombres manuscrits avec récursivité logistique)
Défis d'apprentissage automatique de Coursera en Python: ex2 (retour logistique)
Coursera Machine Learning Challenge en Python: ex1 (régression linéaire)
Coursera Machine Learning Challenge en Python: ex7-1 (Compression d'image avec clustering K-means)
Défis d'apprentissage automatique de Coursera en Python: ex7-2 (analyse principale)
Défis de Coursera Machine Learning en Python: ex5 (ajustement des paramètres de régularisation)
Coursera Machine Learning Challenge en Python: ex6 (Comment ajuster les paramètres SVM)
Reconnaissance des nombres dans les images avec Python
Apprentissage automatique avec python (2) Analyse de régression simple
Mémo d'étude Python & Machine Learning ⑥: Reconnaissance des nombres
Régression logistique d'apprentissage automatique
Apprentissage automatique avec Python! Préparation
Commencer avec l'apprentissage automatique Python
Algorithme d'apprentissage automatique (régression logistique)
Apprentissage automatique par python (1) Classification générale
Classification et régression dans l'apprentissage automatique
Python: prétraitement dans l'apprentissage automatique: présentation
Analyse de régression logistique Self-made avec python
Mémo d'apprentissage "Scraping & Machine Learning avec Python"
"Processus Gauss et apprentissage automatique" Régression de processus Gauss implémentée uniquement avec Python numpy
<Subject> Machine learning Chapitre 3: Modèle de régression logistique
Amplifiez les images pour l'apprentissage automatique avec Python
[python] Techniques souvent utilisées dans l'apprentissage automatique
Python: prétraitement en machine learning: acquisition de données
[Shakyo] Rencontre avec Python pour l'apprentissage automatique
J'ai essayé d'implémenter la régression logistique de Cousera en Python
[Python] Enregistrement des résultats d'apprentissage (modèles) dans l'apprentissage automatique
Python: prétraitement dans l'apprentissage automatique: conversion de données
Construction d'environnement AI / Machine Learning avec Python
Alignez le nombre d'échantillons entre les classes de données pour l'apprentissage automatique avec Python
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)
Apprentissage automatique à partir de Python Personal Memorandum Part2
Apprentissage automatique à partir de Python Personal Memorandum Part1
EV3 x Python Machine Learning Partie 2 Régression linéaire
[Python] Collectez des images avec Icrawler pour l'apprentissage automatique [1000 feuilles]
Touchons une partie de l'apprentissage automatique avec Python
J'ai commencé l'apprentissage automatique avec le prétraitement des données Python
Créer un environnement d'apprentissage automatique Python avec des conteneurs
Apprenez le filtrage collaboratif avec les supports Coursera Machine Learning
Exécutez un pipeline de machine learning avec Cloud Dataflow (Python)
Outil MALSS (application) qui prend en charge l'apprentissage automatique en Python
Outil MALSS (basique) qui prend en charge l'apprentissage automatique en Python
Python Scikit-learn Analyse de régression linéaire Analyse de régression simple non linéaire Apprentissage automatique
Créer un environnement de développement d'applications d'apprentissage automatique avec Python
Résumé du flux de base de l'apprentissage automatique avec Python
Tentative d'inclusion du modèle d'apprentissage automatique dans le package python
Entropie croisée à revoir dans les devoirs de la semaine 2 de Coursera Machine Learning
MALSS (introduction), un outil qui prend en charge l'apprentissage automatique en Python
Apprentissage automatique Une histoire sur des personnes qui ne sont pas familiarisées avec GBDT utilisant GBDT en Python
[Apprentissage automatique] Ecrivez vous-même la méthode k-plus proche voisin en python et reconnaissez les nombres manuscrits.
Distribution logistique en Python
Apprendre Python avec ChemTHEATER 03
"Orienté objet" appris avec python
Apprendre Python avec ChemTHEATER 05-1
Apprendre Python avec ChemTHEATER 02
Régression linéaire d'apprentissage automatique
Reconnaissance vocale avec Python
Apprendre Python avec ChemTHEATER 01
Python: apprentissage supervisé (retour)
Premier nombre 2 en Python