Apuntes de Machine Learning

 

Introducción

En este y otros post, espero escribir algunas notas sobre Machine Learning.

A pesar que se utiliza hace muchos años, ultimamente he notado un aumento del abanico de tareas en la cual se aplica, tal vez, por el aumento en la cantidad de información que se recolecta a nivel mundial, el bajo costo de procesadores, sensores, sitios web de alto tráfico y la constante necesidad de ofrecer mejores servicios al usuario final.

Machine Learning se podría clasificar dentro del ámbito de la Inteligencia Artificial (Artificial Intelligence o AI) la cual a su vez es una rama dentro de las ciencias de la computación.

Gran parte del material presentado aquí ha sido extraído tanto de Internet (Machine Learning de Coursera.org, wikipedia, etc), libros y notas personales.

Qué es Machine Learning? Una definición, dada por Tom Mitchell dice algo así: “Es un programa de computador que aprende de la experiencia E, respecto a alguna tarea T y con medida de rendimiento o performance P, si el desempeño sobre la tarea T, medido por P, mejora con la experiencia E.” Otra definición más antigua, del año 1959, dada por Arturh Samuel dice así: “Es el campo de estudio que da a los computadores la habilidad para aprender sin haber sido explícitamente programada

Basado en la primera definición, utilizando el juego de ajedrez, se podría definir identificar:

  • E: Experiencia de jugar varias veces ajedrez.
  • T: La tarea de jugar ajedrez.
  • P: La probabilidad de ganar el siguiente juego.

No esta clara la traducción de Machine Learning al español, ya que a veces se utiliza “Aprendizaje de máquina” u otras veces “Aprendizaje automático”, por lo que seguiré utilizando el termino Machine Learning o ML en el siguiente texto.

En ML, existen dos tipos de aprendizaje:

  • Supervisado.
  • No supervisado.

Aprendizaje Supervisado (Supervised learning)

En aprendizaje supervisado, se cuenta con un conjunto de datos –dataset- para lo cual, ya se sabe cual es el resultado correcto o esperado, por ejemplo, podría ser información histórica con variables atmosféricas de un año para una ciudad y si ha llovido o no en cada día, por lo que los datos de entrada podría ser: presión atmosférica, temperatura, humedad relativa, velocidad y dirección del viento, y la variable de salida sería: “Con precipitación” o “Sin precipitación”.

El aprendizaje supervisado, se categoriza a su vez en:

  • Regresión (Regression)
  • Clasificación (Classification)

En el aprendizaje supervisado de tipo “regresión”, se intenta predecir resultados dentro de una salida continua, es decir, un valor numérico. En esta categoría, podemos encontrar problemas del tipo “Predecir el precio de un bien raíz precio, basado en sus atributos (real state price estimation)”, en ese caso, el precio será un número por lo tanto es del tipo regresión.

En el aprendizaje supervisado del tipo “Clasificación”, a diferencia del tipo regresión, se intenta predecir resultados discretos o dicho de otra manera, que dado un conjunto de datos de entrada, se intenta predecir una categoría o etiqueta, por ejemplo: {“Si”, “No”} o {“Comprar”, “Vender”} o {“Vertebrado”, “Invertebrado”}

Aprendizaje no supervisado (unsupervised learning)

En el aprendizaje no supervisado, se trabaja con problemas en los cuales no se sabe, o se sabe muy poco, respecto a los resultados que se desean predecir, se pueden encontrar estructuras a partir de los datos, sobre los cuales, no se conoce el efecto de las variables.

Se puede encontrar estructuras gracias al agrupamiento (clustering) de datos basado en las relaciones entre las variables de los datos de entrada, pero no sólo agrupamiento es la única forma de aprendizaje no supervisado. La memoria asociativa es un ejemplo de aprendizaje no supervisado.

Ejemplos de aprendizaje no supervisado:

Clustering: Dada una colección de datos de clientes, encontrar una forma de agruparlos, dado distintas variables, como ingreso, genero, compras, etc.

Asociación: Un doctor, con muchos años de experiencia, puede encontrar una asociación entre un conjunto de características, síntomas, registro históricos y una enfermedad.

Ahora, comencemos a ver un poco más en cada uno de los punto introducidos anteriormente.

Regresión lineal con una variable (Linear regression with one variable)

Como ya se mencionó anteriormente, en los problemas de regresión, intentamos mapear variables de entrada a una variable de salida continua. Dado que regresión es una categoría dentro del aprendizaje supervisado, ya se tiene una idea del valor esperado.

Para poder predecir, ya sea un valor discreto o continuo, se utiliza una función, llamada en ML “Hipótesis”.

La función hipótesis, tiene la siguiente forma básica:

