MongoDB y R. Aproximaciónal Machine Learning (I). Algoritmo K-nearest neighbors

INTRODUCCIÓN

Este es el primer artículo de una serie dedicada a lo que en el mundo del análisis de datos se denomina “Machine learning”. Básicamente, y resumiendo mucho, este concepto engloba un conjunto de algoritmos de autoaprendizaje y reconocimiento de patrones.

En este caso, partimos de MongoDB como base de datos documental que se usa, por ejemplo, para persistir los datos de una aplicación web que requiere de agilidad para el cambio de su estructura de la información que persiste, que requiere igualmente velocidad alta en los procesos de lectura y, finalmente, necesita de capacidades de escalabilidad altas y de bajo coste.

Podemos imaginar, en nuestro caso, que la aplicación se encarga de la gestión de una librería. En dicha librería, existen analistas de datos que se encargan de obtener conclusiones sobre los datos almacenados.

En este primer caso, estos analistas intentan averiguar, de cara a futuras acciones de marketing, si sus clientes son verdaderos lectores o no lo son.

La idea es analizar los dos atributos principales en este ejemplo, por cada cliente: Los libros que han comprado y los que han regalado. Con esa información, han de clasificarlos en una de las dos siguientes clases o categorías: “Es lector” o “No es lector”.

MongoDB es una base de datos y por lo tanto no ofrece capacidades algorítmicas orientadas a obtener patrones, predicciones, clasificaciones, etc.

Por ello, estos analistas hacen uso del lenguaje R que les proporciona esa funcionalidad de analítica de datos.

En este caso desde R, los analistas de datos atacan directamente los datos almacenados en MongoDB, base de datos de esta aplicación transaccional de ejemplo.

Una vez que se ha categorizado al cliente, sus datos son insertados como un nuevo documento en la base de datos, categorizado con el tipo de cliente que es: Lector o No Lector. De esta manera, el algoritmo se va afinando debido a que va incluyendo en sus datos categorizados nuevos documentos que enriquecen los cálculos posteriores.

ELEMENTOS SOFTWARE NECESARIOS

De cara a realizar estudios analíticos contra los datos almacenados en MongoDB, para este ejemplo se han usado.

EJEMPLO PRÁCTICO

  • Lo primero que se ha hecho, es crear seis documentos en la base de datos “libreria” en MongoDB. Los datos se encuentran en la colección “lectores”

documentos_inicio

Como se puede ver, la estructura de los documentos incluye, entre otros datos, los libros comprados y los regalados por el cliente.

{

«_id» : ObjectId(«55e844926a56c69d8f59a041»),

«comprados» : 20,

«regalados» : 1,

«nombre» : «Fred»,

«tipo» : «lector»

}

  • Teniendo los datos que se van a usar para clasificar el nuevo cliente que aún no está clasificado, con el fin de saber si es lector o no lo es, desde R se ha de poder conectar a MongoDB con el fin de obtener los datos adecuados y aplicar, seguidamente, el algoritmo. Para ello se instala el paquete “RMongo” mediante las opciones que proporciona R Studio.
  • Una vez que se ha instalado el paquete RMongo, se codifica el ejemplo con R Studio. A continuación se muestra el código completo y en los puntos siguientes se explica cada instrucción.

codigo

 

  • Código R. Conexión a la base de datos MongoDB. Se Carga la librería RMongo y con la instrucción “mongoDbConnect” se conecta y devuelve referencia conectada a la base de datos “librería.

 

library(RMongo)

mg1 <- mongoDbConnect(‘libreria’)

  • Código R. Se hace una query con el fin de obtener los seis documentos que servirán para que el algoritmo categorice al cliente a analizar.

output <- dbGetQuery(mg1, «lectores», »)

head(output)

La visualización de los datos obtenidos es, en formato “data.frame” de R :

 

regalados     tipo comprados                     X_id   nombre

1         1   lector       20 55e844926a56c69d8f59a041     Fred

2         3   lector       18 55e844b26a56c69d8f59a042     Alan

3         1   lector       10 55e844c26a56c69d8f59a043      June

4         3 noLector         1 55e846bb6a56c69d8f59a044   Albert

5       10 noLector       10 55e846ca6a56c69d8f59a045     Ster

6         8 noLector       10 55e846d96a56c69d8f59a046 Sebastian

 

Como se observa, ya tenemos los documentos en el entorno R.

 

  • Código R. Se formatea el “data.frame” anterior para obtener una variable de tipo “matrix” , que es la que acepta la función que implementa el algoritmo de clasificación.

 

train<-data.matrix(subset(output,select= c(comprados,regalados)))

head(train)

 

La visuación de los datos en formato “matrix” es:

 

comprados regalados

1       20         1

2       18         3

3       10         1

4         1         3

5       10       10

6       10         8

  • Código R. Se establecen las categorías para los registros, que va a necesitar la función algorítmica.

 

cl=factor(c(rep(«lector»,3),rep(«noLector»,3)))

 

  • CódigoR. Se define la información del cliente a categorizar. En este caso, el cliente ha comprado 20 libros y ha regalado 2.

 

test=c(20, 2)

 

  • Código R. Teniendo el subconjunto de datos con los que el algoritmo va a trabajar, así como los datos correspondientes al cliente pendiente de clasificar, el algoritmo puede ejecutarse. En este caso , K=3, lo que hace que el algoritmo tenga en cuenta los tres clientes más cercanos /parecidos al nuevo cliente.

 

library(class)

 

# Se ejecuta el algoritmo con k=3, significa que va a validar tres resultados más próximos para decidir si

# es lector o no es lector

resultado<-knn(train, test, cl, k = 3)

# Se muestra el resultado obtenido

 

head (resultado)

 

El resultado del algoritmo determina que el cliente a clasificar es, efectivamente, un “lector”:

 

[1] lector

 

  • Código R. Con el cliente ya categorizado, únicamente falta añadir el mismo al conjunto de los datos anteriores con el fin de enriquecer los cálculos futuros (este es el concepto de machine learning)

 

if (resultado==»lector»)

{

dbInsertDocument(mg1,»lectores»,'{«comprados»:20,»regalados»:2

,»nombre»:»Desconocido»,»tipo»:»lector»}’)

}else{

dbInsertDocument(mg1,»lectores»,'{«comprados»:20,»regalados»:2

,»nombre»:»Desconocido»,»tipo»:»noLector»}’)

}

 

Lo que se crea es un nuevo documento en la base de datos de MongoDB:

documentos_fin

  • Código R. Finalmente, se cierra la conexión a la base de datos.

 

dbDisconnect(mg1)

RESUMEN

A modo de resumen, lo que se ha plasmado en este artículo es la aplicación de un algoritmo de clasificación, denominado K-Nearest Neighbour, que se aplica para la clasificación de nuevas entidades, basando su cálculo en datos almanenados en MongoDB. El cálculo analítico se ha realizado con el lenguaje R y con R Studio. La entidad, una vez categorizada, se incluye en los datos anteriores con el fin de enriquecer el proceso de clasificación para clasificaciones futuras.

Post By Fernando Llorente Haya (2 Posts)

Connect

, , , , ,

No comments yet.

Deja un comentario

Leave your opinion here. Please be nice. Your Email address will be kept private.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies
Translate »