sábado, 13 de junio de 2020

Curso de keras: Conjuntos de datos (datasets) para redes neuronales


Una red neuronal de aprendizaje profundo depende de los datos. La información a la que se hace referencia es tan importante como la forma en que la red neuronal la difunde.
Un conjunto de datos contiene hechos e información recopilados con la intención de usarlo como referencia o análisis. Las redes neuronales pueden utilizar imágenes, texto o números como entrada. Y esta entrada es lo que la red neuronal utiliza para aprender y hacer predicciones.

Los conjuntos de datos provienen de muchas fuentes. Las empresas a menudo generan datos internamente a través de aplicaciones o ingreso manual de datos para su uso en redes neuronales para realizar predicciones o análisis. Algunos gobiernos e instituciones de investigación publican conjuntos de datos para el consumo público.
Keras tiene numerosos conjuntos de datos disponibles en Internet creados por los desarrolladores o entidades externas y estructurado para ser compatible. Están disponibles gratuitamente para pruebas y planificación.

Más fotos como esta.


El módulo keras.datasets incluye métodos para cargar y obtener algunos conjuntos de datos publicados más populares. Algunos de ellos son las viviendas de Boston, que contienen información sobre viviendas en diferentes ubicaciones de Boston compiladas en la década de 1970. Tenemos el CIFAR-10, que es una colección de 60.000 imágenes pequeñas para clasificaciones sobre 10 etiquetas. CIFAR-100, que es una colección de 60.000 imágenes, con 100 etiquetas diferentes utilizadas para pruebas de clasificación.
IMDB, es reseñas de películas, contiene un conjunto de datos de 25.000 reseñas de películas de Internet.

Etiquetado  de forma binaria, con positivo o negativo utilizado para la clasificación de texto tenemos la base de datos MNIST, que se compone de dígitos escritos a mano para entrenar una red neuronal en la clasificación. También tenemos la base de datos Fashion MNIST, que es una lista de nueve artículos de ropa e imágenes de cada uno utilizados para una clasificación por reconocimiento de imágenes.

Aquí vamos a mostrar cómo descargar e instalar un conjunto de datos. Para ello necesitaremos una conexión rápida a Internet y abrir el navegador de Colaboratory de tensorflow

#habilitamos la versión 2.0 de tensor flow

%tensorflow_version 2.x

#importamos keras e importamos cifar10
import tensorflow.keras as keras
from keras.datasets import cifar10

Estas líneas de código cargamos el conjunto de datos cifar

Con load_data,  lo cargamos en estas variables y mostramos cuatro imágenes al azar.

(x_train,y_train),(x_test, y_test) =cifar10.load_data()

import matplotlib.pyplot as plt
plt.subplot(894)
plt.imshow(x_train[21], cmap=plt.get_cmap('gray'))

plt.subplot(234)
plt.imshow(x_train[31], cmap=plt.get_cmap('gray'))

plt.subplot(654)
plt.imshow(x_train[41], cmap=plt.get_cmap('gray'))

Esto muestra las imágenes. Estos datos están estructurados, ya se han limpiado y preparado, aquí hemos obtenido un conjunto de cuatro imágenes de esa biblioteca, la biblioteca CIFAR10. Es una colección de 60.000 imágenes pequeñas, clasificadas con 10 etiquetas.

Curso de keras: Conjuntos de datos (datasets) para redes neuronales


Explorando nuestro conjunto de datos

Un conjunto de datos es una compilación de información estructurada de manera que pueda ser utilizada por un algoritmo de aprendizaje profundo. Los conjuntos de datos utilizados en redes neuronales pueden comprender información recopilada de muchas fuentes. E incluyen diferentes tipos de datos, que van desde imágenes para problemas de clasificación hasta texto para predicción de regresión. Implementar y extraer datos de estas fuentes de información requiere comprender de qué se componen los datos y cómo están estructurados. Para que las capas en una red neuronal puedan entender la entrada.
La regresión se usa para predecir la probabilidad de un resultado basado en datos históricos. Los problemas de regresión usualmente utilizan datos en un eje x e y. Donde, en la mayoría de los casos, la variable independiente se asigna al eje x y la variable dependiente se asigna a y.

La clasificación se puede hacer en texto o imágenes. Por lo general, las imágenes tendrán una categoría asignada. El objetivo del aprendizaje automático es comprender qué imagen pertenece a qué categoría y aprender patrones dentro de las imágenes. Cuando se presentan nuevos datos, la red neuronal intentará encontrar patrones en la imagen e identificar correctamente a qué categoría pertenece.

Los problemas de clasificación realizados con texto intentarán comprender los datos y asignarlos a una categoría o una variable definida. Por ejemplo, en el caso de querer conocer la resistencia de diferentes tipos de metales. Si agregamos un tornillo al conjunto de datos y conocemos la resistencia del tornillo, la red neuronal intentará clasificar de qué metal está hecho.