hypothesis

Suponiendo que se tiene el siguiente conjunto de datos:

x (entrada) y (salida)
0 4
1 7
2 7
3 8

La idea es poder asignar valores a theta cero y theta uno, con los cuales, se obtendrá un valor de y, para cada x.

Basado en la tabla anterior, podemos asignar un valor aleatorio  para theta 0 y theta 1, digamos 2 y 2 respectivamente, con lo cual queda nuestra función hipótesis de la siguiente manera:

hΘ (x) = 2 + 2x

Por la tanto, ya podemos conocer qué valor deberíamos obtener, si por ejemplo, x = 3, con esto, nos queda:

hΘ (x) = 2 + 2*3 = 8

Para el valor de x=8, la función predice exactamente el valor de salida mostrado en la tabla. Probemos con otro valor de x, ejemplo, x=1.

hΘ (x) = 2 + 2*1 = 4

Con x=1, obtenemos 4 con nuestra función de hipótesis, pero al ver la tabla, deberíamos haber obtenido 7, por lo que hay una diferencia de 7-4 = 3. Por lo tanto, podríamos pensar que los valores elegidos aleatoriamente para theta 0 y theta 1 no son tan buenos… Pero cómo saber si los valores asignados a theta son correctos y por lo tantos, nuestras predicciones serán correctas?

Para responder a esta pregunta y ayudar seleccionar valores óptimos para theta, se utiliza una función de costo.

Función de costo (Cost function)

Una función de costo, nos permite conocer que tan precisa es nuestra función de hipótesis, para ello, toma el promedio de todos los resultados aplicando la función hipótesis y los compara con los valores reales obtenidos (la columna “y” en la tabla anterior).

La función de costo, tiene la siguiente forma:

costfunction1

m: Es la cantidad de elementos, basado en nuestra tabla anterior, m=4.

Aplicando esta función, obtendremos un valor numérico el cual, mientras más  cercano a cero es, nos indica que mejor es nuestra hipótesis. Basicamente, si al aplicar la función de costo, obtenemos 0 (cero) como valor, estaríamos en una situación en la cual nuestra hipótesis, esta prediciendo correctamente cada valor y, para cada entrada x.

Ya hemos visto que nuestra función hipótesis nos permite predecir una variable, y la calidad de estas predicciones será medida utilizando la función de costo en base a una selección de theta 0 y theta 1, pero cómo podemos elegir un valor adecuado para theta 0 y theta 1?

Para esto, existe un algoritmo llamado Gradiente Descendente (Gradient Descent)

Gradiente Descendente

La idea o objetivo del algoritmo del Gradiente Descendente, es minimizar la función de costo, esto es, obtener los valores de theta, para los cuales, se obtiene el menor valor posible. Una forma de conocer para qué valores de theta 0 y theta 1 se obtiene el valor más bajo, es crear un gráfico con dos variables de entrada (theta o y theta 1) y aplicando la función de costo. La imagen siguiente, muestra esta situación, en la cual se ve una superficie en 3 dimensiones en forma de bowl, donde el punto más bajo, corresponde a la mejor selección de theta 0 y theta 1.

gradientdescent1

Para poder encontrar el valor óptimo o más bajo de theta (theta o y theta 1), se utiliza el siguiente algoritmo de gradient descent, el cual en cada iteración se desplaza en la dirección que lo acerca al punto más bajo, para ello utiliza el signo de la tangente en el punto actual (derivando la función). En el gráfico mostrado, se ve que existe un sólo punto donde la función converge, pero con otras funciones, es más difícil o casi imposible encontrar el punto más bajo. Más adelante se verá en mayor detalle este punto.

gradientdescentloop1

Al terminal el loop, theta 0 y theta 1 tienen los mejores valores para ser usados en la función de hipótesis.

Hasta el momento, se ha visto regresión lineal con una sola variable (univariate linear regression), pero ahora veremos análisis de regresión lineal con varias variables de entrada x1, x2,..xn

Regresión lineal con varias variables (multivariate linear regression)

En la mayoría de los casos, nos encontramos en situaciones en las cuales nuestro conjunto de datos tiene más de una variable o atributo de entrada. Por ejemplo, en la predicción de precios de bienes raíces, los atributos o características podrían ser: Superficie de la propiedad en m², número de habitaciones, número de baños, valor promedio de bien raíz en el vecindario.

MulivariateLinearRegression

El texto anterior, fue tomado del curso de Machine Learning en coursera.org.
 

Ahora, re-escribimos la función hipótesis para que acepte varias características o atributos (x₁, x₂,.. xn), quedando de la siguiente forma:

multivariatehypotesis

