Machine Learning (Aprendizaje de maquina)
- Definición:
Desde una perspectiva general: Disciplina enfocada en como construir sistemas que automáticamente mejoren de acuerdo a su experiencia sin ser programados para ello y descubrir cuales son las leyes fundamentales de la estadística-matemática-computación-información que gobiernan todos los sistemas de aprendizaje, incluyendo computadoras, seres humanos y organizaciones.
Desde una perspectiva mas especifica: Consiste en entrenar un modelo matemático o estadístico usando información histórica, con el fin de que pueda inferir o predecir el valor de una variable, la cuál puede ser discreta o continua, dependiendo el tipo de problema, clasificación o regresión respectivamente, en miras a comprender o explicar un fenómeno dado, realizar predicciones a futuro o hacer inferencias, en general a identificar patrones.
- Conceptos básicos:
En esta sección se definen los conceptos fundamentales, que hacen parte de la nomenclatura(términos estándar) usada cuando se esta describiendo un set de datos o abordando un problema en particular en términos de machine learning:
Data: Cuando se piensa en datos, comúnmente lo primero que se nos viene a la cabeza es filas y columnas, quizás tablas en una base de datos o una hoja de calculo en excel. dicha estructura es una forma tradicional de representar un conjunto de datos y se conserva para representar las entradas de un modelo o algoritmo de machine learning, a continuación se describen los componentes de un dataset.
- Instancia/Instance : Una instancia corresponde a un registro dado, o fila de un dataset o matriz de datos representada de la forma tradicional en filas y columnas
- Característica/Feature: Una columna de la matriz de datos es llamada feature,representa un componente o variable del modelo. Existen de salida(dependientes) y de entrada(independientes), las primeras serán las que conformarán el set de características(número de alcobas, baños, pisos etc. de cada casa) , la ultimas aquellas que se espera el modelo pueda predecir (precio de la casa).
- Tipo de dato/ data type: La features, o columnas de un set de datos o matriz, tienen un tipo de dato definido, este puede ser real, entero o categórico(lista de valores), e incluso almacenar cadenas, fechas o tipos de datos mas complejos, sin embargo por lo general los algoritmos/modelos tradicionales reducen el set de variables a tipo real o categórico.
- Conjunto de datos/Dataset: Colección de instancias(rows) que representan los datos del modelo
- Conjunto de datos de entrenamiento/Training Dataset: por lo general es un subconjunto de instancias del dataset que se usa para entrenar el modelo.
- Conjunto de datos de prueba/Testing Dataset: Por lo general es un subconjunto de instancias del modelo que se usa para validar el desempeño o la tasa de reconocimiento de un modelo, dependiendo del tipo de problema.
Learning: Según el contexto, tipo de variables etc., existen diferentes modos a través de los cuales un modelo puede aprender de los datos, en esta sección se describen algunos conceptos importantes con respeto al aprendizaje de los algoritmos.
- Aprendizaje Supervisado/supervised learning: las instancias de nuestro conjunto de datos están debidamente categorizadas o clasificadas,es decir, cada una tiene su respectivo label asociado o clase.
- ejemplo 1: usando las palabras presentes en el cuerpo en un correo electrónico como set de características, podemos entrenar un modelo de clasificación con un n (número de mensajes) definido, para que este pueda inferir o «predecir» si dicho mensaje es spam o no spam (en este caso el valor de Y, variable dependiente es discreto, dado que es una categoría, 1-spam , 0- no spam).
- ejemplo 2: Es posible predecir el costo de una casa dentro de un vecindario, usando un modelo de regresión previamente entrenado con las características físicas (número de baños, habitaciones, ubicación) y el valor o costo asociado a un conjunto de casas con ubicación espacial en común (donde el valor Y, variable dependiente es continuo, dado es un precio).
- Aprendizaje no supervisado/ unsupervised learning: las instancias dentro del conjunto de datos no están categorizadas o clasificadas, es decir no tienen un label asociado. Este tipo de modelos por lo general son usados para identificar o deducir estructuras comunes entre si que permitan agruparlas (donde el identificador del grupo termina siendo la clase a la que la instancia pertenece). Esto puede ser extrayendo reglas generales a través de algún método matemático que permita identificar patrones similares(por ejemplo la distancia espacial), o simplemente agrupándolos teniendo en cuenta alguna medida de similitud.
- Aprendizaje semi-Supervisado: existen algunas instancias del conjunto de datos que están categorizadas, los cuales son usadas para inferir/predecir a que categoría pertenece cada una de las restantes o su respectivo valor en caso de que sea un problema de regresión. Esto es posible solo si la cantidad de instancias clasificadas es mayor al de no clasificadas, en caso tal de que dicha condición no se cumpla existen otras formas de abordar este tipo de problemas, como por ejemplo iniciar haciendo un análisis de clustering ( usando modelos de aprendizaje no supervisado).
Machine Learning Approachs:
Cuando nos enfrentamos a resolver o abordar un problema especifico usando Machine Learning existen dos enfoques diferentes que podemos usar dependiendo del contexto y los requerimientos. La diferencia radica en que mientras con los modelos tradicionales de machine learning como: SVM (Maquina de vector de soporte), QDL (Discriminante lineal cuadrático), Knn (vecino más cercano) etc. para proceder con el entrenamiento del modelo debemos desde el inicio tener definido nuestro conjunto de características (features extraction), usando Deep learning, no es necesario puesto que el algoritmo realiza dicha tarea automáticamente (learning higher order abstraction staring with the raw data). Lo anterior representa una ventaja significativa puesto que en algunos escenarios definir dichas características puede ser costoso, ya que en caso de que decidamos usar el enfoque tradicional este conjunto de variables seleccionadas debe ser cíclicamente refinado hasta lograr un buen resultado (classification rate/regression rate). Existen diferentes técnicas basadas en ejecuciones metódicas sucesivas para realizar selección de características (feature selection), entre las cuales se encuentra Greedy forward selection, algoritmos genéticos etc.

