Los datos son las entradas para nuestro modelo de Machine Learning. Para este proyecto, vamos a utilizar un set de datos popular que contiene imágenes de dígitos numéricos escritos a mano.
El modelo de Machine Learning que vamos a entrenar, va a aprender a distinguir entre los diferentes dígitos.
Cada una de las imágenes con cada uno de los dígitos será la entrada al modelo y el modelo nos dará de respuesta, cuál es el dígito que “cree” que es.
Para trabajar con grupos de datos y hacer algunas gráficas, vamos a utilizar diferentes paquetes o bibliotecas (‘libraries’) que son compatibles con Python.
Para seleccionar el modelo de aprendizaje de Machine Learning: Scikit-Learn
Instalando con CONDA
CONDA es un manejador de paquetes, ambientes, etc para diferentes lenguajes de programación, nosotros lo utilizamos para Python.
En consola con los siguientes comandos podemos instalar nuestros requerimientos previos:
$ conda install -c anaconda numpy
Con esta instrucción por línea de comando, utilizamos el servicio de anaconda para instalar el paquete de Numpy en nuestro sistema, anaconda se ocupa de buscar los paquetes en internet para instalarlo. Luego utilizaremos Numpy cuando lo importemos: import numpy
$ conda install -c conda-forge matplotlib
Con esta instrucción por línea de comando, utilizamos el servicio de anaconda para instalar el paquete de Matplotlib en nuestro sistema, anaconda se ocupa de buscar los paquetes en internet para instalarlo. Luego utilizaremos Matplotlib cuando lo importemos:
from matplotlib import pyplot
$ conda install -c anaconda scikit-learn
Con esta instrucción por línea de comando, utilizamos el servicio de anaconda para instalar el paquete de scikit-learn en nuestro sistema, anaconda se ocupa de buscar los paquetes en internet para instalarlo. Scikit-Learn es el lugar de donde sacaremos los modelos de Machine Learning para entrenarlos con nuestros datos. Luego utilizaremos scikit-learn cuando lo importemos:
from sklearn.model_selectionimporttrain_test_splitfrom sklearn.treeimportDecisionTreeClassifierfrom sklearn.metricsimportconfusion_matrixfrom sklearn.ensembleimportRandomForestClassifier
Instalando con PIP
PIP es el manager de paquetes de Python.
Podemos ir directamente a la línea de comando e introducir el comando para instalar los paquetes que necesitamos:
Para numpy
$ pip install numpy
Con esta instrucción en nuestra línea de comando, el manager de paquetes de Python va a buscar el paquete Numpy para instalarlo en nuestro sistema. Luego utilizaremos en nuestro ambiente de trabajo (Jupiter Notebook) cuando lo importemos:
import numpy
para matplotlib
$ pip install matplotlib
Con esta instrucción en nuestra línea de comando, el manager de paquetes de Python va a buscar el paquete de matplotlib para instalarlo en nuestro sistema. Luego utilizaremos en nuestro ambiente de trabajo (Jupiter Notebook) cuando lo importemos:
from matplotlib import pyplot
para scikit learn el primero o el segundo
$ pip install sklearn** #pip install -U scikit-learn
Con esta instrucción en nuestra línea de comando, el manager de paquetes de Python va a buscar el paquete de scikit-learn para instalarlo en nuestro sistema. Luego utilizaremos en nuestro ambiente de trabajo (Jupiter Notebook) cuando lo importemos:
from sklearn.model_selectionimporttrain_test_splitfrom sklearn.treeimportDecisionTreeClassifierfrom sklearn.metricsimportconfusion_matrixfrom sklearn.ensembleimportRandomForestClassifier`
Es posible utilizar esta instrucción pip install -U scikit-learno esta pip install sklearn
También, es posible invocar el set de datos a utilizar desde línea de comando:
Con el comando de pip install el mnist, PIP busca el paquete mnist en Python para instalarlo en nuestro sistema.
SET DE DATOS MNIST
El set de datos se lo encuentra aquíde donde vamos a descargar los 4 folders.
train-images-idx3-ubyte.gz: training set images
train-labels-idx1-ubyte.gz: training set labels
t10k-images-idx3-ubyte.gz: test set images
t10k-labels-idx1-ubyte.gz: test set labels
Los datos en formato .gz descomprimirlos dentro de un folder MNIST_data
$ gzip *ubyte.gz -d
Este comando para terminal de Mac OS permite descomprimir los archivos descargados que vienen en formato “.gz” y ponerlos en un formato que luego puedan ser leídos por medio de instrucciones desde nuestro ambiente de trabajo.
Y para importar estos datos a nuestro espacio de trabajo utilizamos ya sea en nuestro documento python o nuestro Jupyter notebook:
# importar del módulo mnist from mnist import **MNIST**
Ya que usamos pip para instalar el python-mnist podemos importarlo en nuestro espacio de trabajo.
#importar el dataset mndata = MNIST('MNIST_data')
En la variable mnist descargamos la info de nuestro data set que incluye los datos de entrenamiento, como los datos de prueba.
# (features -> datos y labels -> etiquetas) datos, labels = mndata.load_training()
En las variables datos y labels, asignamos los datos que serán de entrenamiento con sus respectivas etiquetas por medio del mndata definido antes y su función load_training()
VISUALIZACION
# librerías %matplotlib inline from matplotlib import pyplot as plt
# [sk-learn](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html) para dividir todo el set de entrenamiento en: entrenamiento y validación
from sklearn.model_selection import train_test_split
DATOS
# todos los datos de training... deben ser divididos
# Datos de Entremamiento70%(features, labels)# Datos de Testing30%(features y labels)# sklearn.model_selection.train_test_split(*arrays,**options)# train_data, test_data, train_labels, test_labels
# 70% del total de los datos serán para el training settrain_data, test_data, train_labels, test_labels =train_test_split(datos, labels, test_size=0.3, random_state=42)
Continuaremos aprendiendo sobre los diferentes modelos de Machine Learning Supervisado.
Esto me funcionó en Windows, tuve que cambiarle el nombre a los archivos de los datos de prueba porque tienen la palabra .idx cuando debería ser con guión -idx.
import numpy as np
import matplotlib
from matplotlib import pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import confusion_matrix
from sklearn.ensemble import RandomForestClassifier
mndata = MNIST('MNIST_data')mndata
datos, labels = mndata.load_training()plt.gray()for i inrange(25): plt.subplot(5,5, i+1) d_image = datos[i] d_image = np.array(d_image, dtype='float') pixels = d_image.reshape((28,28)) plt.imshow(pixels, cmap='gray') plt.title(labels[i]) plt.axis('off')plt.show()
La carpeta "MNIST_data" y los archivos que se descomprimen sobre ella ¿En que ruta lo haces?
La carpeta “MNIST_data” y los archivos que se descomprimen sobre ella, se crean al nivel de ruta de tu código python.
Si tienen ya instalado tensorFlow o están trabajando en google collab, creo que es más ffácil acceder a los datos de mnist con el siguiente código
from tensorflow.examples.tutorials.mnistimport input_data
cuando uno hace click en la url de http://yann.lecun.com/exdb/mnist/, trata de resolver un recurso de platzi, por ende termina en un 404
ya quedo resuelto Francisco, gracias por avisar!
nop no quedo
¿Cómo puedo instalar MNIST, con el comando de "conda", lo intento con "pip" pero me arroja un error de privilegios?
Para instalar librerías con PIP hay dos alternativas:
1.- Instalar las librerías en el sistema con sudo (mala práctica)
2.- Crear un entorno virtual en Python para tus proyectos (buena práctica) En la clase Entorno Virtual en Python y su importancia se enseña cómo se hace :)
¿El link para descargar los folders no sirve? o es mi equipo
Hola
Al parecer el servidor de la página de MNIST no está funcionando correctamente, puedes esperar unos momentos para intentar de nuevo más adelante.
En la página de mxltend en GitHub vienen las direcciones independientes para descargar los sets de imágenes. Puedes utilizarlos en lo que se reactiva la página origina.
También en la página de TensorFlow verás un ejemplo trabajando con esta base de datos.
Saludos
Les dejo la forma en la cual me funciono:
import numpy as np
importmatplotlibfrom matplotlib import pyplot as plt
from sklearn.model_selectionimporttrain_test_splitfrom sklearn.treeimportDecisionTreeClassifierfrom sklearn.metricsimportconfusion_matrixfrom sklearn.ensembleimportRandomForestClassifierfrom mnist importMNISTmndata =MNIST('MNIST_data')datos, labels = mndata.load_training()plt.gray()for i inrange(25): plt.subplot(5,5,i+1) d_image = datos[i] d_image = np.array(d_image, dtype='float') pixels = d_image.reshape((28,28)) plt.imshow(pixels, cmap='gray') plt.title(labels[i]) plt.axis(False)plt.show()
ACTUALMENTE A JUNIO DEL 2021 ,lo que pone la profesora ya no esta activo, sin embargo se consigue lo mismo haciendo esto ( en colab ) :
import numpy as np
from keras.datasets import mnist
import matplotlib.pyplot as plt
(train_data,train_labels),(test_data,test_labels)=mnist.load_data()
Creo que primero se debería ver si vamos a instalar primero anaconda con todas esas librerías y tb cómo se instala en los diferentes sistemas operativos :)
Por fin... ya quedó solucinado... el error anterior lo resolví moviendo los archivos descargados directamente en el directorio MNIST_data y remplazando el .idx por -idx.
import numpy as np
importmatplotlibfrom matplotlib import pyplot as plt
from sklearn.model_selectionimporttrain_test_splitfrom sklearn.treeimportDecisionTreeClassifierfrom sklearn.metricsimportconfusion_matrixfrom sklearn.ensembleimportRandomForestClassifier#Datafrom mnist importMNISTmndata =MNIST('MNIST_data')datos, labels = mndata.load_training()plt.gray()for i inrange(25): plt.subplot(5,5,i+1) d_image = datos[i] d_image = np.array(d_image, dtype='float') pixels = d_image.reshape((28,28)) plt.imshow(pixels, cmap='gray') plt.title(labels[i]) #plt.axis('o`f`f`')plt.show()
Me marca el siguiente error:
File"c:\Users\Pedro\Desktop\g1tHuB\machinelearning\Introducción a Machine Learning\1. ejemplo1.py", line 13,in<module> datos, labels = mndata.load_training()File"C:\Users\Pedro\AppData\Roaming\Python\Python39\site-packages\mnist\loader.py", line 125,in load_training
ims, labels = self.load(os.path.join(self.path, self.train_img_fname),File"C:\Users\Pedro\AppData\Roaming\Python\Python39\site-packages\mnist\loader.py", line 247,in load
with self.opener(path_lbl,'rb')asfile:File"C:\Users\Pedro\AppData\Roaming\Python\Python39\site-packages\mnist\loader.py", line 239,in opener
returnopen(path_fn,*args,**kwargs)PermissionError:[Errno13]Permission denied:'MNIST_data\\train-labels-idx1-ubyte'
Si alguien llega a tener algún error con MNIST, probablemente sea porque falta importarla, pueden intentarlo con:
from mnist importMNIST
espero ser de ayuda :D
trabajar esto desde Win10 es un problema, MNIST no lo carga cuando se importa, y realice todas las instalaciones de los módulos para poder realizar este tutorial pero nada
en Ubuntu trabaja sin ningún problema carga todo totalmente y se ejecuta pero en windows es un problema barbaro, segun he leido cargar las librerías en windows es mas complejo
en github realice este ejemplo a continuación y si funciona pero el tutorial bajo Win genera problemas
el error que me sale cuando cargo el MNIST es el siguiente
ImportErrorTraceback(most recent call last)<ipython-input-2-599f2a84d274>in<module>---->1from mnist importMNISTImportError: cannot import name 'MNIST'
alguien trabajando bajo Win tiene o tuvo este mismo error?, como lo solucionaron y realizaron este Tuto sin problemas?
Antes es necesaripo instalar el paquete "python-mnist"
Desde la consola de Python
pip install python-mnist
Desde la consola de Jupyter Notebook (importante el signo de admiración al inicio)
!pip install python-mnist
Luego intenta importar
from mnist importMNIST
Codigo
#! /home/carlos/Proyectos/virtual/ml/bin/python3import numpy as np
importmatplotlibfrom matplotlib import pyplot as plt
from sklearn.model_selectionimporttrain_test_splitfrom sklearn.treeimportDecisionTreeClassifierfrom sklearn.metricsimportconfusion_matrixfrom sklearn.ensembleimportRandomForestClassifier#Datafrom mnist importMNISTmndata =MNIST('MNIST_data')datos, labels = mndata.load_training()plt.gray()for i inrange(25): plt.subplot(5,5, i+1) d_image = datos[i] d_image = np.array(d_image, dtype='float') pixels = d_image.reshape((28,28))
una pregunta usas linux y en caso de ser así usar lo primero para ejecutar desde virtualenv python3 para controlar las versiones ?, es me ha estado dando un poco de problema al hacer un venv con un proyecto para heroku, me importa cosas que no debería importa por favor me podrías confirmar te lo agradecería.
no se exactamente el por que pero en mi ordenador no se instalan algunas cosas de forma correcta en jupyter notebook, así que uso google colaboratory
A mí me da este error cuando trato de correr el código :c
Traceback (most recent call last):
File “code.py”, line 5, in <module>
from sklearn.tree import DecisionTreeClassifier
File “C:\Users\RA\Anaconda3\lib\site-packages\sklearn\tree_init_.py”, line 6, in <module>
from .tree import DecisionTreeClassifier
File “C:\Users\RA\Anaconda3\lib\site-packages\sklearn\tree\tree.py”, line 40, in <module>
from ._criterion import Criterion
File “sklearn\tree_splitter.pxd”, line 34, in init sklearn.tree._criterion
File “sklearn\tree_tree.pxd”, line 37, in init sklearn.tree._splitter
File “sklearn\tree_tree.pyx”, line 90, in init sklearn.tree._tree
AttributeError: type object ‘sklearn.tree._tree.TreeBuilder’ has no attribute ‘reduce_cython’
Código que corrí:
import numpy as np
importmatplotlibfrom matplotlib import pyplot as plt
from sklearn.model_selectionimporttrain_test_splitfrom sklearn.treeimportDecisionTreeClassifierfrom sklearn.metricsimportconfusion_matrixfrom sklearn.ensembleimportRandomForestClassifiermndata =MNIST('MNIST_data')mndata
datos, labels = mndata.load_training()plt.gray()for i inrange(25): plt.subplot(5,5, i+1) d_image = datos[i] d_image = np.array(d_image, dtype='float') pixels = d_image.reshape((28,28)) plt.imshow(pixels, cmap='gray') plt.title(labels[i]) plt.axis('off')plt.show()