Ya que tenemos entrada de varios atributos, podemos representar con matrices el conjunto de m entradas y n atributos, tal como se muestra en la siguiente matriz X:
multivariatematrixDe esta manera, en vez de trabajar con elementos individuales, se utiliza vectores para representar tanto las características de una instancia de prueba, así como se utiliza también un vector para representar a teta.

Función de costo para multiples variables (multivariate cost function)

Actualizamos entonces ahora la función de costo para regresión lineal multivariable. y con una flecha encima, representa el vector de la variable de salida, ya no es número único, si que que este vector representa al conjunto entero de salida.

multivariatecostfunction

 

Lo siguiente, será actualizar el algoritmo del descenso del gradiente (gradient descent)

 

 

 


Enlaces para afinar el oído para inglés con acento indio

Debido a que es ampliamente utilizado el inglés con acendo indio, en varios ámbitos, incluyendo en TI, he encontrado una sitio web el cual puede servir para “afinar” el oído para entender inglés en la forma que lo pronuncian los indios.

En el siguiente sitio y link, se pueden escuchar noticias actualizadas de India, pero habladas en Inglés con acento indio y además se pueden leer las transcripciones. Poner atención al seleccionar el audio y el texto para que sean la noticia de la misma hora y del mismo dia. Las noticias son 3 veces al dia en Inglés.

http://www.newsonair.nic.in/full_news.asp?type=bulletins&id=111

El sitio Business Line, también podcasts los cuales se encuentran en inglés con acento indio.
http://www.thehindubusinessline.com/markets/article4265913.ece

En este otro enlaces, puede leer y escuchar un articulo sobre “Indian English”: http://www.livemint.com/Politics/M9lIFcnjnIoK4cf4vONzGL/Indian-English-its-own-variety.html

 

Saludos,

Espero les pueda servir


See in a graph your SQL Server activity

 

SQL Check is a free tool of Idera that allows you see what is happening in your database, monitoring around 20 metrics of performance of SQL Server.

Idera has other paid version with more features.

Graph legend:

 

Regads,

Álvaro

 


This blog has a new domain

Hi everyone,

This mini post is to tell that this blog has a new domain which is shorter than previous. The new address for this blog is brange.me

Regards,

Álvaro Brange


Instalar Kit de desarrollo Java 7 (Install JDK 7 on ubuntu 12.04)

Las últimas versiones de Ubuntu, como la 10.04, no incluye los respositorios para instalar Java JDK 7 debido a problemas con licencias de software. (Ahora viene con OpenJDK)

Los pasos para instalar esta versión en Ubuntu, lo puedes encontrar en el blog  Shine PHP (en inglés)

Keywords: Install JDK 7 in ubuntu

Saludos,

Álvaro Brange


A “RESTful API” in just 3 minutes with Python and Bottle

Hi. This post show a simple and fast way of implement a API server using web services in python

Ingredientes:

Python, Bottle and Route (if you wish test it using a curl style command from python)

Installation (From Terminal)

sudo pip install bottle
sudo pip install requests

Once installed, run python and write (or paste):

from bottle import route, run
@route('/hello')
def hello():
 return "Hello World!"
run(host='localhost', port=8080, debug=True)

After that server is running, open a new terminal console with python and run the following commands to test you server. Note that we a using here a CURL linux’s like command for Python. (Also you could open the  url directly in you browser):

import requests
for i in xrange(1000):
requests.get('http://localhost:8080/hello/world', auth=('user', 'pass'))

And there you are!
Bye


The sigmoid or activation function and their uses

From Wikipedia:

“Many natural processes, including those of complex system learning curves, exhibit a progression from small beginnings that accelerates and approaches a climax over time. When a detailed description is lacking, a sigmoid function is often used. A sigmoid curve is produced by a mathematical function having an “S” shape. Often, sigmoid function refers to the special case of the logistic function shown at right and defined by the formula”

When you are faced to a mathematical problem, where is necessary to find a output value, (given a continue input ) that behave like near to Boolean, for example, in simulated neural networks or in very range of problem, could be necessary to use this function and adapt it to our needs.

As was previously stated, the graph of sigmoid function has “S” shape, but could be necessary to change the shape of it “s” or their position.

In the previous formula, we have added a and b.

If you change a, for instance, a=10, you will get a short “S”, if you let a=20, “S” will be more short.

If you change b, it will let you move your S in the graph, allowing let it not centred on zero. For example, if you input range (domain of function) is between 0.0 and 1.0, you could need the following function:

Where y=0.5, when x=0.5.

You can see it graph using Google calculator here

I found more information about this function on Dr. Mark Humphrys webpage

Regards,

Álvaro


Follow

Get every new post delivered to your Inbox.

Join 228 other followers