Herramientas de usuario

Herramientas del sitio


inteligencia_artificial:datasets

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
inteligencia_artificial:datasets [2023/06/07 15:46] – [MNIST digits] albertointeligencia_artificial:datasets [2023/09/05 15:58] (actual) – [Irises] alberto
Línea 5: Línea 5:
 Dataset de la flor de Iris, un dataset clásico desarrollado por R. A. Fisher en 1936 en su //paper// "The Use of Multiple Measurements in Taxonomic Problems". \\ Dataset de la flor de Iris, un dataset clásico desarrollado por R. A. Fisher en 1936 en su //paper// "The Use of Multiple Measurements in Taxonomic Problems". \\
  
-Es un dataset pequeño, con 3 clases, 50 muestras de datos por cada clase, y 4 atributos: anchura del sépalo, longitud del sépalo, anchura del pétalo y longitud del pétalo, simepre en centímetros. Las tres clases son la subespecie de la flor de Iris: I. setosa, I. versicolour, y I. virginica. \\+Es un dataset pequeño, con 3 clases, 50 muestras de datos por cada clase, y 4 atributos: anchura del sépalo, longitud del sépalo, anchura del pétalo y longitud del pétalo, siempre en centímetros. Las tres clases son la subespecie de la flor de Iris: I. setosa, I. versicolour, y I. virginica. \\
  
 Se puede descargar del [[https://archive-beta.ics.uci.edu/|repositorio principal de UCI]], o directamente desde [[https://archive-beta.ics.uci.edu/dataset/53/iris|su web]]. Se puede descargar del [[https://archive-beta.ics.uci.edu/|repositorio principal de UCI]], o directamente desde [[https://archive-beta.ics.uci.edu/dataset/53/iris|su web]].
Línea 132: Línea 132:
  
 ===== CIFAR-10 ===== ===== CIFAR-10 =====
 +CIFAR-10 es otro dataset clásico para modelos de aprendizaje profundo, lo suficientemente pequeño como para no necesitar una gran cantidad de tiempo de entrenamiento con CPU, o una GPU. \\
 +
 +Al igual que con MNIST, lo descargaremos desde Keras, aunque puede encontrarse en su [[https://www.cs.toronto.edu/~kriz/cifar.html|web oficial]]. \\
 +
 +El dataset está formado por 60.000 imágenes RGB de 32 x 32 píxeles, divididas en 10 clases, con 6.000 imágenes por cada una, etiquetadas de la siguiente manera:
 +^ Etiqueta ^ Clase      ^
 +| 0        | Airplane   |
 +| 1        | Automobile |
 +| 2        | Bird       |
 +| 3        | Cat        |
 +| 4        | Deer       |
 +| 5        | Dog        |
 +| 6        | Frog       |
 +| 7        | Horse      |
 +| 8        | Ship       |
 +| 9        | Truck      |
 +
 +50.000 imágenes forman el conjunto de datos de entrenamiento, y 10.000 el conjunto de imágenes de test. \\
 +
 +Actuamos igual que con el dataset MNIST, pasamos las imágenes a vectores de atributos y las guardamos para su uso posterior (en este caso no las vamos a manipular). \\
 +En este caso hay que tener en cuenta que las imágenes tienen una dimensión más, ya que las imágenes en lugar de tener formato de escala de grises, son en color RGB (Red, Green, Blue), tres valores de color por cada píxel: (60.000; 32; 32; 3). \\
 +
 +Para esto tenemos el siguiente código:
 +<code python>
 +import numpy as np
 +import keras
 +from keras.datasets import cifar10
 +
 +(xtrn, ytrn), (xtst, ytst) = cifar10.load_data()
 +idx = np.argsort(np.random.random(ytrn.shape[0]))
 +xtrn = xtrn[idx]
 +ytrn = ytrn[idx]
 +idx = np.argsort(np.random.random(ytst.shape[0]))
 +xtst = xtst[idx]
 +ytst = ytst[idx]
 +
 +np.save("cifar10_train_images.npy", xtrn)
 +np.save("cifar10_train_labels.npy", ytrn)
 +np.save("cifar10_test_images.npy", xtst)
 +np.save("cifar10_test_labels.npy", ytst)
 +
 +xtrnv = xtrn.reshape((50000,32*32*3))
 +xtstv = xtst.reshape((10000,32*32*3))
 +np.save("cifar10_train_vectors.npy", xtrnv)
 +np.save("cifar10_test_vectors.npy", xtstv)
 +</code>
 +
 +Este código está explicado en el [[https://colab.research.google.com/drive/1LkgvtShcvUEj7xgcrdk4n8aJuzZMHTiH?hl=es&pli=1#scrollTo=qLwMfcqwL2qZ|cuaderno de Google Colab]] dedicado.
 +
 +====== Aumento de datos ======
 +En ocasiones tenemos pocos datos de entrada, de modo que necesitamos disponer de más datos para entrenar al modelo adecuadamente. Para ello es posible conseguir más datos modificando los existentes, de manera que pudieran haber sido extraídos del //parent distribution//. \\
 +
 +Siempre que fuera posible, deberíamos realizar un aumento de datos, ya que suele dar buenos resultados al entrenar los modelos. \\
 +
 +En modelos clásicos, el aumento de datos puede ayudar a que el modelo sea más preciso, consiguiendo muestras que podrían extraerse de la distribución principal. En modelos de aprendizaje profundo modernos, pueden ayudar en el proceso de **regulación**. Este proceso es el que hace que el modelo aprenda las características importantes de los datos de entrada como nosotros deseemos (ejemplo: aprender a diferenciar lobos de perros Husky, sin que el modelo aprenda por ejemplo a diferenciar los fondos de los animales, en lugar de los animales en sí). \\
 +
 +Otro beneficio del aumento de datos es disminuir la probabilidad de que ocurra //**overfitting**//. El //overfitting// o sobreajuste, es la capacidad de un modelo por el que recuerda muy bien los datos de entrenamiento, pero es incapaz de generalizar cuando se le introducen otros datos, como si sólo se aprendiese de memoria los datos de entrenamiento. \\
 +
 +Una cosa muy importante a tener en cuenta, es que los datos aumentados a partir de un dato de uno de los tres tipos de dataset (entrenamiento, test y validación), deben pertenecer a ese mismo dataset. NUNCA los datos aumentados pueden pertenecer a datasets diferentes, o a uno distinto del dato original. La forma correcta de aumentar los datos para evitar que se de este problema de forma accidental, es hacerlo __después__ de haber creado los datasets de entrenamiento, test y validación. \\
 +
 +Los datos que se aumentan normalmente son los de entrenamiento, aunque teóricamente no debería haber problema en aumentar los de test y validación, especialmente si hay pocos. \\
 +
 +===== Cómo aumentar los datos de entrenamiento =====
 +Cuando los datos son imágenes, es bastante directo. Podemos rotar la imagen, voltearla horizontal o verticalmente, cambiar los colores, tal vez incluso intercambiando los canales RGB, etc. \\
 +
 +La única consideración que hay que tener a la hora de aumentar datos a partir de uno en concreto, es que los nuevos tengan sentido. En el caso de imágenes, por ejemplo, no tiene sentido dar la vuelta a una imagen de un mono colgado del árbol, ya que todos los árboles se mostrarían del revés y podría generar algún problema. En una vista aérea no habría, en principio, problema en rotar la imagen, pero añadir una imagen frontal si el resto son aéreas, tampoco tiene razón de ser. \\
 +
 +En el caso de vectores de atributos, el cambio es más sutil, pero también se basa en la misma premisa: que tenga sentido. Los nuevos datos creados deben poder pertenecer a la "distribución padre". \\
 +
 +Se ha creado en Google colab un ejemplo de [[https://colab.research.google.com/drive/15NM7pmqpIH_iDp7kE8jI6ShQN0dITDwm?hl=es#scrollTo=IPDJrxvFbVGu|aumento de datos del dataset irises]], y otro ejemplo de [[https://colab.research.google.com/drive/15NM7pmqpIH_iDp7kE8jI6ShQN0dITDwm?hl=es#scrollTo=4D0jIAgns7KS|aumento de datos del dataset CIFAR-10]], bien razonados que se pueden consultar.
 +
 +==== Análisis de las componentes principales (PCA) ====
 +//Principal Component analysis (PCA)//. Es una vieja técnica matemática que se usa tanto en inteligencia artificial como en otras áreas. \\
 +Esta técnica nos da los componentes principales del conjunto de datos, esto son, vectores linealmente independientes formados como combinación lineal de los distintos atributos, que representan la varianza de los datos. Se puede extraer de aquí el índice de varianza, que representa en porcentaje o valor normalizado (0 - 1) cómo influye cada atributo en la varianza de los datos, y por lo tanto en el etiquetado. \\
 +
 +Esta técnica se usa muchas veces para eliminar los atributos (dimensiones) menos importantes y que apenas tienen influencia: al bajar el número de dimensiones, somo menos propensos a caer en la "maldición de la dimensionalidad". \\
 +En nuestro caso, la vamos a usar para otro fin: Aumentar el número de datos disponible. Para ello, localizaremos los atributos que no influyen prácticamente nada en las componentes principales y les añadiremos un ruido gausiano prácticamente despreciable, generando de este modo nuevos datos muy ligeramente diferentes a los originales, pero que mantendrán su etiquetado original. \\
 +
 +Con esta técnica aumentaremos los datos del [[https://colab.research.google.com/drive/15NM7pmqpIH_iDp7kE8jI6ShQN0dITDwm?hl=es#scrollTo=IPDJrxvFbVGu|dataset Irises]] y [[https://colab.research.google.com/drive/15NM7pmqpIH_iDp7kE8jI6ShQN0dITDwm?hl=es#scrollTo=jsh_Ht5LD825|breastCancer]].
  
inteligencia_artificial/datasets.1686145564.txt.gz · Última modificación: por alberto

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki