Machine Learning

«We shall not go any further into the nature of this oracle apart from saying that it cannot be a machine,» Turing explained (or did not explain). «With the help of the oracle we could form a new kind of machine (call them O-machines).» Turing showed that undecidable statements, resistant to the assistance of an external oracle, could still be constructed, and the Entscheidungsproblem would remain unsolved. The Universal Turing Machine of 1939 gets all the attention, but Turing’s O-machines of 1939 may be closer to the way intelligence (real and artificial) works: logical sequences are followed for a certain number of steps, with intuition bridging the intervening gaps.

Turing’s Cathedral. George Dyson.

Siguiendo con la serie de cursos publicados por Stephen Grider  en la plataforma de Udemy, he iniciado uno de los cursos denominado ‘Machine Learning with Javascript: Master Machine Learning from scratch using Javascript and TensorflowJS with hands-on projects«.

Indicar que TensorflowJS está licenciado bajo Apache License 2.0. Compatible con la versión 3 de GPL.

Stephen nos habla de conversaciones que ha mantenido con personas que llevan tiempo trabajando en el mundo del aprendizaje automático. Por lo que dicen, aprender sobre ML sería algo que estaría al alcance de personas sin la necesidad de que tengan unos conocimientos profundos sobre algoritmos.

La clave estaría en el conocimiento de una serie de operaciones fundamentales:

  • Features vs Labels

  • Test vs Training sets of data

  • Feature Normalization

  • Common data structures (arrays of arrays)

  • Feature Selection

Las personas que aprenden ‘Machine Learning’ más rápidamente y las personas que tienen éxito en la industria y en proyectos de la vida real, aplicando estas operaciones fundamentales, no son las personas que entienden el funcionamiento interno absoluto de cada uno de estos algoritmos.

Las personas que realmente aprenden rápidamente,  todo este proceso, son las personas que pueden experimentar con estos algoritmos muy rápidamente. Y lo consiguen porque tienen una base excepcionalmente sólida en el conocimiento de estas operaciones fundamentales.

Stephen Grider

Tratemos de identificar algunos de estos conceptos y operaciones fundamentales

Imagina que eres un analista en una ciudad pequeña con un gran problema de inundaciones.

El alcalde de la ciudad te pregunta…

Si llueven 240mm este año, ¿cuánto será el coste de las inundaciones?

Proceso de resolución del problema

  • Identifica los datos que son relevantes para el problema.

  • Ensambla el conjunto de datos relativos al problema que tratás de resolver.

  • Decide de que tipo son los datos resultantes que estas prediciendo.

  • Basándose en el tipo de datos resultantes, escoge el algoritmo que determinará la correlación entre tus ‘features’ y ‘labels’

  • Utiliza el modelo generado por el algoritmo para realizar la predicción.

Identifica los datos que son relevantes para el problema

Las ‘Features’ son categorias de datos puntuales que afectan a el valor de la ‘label’.

Ensambla el conjunto de datos relativos al problema que tratas de resolver.

Conjunto de datos que casi siempre se clarifican o formatean.

.

Decide de que tipo son los datos resultantes que estás prediciendo

Existen más, pero nos centramos en dos de ellos.

El modelo predictivo de regresión es usada con valores continuos, el modelo predictivo de clasificación es usada con valores discretos.

.

Basándose en el tipo de datos resultantes, escoge un algoritmo que determinará la correlación entre tus ‘features’ y ‘labels’.

Utiliza el modelo generado por el algoritmo para realizar la predicción.

Existen muchos algoritmos diferentes, cada uno con sus ventajas e inconvenientes

Los modelos relacionan el valor de las ‘features‘ con el valor de las ‘labels‘.

.

Nuestra predicción fue mal!

  • Ajusta los parámetros del analisis
  • Añade más "features" para explicar el análisis
  • Cambia los puntos de predicción
  • Acepta que quizás no existe unha buena correlación

Pero, hacer esto no tiene sentido si no tenemos una buena manera de comparar la precisión con diferentes configuraciones.

Buscando el K ideal

  • Registra una gran cantidad de datos.
  • Divide los datos en conjuntos: ‘training dataset’ y  ‘test dataset’. (desordenados intencionadamente y aleatoriamente).

Training = {[22,33,45,66], [23,76,45,54],[47,98,23,12],[54,3,90,22]}

Test = {[12,33,44,44], [55,65,87,99],[47,98,23,12],[54,3,90,22]}

  • Por cada elemento de ‘test dataset’, ejecuta el modelo generado por el algoritmo usando los datos de ‘training dataset’.

¿Es el resultado del algoritmo igual al elemento de ‘test’?

En base a esta pequeña introducción, podemos identificar algunos de estos puntos fundamentales

  • Features vs Labels
  • Test vs Training sets of data
  • Feature Normalization
  • Common data structures (arrays of arrays)
  • Feature Selection

La normalización de las ‘Features’ es algo que no hemos visto en esta pequeña introducción, pero es algo que no es de interés para lo que quiero reflejar en este post.

Por otra banda, si hemos visto conceptos tales como:

  • Registro de una gran cantidad de datos
  • Labels
  • Features
  • División de los datos en conjuntos: ‘training dataset’ y  ‘test dataset’ (desordenados aleatoriamente).

El registro de gran cantidad de datos que vamos a utilizar, se los vamos a proporcionar al modelo de algoritmo que realiza las predicciones desde el disco duro de nuestro ordenador. Estos datos estarán almacenados en un archivo CVS.

Existen varias librerías que nos permiten realizar esta carga de datos pero, os voy a presentar un código que nos va a permitir realizar lo mismo y al mismo tiempo permite su personalización según nuestras necesidades.

csvFile

En el proceso de resolver el problema planteado, entre otras cosas:

Debemos identificar «labels» y «features» .

Crear «training dataset»‘ y  «test dataset» , desordenados aleatoriamente para la efectividad de las predicciones.

Toda esta información la debemos de proporcionar en el momento de cargar el archivo CSV en un objeto que actuará a modo de parámetro de opciones.

Tal y como podemos ver en la imagen:

Las «features» serían indicadas en la opción «dataColums» como  «height» y «value» .

La «label» sería indicada en la opción «labelColumns» como «passed» .

loadCSV