
Introducción al curso Computer Vision con Machine y Deep Learning programando en R. En este curso trabajaremos estos conceptos desde R, con la ayuda del paquete Caret y otras librerías de Aprendizaje Automático y Profundo. Analizaremos el famoso fichero MNIST con decenas de miles de números manuscritos y etiquetados. A disfrutarlo!
Mi nombre es David Manero, Ingeniero de Telecomunicaciones, Data Scientist, Data Manager y Lindy Hopper. Aquí están mis 2 centavos.
¿Qué es la Visión por Computador? Uno de los primeros puntos obligados en "¿De qué estamos hablando?" es tratar de tener una visión clara de lo que es la Visión por Computador. En este vídeo lo comentamos, lo definimos y veremos unos cuantos ejemplos muy interesantes.
¿Qué es R? Una descripción de qué es el lenguaje de programación R y su principales características, así como la presentación de RStudio, el IDE principal de este lenguaje.
Video explicativo de como instalar R y RStudio en Mac, aunque es extensible a Linux y Windows.
El paquete caret, Classification And REgression Training, es un paquete muy utilizado para realizar modelos de clasificación y clusterización en Machine Learning en R.
En esta lección veremos sus principales características.
H2O y TensorFlow son sendas aplicaciones a las que denominaremos Plataformas de Aprendizaje y que nos permiten, con una instalación en nuestros equipos, acceder a un entorno de desarrollo de Data Science y Machine Learning profesional, incluso a través de un interfaz con R.
Instalación del entorno de H2O desde un dispositivo Mac. Será necesario instalar también un entorno Java SDK.
Instalación de TensorFlow en Mac. Será necesario también instalar un entorno Python.
En esta clase vamos a aprender a instalar librerías en RStudio, y a utilizar el comando source() para ejecutar código de R. Y, de paso, instalamos todas las librerías o paquetes que necesitamos en el curso.
Aviso para los que han hecho otros cursos del instructor
Comenzamos a familiarizarnos con RStudio y las primeras nociones de R. Donde están las cosas, para qué sirven los botones, etc...
Comenzamos también a manejarnos con las variables y su asignación en R.
Seguimos familiarizándonos con R y RStudio.
Las operaciones más básicas con las variables numéricas y las alfanuméricas.
También veremos las diferencias entre introducir comandos por consola, por fichero y ejecutándolo desde el editor de RStudio.
Comenzamos a realizar operaciones con variables en R.
Operaciones aritméticas y también operaciones lógicas, así como comandos condicionales para comprobar el uso de las operaciones lógicas.
El primer objeto que veremos en esta sección son los vectores.
Veremos cómo asignarlos, y aprenderemos a operar con ellos. Operaciones aritméticas sobre vectores y cómo actúa R con vectores de distintos tamaños.
Seguimos operando con vectores, comandos especiales para ellos, como sum, max, min, prod, etc...
El objeto más importa para un científico de datos es el dataframe, que es la forma que tendrán nuestros datasets.
Un dataframe es una matriz en la que las filas son las distintas observaciones y las columnas son las variables que hay de cada observación.
En esta primera parte generamos un dataframe con el que operaremos.
El objeto más importa para un científico de datos es el dataframe, que es la forma que tendrán nuestros datasets.
Un dataframe es una matriz en la que las filas son las distintas observaciones y las columnas son las variables que hay de cada observación.
En la segunda parte vemos cómo hacer subsets del dataframe original y aprenderemos a acceder a cada uno de los datos.
El objeto más importa para un científico de datos es el dataframe, que es la forma que tendrán nuestros datasets.
Un dataframe es una matriz en la que las filas son las distintas observaciones y las columnas son las variables que hay de cada observación.
En la tercera parte veremos la operaciones principales que podemos realizar con nuestros dataframes.
Las listas son un tipo especial de objeto que tiene una mejor performance en el uso dentro de R.
Permite guardar los datos de una forma más ordenada, y nos recuerda a formatos como JSON.
En la lección aprenderemos a generarlas en R y a operar con ellas.
El último objeto que veremos en este curso son las Series de Tiempo. Aunque no las utilicemos más adelante, conviene conocerlas, ya que son muy importantes para análisis de datos, por ejemplo, en el mundo del e-commerce, o para procesos en los que el tiempo es un factor muy importante.
Un poco de "teoría" de cómo funcionan los bucles en R
Comenzamos a ver los bucles en acción en R. FOR y FOR anidados y WHILE.
Toca el turno del bucle REPEAT y los comandos BREAK y NEXT. Y también alguna consideración sobre cuando conviene hacer bucles y cuando no.
En este apartado vamos a ver cómo se utilizan las funciones en R y aprenderemos a hacer algunas.
En este capítulo veremos algunos comandos para hacer visualización de datos.
Conoce el dataset MNIST, el fichero de dígitos manuscritos del Instituto de Estadística de U.S.
Empezamos a explorar el fichero MNIST haciendo una representación gráfica de los trazos de los distintos números. Veremos las tendencias al escribir los distintos dígitos del 0 al 9 y veremos, también, la representación del set de training (42.000 observaciones) que imprimiremos en un pdf.
Seguimos explorando los ficheros de MNIST, observaremos diversas características de los datos y haremos una comparación, por cada dígito, de la representación de escritura manual con la que se escriben.
Ya sabemos lo que es Machine Learning, pero vamos a ver cómo lo utilizaremos para tratar el fichero MNIST.
Naïve Bayes es el método más ampliamente utilizado para hacer clasificaciones. Es un método sencillo y rápido.
Utilizamos Naïve Bayes para clasificar las observaciones del fichero MNIST y desarrollamos un modelo. Probaremos dos paquetes, el e1071, especializado en probabilidad y estadística, y que implementa un Naïve Bayes muy eficiente. Y el caret, que, como sabemos, contiene muchas implementaciones de algoritmos.
Near Zero Value y Principal Component Analysis son 2 métodos para reducir la dimensionalidad de un set de predictores. Se explican en esta clase.
¿Cómo funciona el algoritmo Random Forest? Conoceremos este algoritmo, un poco de su historia y, sobretodo, cómo funciona y cómo se utiliza.
Utilizamos los dos métodos de reducción de dimensionalidad, así como el algoritmo Random Forest para su uso con el set de datos MNIST.
El algoritmo Support Vector Machine es uno algoritmo bastante joven, pero que se ha puesto muy de moda por sus buenos resultados.
Usamos SVM para clasificar los dígitos de MNIST y comprobaremos su eficacia.
Las redes neuronales son fáciles de entender, pero es complicado controlarlas. Con esta clase trataremos de conocerlas y empezar a desentrañar sus misterios.
Usamos Redes Neuronales para clasificar MNIST. La delgada línea que separa las Redes Neuronales del Deep Learning se hace todavía más difusa cuando observamos los resultados.
Singular Value Decomposition es un nuevo método para factorizar y, por lo tanto, reducir la dimensionalidad de los predictores de un modelo.
El K vecino más cercano es el algoritmo de distancias más conocido, juntamente con el K-means. El segundo no lo estudiaremos en este curso, ya que se usa generalmente para clusterizar, pero para clasificar, el K-NN es muy útil y eficaz.
Veamos qué tal funciona el método SVD en conjunción con el K-NN cuando tratamos de clasificar dígitos manuscritos.
Una novedad en este curso, usaremos un método distinto para, a partir de la información en píxeles que tenemos de MNIST, obtendremos una nueva representación de la información, esta vez mediante histogramas de gradientes orientados, en vez de por intensidad de píxeles. No reducimos dimensionalidad, sino que utilizamos una información totalmente nueva para utilizar como predictor.
Probamos el funcionamiento de HOG como origen de los predictores para un K-NN. ¿Funcionará mejor que otros métodos?
Conocido lo que es Deep Learning, vamos a ponerlo a trabajar con los ficheros de MNIST. Para ello utilizaremos las 2 plataformas de aprendizaje que hemos visto al principio del curso: H2O y TensorFlow.
Vamos a ejecutar una demo incluida en la librería de H2O que hemos cargado en nuestro RStudio. El ejemplo es de un algoritmo k-means que clusteriza datos de enfermos de próstata. No se pretende ver como funciona el algoritmo, sino como interactuamos con el H2O instalado en nuestro sistema.
Usaremos H2O para crear un modelo de Deep Learning para clasificar dígitos de MNIST.
Varios conceptos utilizaremos en el siguiente modelo. Vamos a ver cómo funciona el Aprendizaje No Supervisado y utilizaremos Deep Learning para estructurar una Deep Neural Network en un modo de encoder cuello de botella (bottleneck)
Aprovechamos la capacidad de H2O para montar una red de aprendizaje no supervisado profundo con una estrategia bottleneck. Al usar no supervisado, más que un estupendo algoritmo de clasificación, veremos como todos los predictores se condensan en 2 variables (neuronas) que podemos estudiar para tratar de determinar ciertas características de los datos.
Softmax Regression es un método que viene del cálculo y que se utiliza para transformar la salida de una red nueronal (o una profunda) de valores en probabilidades. Veremos en esta clase éste y otros conceptos.
Utilizamos TensorFlow para probar este método del cálculo. A diferencia de H2O, TensorFlow es un poco más opaco a la hora de ver cómo interacciona a través de RStudio con el entorno TensorFlow en local.
Una revisión de todos los modelos y métodos que hemos utilizado, y una valoración comparativa de los distintos métodos. ¿Cuál es el mejor?
El set de datos de MNIST es ampliamente utilizado para practicar y para estudiar Machine Learning. Veremos el trabajo de Yann Lecun y su equipo con MNIST y conoceremos Kaggle, la plataforma de Data Science y Machine Learning con gran cantidad de datasets, concursos y artículos para aprender y practicar.
Presentación de la sección y de la App MNIST
Mostramos los archivos proporcionados para la sección, así como la instalación de las librerías necesarias.
En este enlace encontrás todos los archivos necesarios para el desarrollo de la aplicación:
https://www.dropbox.com/sh/nyve76amvncmr52/AADyV4lxJRBJ8BWmqUyrzzDna?dl=0
En esta primera parte, montamos la estructura de la Aplicación en Shiny, usando también ShinyDashboards, una librería que nos permite montar dashboards de una manera rápida y sencilla.
También realizamos el cuadrado de dibujo donde el usuario podrá escribir el número.
En este apartado, sustituiremos el dibujo a mano alzada por una representación de la matriz de predictores que terminaremos utilizando en los diferentes modelos.
En esta clase guardaremos los 4 modelos calculados durante el curso y los cargaremos en la aplicación.
También transformaremos la matriz en un vector de predictores como los objetos de MNIST.
Ya tenemos los modelos cargados y los datos están en la forma que necesitan los modelos para hacer la predicción.
Con todo esto, preparamos los lugares en la Interfaz de Usuario donde colocar las predicciones y programamos en el servidor éste cálculo.
Utilizando la eficiencia calculada para cada uno de los métodos, vamos a crear un algoritmo que genere una predicción general basada en la poderación de los diferentes modelos. Básicamente sumaremos las eficiencias de las distintas posibles predicciones de cada modelo, y seleccionaremos aquella que tenga mayor valor. También calcularemos la fiabilidad que le proporcionamos a este resultado.
Por último, arreglamos un par de aspectos menores, y generamos el botón de limpiar que nos permitirá reiniciar el proceso para predecir nuevos números.
Hacemos un repaso por todas las lecciones que hemos ido completando durante el curso.
La Visión por Computador o Computer Vision (en inglés) es uno de los primeros objetivos que tuvo la programación desde sus inicios y, sobre todo, desde que se planteó la utilización del procesado automático en las cadenas de montaje.
Desde discriminar la madurez de las frutas por su color, hasta reconocer patrones biométricos, pasando por los pulsómetros ópticos, o el reconocimiento de matrículas. Las utilidades de la Visión por Computador están sólo limitadas por la imaginación humana.
En los últimos años, con el aumento del conocimiento en la denominada Ciencia de los Datos, se han desarrollados nuevos (y no tan nuevos) métodos de Aprendizaje para que sean las máquinas las que puedan tomar decisiones en base al procesado de la imagen que sus ojos tecnológicos les proporciona.
El Machine Learning y, el siguiente paso, el Deep Learning ha supuesto una ventaja mayor si cabe en la autonomía de las máquinas.
Trabajaremos con un famoso set de datos denominado MNIST, y que contiene 60.000 ejemplos de números manuscritos con su correspondiente etiqueta del número que representan. Cada número esta formado por una matriz de píxeles de 28x28 con valores entre 0 y 255 para la intensidad del trazo.
En el curso vamos a analizar una buena cantidad de métodos y algoritmos de Machine Learning, como Naïve Bayes, Random Forest, Support Vector Machine, K Nearest Neighbours o Redes Neuronales y sistemas de pre-procesado de la información, como PCA, SVD o HOG.
También trabajaremos algunos sistemas de Deep Learning, como H2O o Tensor Flow (de Google) para el tratamiento de esta información de imágenes.
Espero que os guste el curso y que disfrutéis aprendiendo los entresijos de la Visión por Computador y el Aprendizaje Profundo y Automático.