we need to hand-craft the features

feature engineering is done automatically by the algorithm
Otra de las diferencias representativa entre los dos enfoques esta en que mientras en el enfoque tradicional se habla de modelos refiriéndonos a los diferentes algoritmos que existen, en deep learning nos referimos a redes neuronales con arquitecturas de red diferentes(número de capas, nodes, salidas, entradas etc.). En el link a continuación podremos obtener mas información sobre algunas arquitecturas predefinidas que son muy usadas. The Neural Network Zoo .
Algunos Modelos:

Neural Networks Models

Traditional Models
¿Qué es deep learning?
En la imagen a continuación podemos observar el corte transversal del hippocampus tomada del cerebro de un ratón, la cual nos permite evidenciar que dicho sistema está compuesto morfológicamente de diferentes capas, las cuales comparten información en forma de impulsos nerviosos a través de las neuronas. Basado en este concepto biológico, que ocurre además en el cerebro de los humanos, las redes neuronales (deep neural networks) son algoritmos bio-inspirados que de acuerdo a la complejidad de su arquitectura pueden tener n cantidad de capas (unidades de procesamiento).

The hippocampus, shown here in a mouse, is a brain region involved in storing memories. The mouse was genetically modified with a gene that creates a green fluorescent protein that causes the neurons to glow green.
¿Porque «deep learning» en lugar de «neural network»?
Esto es debido a la estructura de las redes, hace unos 40 años atrás (aproximadamente) se hablaba de arquitecturas de red de solo 2 capas, esto dado que en ese momento no se contaba con los recursos de hardware, ni la capacidad de computo que se tiene hoy en día (cloud computing, GPU), en donde es muy común encontrar modelos incluso con mas de 100.
Algunas Aplicaciones:
- Real world applications
- Image: autonomous driving, disease detection
- Text: Machine translation, document cromprehension
- Speech: voice recognition
Qué es CNTK?
A medida que la arquitectura de la red neuronal empieza a crecer o a volverse mas compleja, es decir empieza a mutar, codificar por nuestra cuenta su arquitectura puede ser muy tedioso, por lo que existen herramientas como Microsoft Coknitive Toolkit ( CNTK ) que nos facilita dicha tarea. CNTK es un framework para deep learning de código abierto, escalable,flexible, compatible con la CPU y la GPU, que nos permite codificar e implementar de una forma fácil e intuitiva nuestro modelos usando python o c++ e incluso en otros lenguajes ver: https://docs.microsoft.com/en-us/cognitive-toolkit/CNTK-Evaluation-Overview. se presenta como otra alternativa a soluciones similares como Tensorflow, Torch, Keras, Caffe etc.
Esto es todo por el momento, en el próximo tutorial entraré mas a fondo en el mundo de deep learning y les enseñare como construir una red neuronal simple. posteriormente empezaremos a interactuar con CNTK.