Importamos la librería de pandas.

import pandas as pd
from sklearn.datasets import load_boston
bostondata = load_boston()

Cargamos los datos de la base de datos de edificios de Boston.  Si queremos ver la lista de claves del dataset ponemos:

print(bostondata.keys())

Nos devuelve como resultado algo así.

dict_keys(['data', 'target', 'feature_names', 'DESCR', 'filename'])

Si queremos más información por ejemplo, basándonos en las instrucciones de la línea de arriba podemos escribir:

print(bostondata.DESCR)

Esto información nos indica que tenemos 506 instancias, con 13 atributos utilizados para predictores y 1 utilizado para el objetivo. Los nombres y descripciones de los atributos están disponibles a través del campo de descripción DESCR.

Explorando el conjunto de datos

Para ver parte de la información contenida en un conjunto de datos, necesitamos crear un DataFrame que contenga las columnas.


Si queremos ver los primeros cinco registros del dataset escribimos

boston = pd.DataFrame(bostondata.data, columns =bostondata.feature_names)
boston.head()

Boston dataset

Hay que tener en cuenta que numera los registros desde cero.
Para ver el conjunto de datos completo dentro de este DataFrame, escribimos

print(boston)

Imprimir un dataset

Así así, podemos ver todos los registros.

Si queremos ver los tipos de datos en el DataFrame, escribimos

boston.dtypes

boston.dtypes

con esto obtenemos una lista de los tipos de cada columna del dataset. En este caso todos son números de coma flotante de  64 bits.

Cualquiera de estas columnas puede ser descrita. Para ello escribimos.

boston['AGE']

mostrar una columna de un dataset

Donde ‘AGE’ es el nombre de una columna real del Dataset

En nuestro ejemplo, la columna AGE indica la edad de los edificios. Si deseamos ver todos los diferentes rangos, recuentos y los valores medios.

boston['AGE'].describe()

Preparación de datos

Cando se recopilan datos, el sistema debe ser capaz de utilizarlos. Para garantizar que los datos sean confiables, deben validarse. Este proceso implica analizar el origen de los datos, realizar una verificación cruzada con otros orígenes de datos y rastrear su historial para garantizar el linaje.

Un diccionario de datos es un conjunto de información que describe el conjunto de datos.  Incluye información como el formato, la estructura y la relación entre los elementos. Y también tienen un conjunto de metadatos adjuntos que describe el contenido del conjunto de datos.
Una vez creado deben definirse las definiciones y reglas comerciales, aplicarse y validarse. Esto garantizará que todos los datos sean homogéneos y que los resultados del análisis puedan entenderse claramente.
Si se realizan cambios, deben documentarse claramente. Cualquier ambigüedad o una nueva terminología, la fuente de datos y la administración antes de implementar los datos deben quedar claramente descritas y documentadas.

Avanzar en la implementación de los datos implica la limpieza de cualquier observación faltante y la eliminación de datos que pueden sesgar los resultados. Los datos incorrectos pueden contener variables que crean problemas. Por ejemplo identificadores no únicos, filas con valores constantes o columnas que ya no son relevantes para el negocio.

Una vez que se ha realizado la limpieza inicial, los datos deben visualizarse y examinarse en profundidad para detectar valores faltantes y datos asimétricos. Estos podrían ser valores atípicos que se desvían significativamente debido a factores externos u observaciones incorrectas.

Importaremos algunos paquetes:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

print(bostondata.keys())
print(bostondata.DESCR)

Cargamos el conjunto de datos boston en una variable llamada bostondata.

from sklearn.datasets import load_boston
bostondata = load_boston()

Para cargar el marco de datos hacemos

boston = pd.DataFrame(bostondata.data, columns=bostondata.feature_names)

Para verificar si el conjunto de datos tiene valores.

boston.isnull().sum()

Cada columna devuelve 0, lo que indica que no faltan valores.

Para generar una gráfica con los valores del Dataset. De este modo podemos visualizar  los posibles valores atípicos en los datos que pueden sesgar los resultados.

sns.set(rc={'figure.figsize':(11.7,8.27)})
sns.distplot(boston['AGE'],bins=50)

visualización de un dataset con distplot

El gráfico que obtenemos nos permite ver si hay alguna desviación obvia. En este ejemplo concreto podemos ver claramente que los edificios más antiguos, son los valores claramente atípicos, pues el gráfico se dispara para estos valores. Entonces, esto sería algo que sería muy interesante para un científico de datos.

Podemos identificar ciertos registros para ver si están sesgando nuestros resultados.
Para hacer esto escribimos:

plt.show()
boston.loc[boston['AGE']==100]

sesgo de datos en un dataset

Nos permite ver todos los edificios que tienen 100 años de edad, si queremos eliminar estas filas de nuestro Dataset,  pondremos

boston.drop([x,y],inplace=True)

donde x, y son las filas a eliminar del Dataset

No hay comentarios:

Publicar un comentario