Vous êtes sur la page 1sur 9

24/1/2017 Anlisis de Cluster, un ejemplo sencillo.

| dlegorreta

dlegorreta

Datos, datos, datos!!!

Anlisis de Cluster, un ejemplo sencillo.


18 MARZO, 20158 FEBRERO, 2016 DLEGORRETA
El anlisis de agrupamiento (cluster), es sencillo de explicar y de implementar en R project. Lo delicado es procesar la
informacin y la definicin de la mtrica que consideramos apropiada para nuestros datos o experimento.

Hago un ejemplo sencillo antes de explicar qu se hace con esta tcnica.

#Ejemplo de Cluster
data(iris)
#Generamos 5 grupos en nuestros datos
modelo5<-kmeans(iris[1:2],5)
plot(iris[1:2],col=modelo5$cluster,main="Ejemplo de 5 cluster",xlab="longi
#Generamos 3 grupos en nuestros datos
modelo3<-kmeans(iris[1:4],3)
plot(iris[1:4],col=modelo3$cluster,main="Ejemplo de 3 cluster")

(https://dlegorreta.files.wordpress.com/2015/03/ejemplo_5_cluster.jpeg)

(https://dlegorreta.files.wordpress.com/2015/03/ejemplo_3_cluster.jpeg)
https://dlegorreta.wordpress.com/2015/03/18/analisis-de-cluster-un-ejemplo-sencillo/ 1/9
24/1/2017 Anlisis de Cluster, un ejemplo sencillo. | dlegorreta

Los dos grficos muestran de colores distintos un conjunto de puntos, por lo que se ve en el cdigo, usando una
funcin kmeans para definir modelo5,modelo3. Luego indico al grfico que tomara los colores partiendo
de un valor $cluster . Esto podramos deducirlo viendo solo el cdigo, la pregunta es cmo se define qu puntos
pintar de cierto color. Si uno hace el scatter plot de los mismos datos se observa una regla.

#Scatter Plot
data(iris)
plot(iris[1:4],col=c(2,3),main="Scatter Plot de parejas de vectores de dat

(https://dlegorreta.files.wordpress.com/2015/03/ejemplo_scatter_plot_datos-iris.jpeg)

Si uno compara los 3 grficos, la regla para determinar el color de los puntos tienen que ver con un modo de
agruparlos, de tener un modo de verlos cuan cercanos o similares son. Eso se nota principalmente entre los dos
ltimos grficos.

La idea de similar, puede ser pensada como un modo de comparar cosas, si se piensa en tres personas donde dos
estudiaron en la misma universidad, tienen casi la misma edad y alturas y tienen diferencia de peso de solo un par de
kilos, son casi iguales con respecto al tercer individuo, que no estudi en la misma universidad, tiene ms aos, tiene
sobrepeso y mide ms que los otros dos. Entonces podemos pensar que los dos primeros son similares o al
compararlos son ms cercanos o parecidos.

La nocin de cercana est asociada con la nocin de distancia, podemos definir que dos cafeteras tienen una
distancia pequea si las separa una calle, pensando que su unidad de medida son el nmero de calles entre ellas.
Entonces la nocin a travs de todo esto es la de mtrica (http://es.wikipedia.org/wiki/Espacio_m%C3%A9trico),
cmo medir similitudes.

En geometra, la mtrica es la distancia entre puntos la cual tienen ciertas propiedades; medir del punto 1 al punto 2 es
igual que iniciar midiendo desde el punto 2 hasta el punto 1 (simetra); la distancia entre los puntos es por lo menos
cero (positiva) y medir la distancia entre dos puntos es menor o igual que la suma de las distancia de los puntos a un
punto intermedio (desigualdad del tringualo (http://es.wikipedia.org/wiki/Deisgualdad_Triangular)) y la ltima, si
la distancia entre dos puntos es cero los puntos no pueden ser distintos (identidad de los indiscernibles).

Entonces la idea de la tcnica es medir la distancia de cada pareja de puntos de los datos. Esto no necesariamente
implica que la distancia sea para nmeros o vectores, puede ser definida por las caractersticas de los datos o sobre
cadenas de texto o mensajes, caractersticas de una persona,etc.

Aclarado el cdigo anterior, lo que se hizo con el comando kmeans fue aplicar un algoritmo que permite separar
entre los grupos de datos, tomando como parte inicial el eligir la cantidad de grupos que se desean, despus se calcula
el centroide (http://es.wikipedia.org/wiki/Centroide) con respecto a todos los datos y se hace un proceso de separacin
e iteracciones para determinar los cmulos, la tcnica se llama k-Means Clustering. Para entender en detalles el
algoritmo se puede revisar las notas de Andrew Ng (http://cs229.stanford.edu/notes/cs229-notes7a.pdf) o de Andrew
Moore (http://www.autonlab.org/tutorials/kmeans11.pdf), las notas de ste ltimo son acompaadas de varias grficas
lo cual ayuda a visualizar el algoritmo de un modo sencillo.

https://dlegorreta.wordpress.com/2015/03/18/analisis-de-cluster-un-ejemplo-sencillo/ 2/9
24/1/2017 Anlisis de Cluster, un ejemplo sencillo. | dlegorreta

Un ejemplo puede ser pensando en una matriz de datos, donde cada fila representa un individuo y cada columnas es
una caracterstica la cual puede tomar el valor de -1,0 o 1. Entonces lo que se hace es realizar el producto de la matriz
y su transpuesta para obtener la correlacin entre cada uno de los individuos y lo que se usa como mtrica es la
distancia euclidiana. Con ellos se puede tener una matriz con informacin sobre las distancia entre nuestros
individuos.

#Ejemplos
x.matriz<-matrix(sample(c(-1,0,1),24,replace=TRUE),nrow=4,ncol=6)
#Etiquetamos las columnas y las filas
row.names(ex.matriz)<-c('A','B','C','D'P2','P3','P4','P5','P6')
#Multiplicamos por la transpuesta
ex.mult<-ex.matriz%*%t(ex.matriz#Calculamos la distancia
ex.dis<-dist(ex.mult

Ahora usamos el comando cmdscale para calcular el escalamiento multidimensional


(http://es.wikipedia.org/wiki/Escalamiento_multidimensional), obtendremos como resultado los puntos que son cercanos
o prximos, segn la mtrica.

#Cluster
ex.mds<-cmdscale(ex.dislot(ex.mds,type='next(ex.mds,c('A','B','C','D

(https://dlegorreta.files.wordpress.com/2015/03/ejemplo_escalado_multidimensional.jpeg)

Se concluye del ejemplo anterior que la estrategia es; procesar nuestra informacin, definir o usar una mtrica, construir
la matriz de similaridad y aplicar el anlisis de escalamiento multidimensional o un algoritmo de agrupamiento.

Polarizacin de un Senado

Muestro un ejemplo del texto Machine Learning for Hackers (http://shop.oreilly.com/product/0636920018483.do) [1].
El ejemplo usa los datos del senado de EEUU, se encuentran en la plataforma http://www.voteview.com
(http://www.voteview.com) y en caso de tener una falla en la descargar se puede bajar del repositorio de GitHub
en https://github.com/johnmyleswhite/ML_for_Hackers (https://github.com/johnmyleswhite/ML_for_Hackers).

La idea es la siguiente, revisar el comportamiento de las votaciones del Senado y revisar el comportamiento del periodo
110 al 111 del congreso.

Lo que se har es procesar la informacin, asignar ciertas variables categricas que solo tendrn valores -1,0 y 1 para
cada una de las caractersticas de los senadores analizados. Esto permite definir una mtrica sencilla, como la del ltimo
ejemplo y basta considerar el productos de matrices para formar la matriz de similaridad.

https://dlegorreta.wordpress.com/2015/03/18/analisis-de-cluster-un-ejemplo-sencillo/ 3/9
24/1/2017 Anlisis de Cluster, un ejemplo sencillo. | dlegorreta

#Anlisis de votos
library(foreign)
library(ggplot2)
#Tomamos la ruta de los archivos
data.dir 6, 0,no.pres[,i])
no.pres[,i] 0 & no.pres[,i] < 4, 1, no.pres[,i])
no.pres[,i] 1, -1, no.pres[,i])
}

return(as.matrix(no.pres[,10:ncol(no.pres)]))
}

#Aplicamos la funcin a cada entrada de rollcall.data


rollcall.simple

Con lo anterior pueden construir las grficas que para apreciar la evolucin del senado, donde la hiptesis inicial es que
el congresos se polariz en el 111 congreso.

Primero se revisa el comportamiento solo de las votaciones del 111 congreso y despus se compara con respecto los
congresos previos, partiendo desde el 101.

(https://dlegorreta.files.wordpress.com/2015/03/mds_votacion_senado111_us.jpeg)

(https://dlegorreta.files.wordpress.com/2015/03/mds_votacion_senado-del-101-al-111_congreso_us.jpeg)En resumen
la ltima grfica muestra que el Senado en distintos periodos se puede dividir en dos grupos, se puede decir que se
polariza entre Republicanos y Demcratas. Los pocos senadores considerados como independientes parece, al
revisar la ltima grfica; que siempre votaran como los Demcratas.

La moraleja es que bajo una mtrica sencilla se pueden extraer ciertas propiedades del comportamiento o dinmica del
los datos. Sera interesante hacer un ejercicio similar para el Senado de otros pases.

Resumiendo, la tcnica o anlisis de agrupamientos (cluster) requiere como primer paso explorar nuestra informacin y
procesarla si es necesario para poder definir una mtrica que tenga coherencia con el tipo de informacin y datos.

Despus se debe de calcular la matriz de distancias y por ltimo aplicar escalamiento multidimensional o algn
algoritmos para detectar aglomeraciones.

https://dlegorreta.wordpress.com/2015/03/18/analisis-de-cluster-un-ejemplo-sencillo/ 4/9
24/1/2017 Anlisis de Cluster, un ejemplo sencillo. | dlegorreta

Como paso intermedio, tienen sentido plantearse una pregunta respecto a los posibles grupos que se busca encontrar
en los datos y como siempre para cerrar el anlisis, hacer usos de grficos que permitan visualizar el resultado.

Ha esta entrada le falta mucho muchos ejemplos, que espero ms adelante compartir otros. Respecto al tema falta
mostrar varios detalles; tipos de mtricas para tipos de datos, algoritmos de aglomeracin para tipos de anlisis y la
creacin de modelos basados en esta tcnica.

Los aspectos tericos se encontrarn en la categora Sobre Machine Learning


(https://dlegorreta.wordpress.com/category/sobre-machine-learning/). Una disculpa para la gente de matemticas por
no haber puesto la definicin formal de espacio mtrico, mtrica y mencionar algunas de sus propiedades, espero
posteriormente hacer algunas entradas con un enfoque formal.

Actualizacin 19-05-2015

En la primera versin de esta entrada falt mencionar muchos detalles sobre la tcnica de K-medias, pero adems no
mencion nada sobre otro algoritmo Hirarchical Clustering o Cluster jerrquico.

Comparto un ejemplo de esta tcnica y en resumen lo que se hace en este algoritmo es construir un rbol que ayude
aglomerar los datos en conjuntos los cuales al terminar el algoritmo muestra las aglomeraciones obtenidas.

El costo computacional es mucho mayor que los mtodos k-medias, pero en general para muestras de datos
relativamente grandes no resulta tan costoso implementarlo y adems se han desarrollado algoritmos para reducir el
costo en tiempo y procesamiento.

Los datos los tomo de la pgina del libro Elements of Stadistical Learning
(http://statweb.stanford.edu/~tibs/ElemStatLearn/) [2], en el cdigo indico como descargarlo directamente.

Respecto al origen de los datos, cabe resaltar que corresponde al anlisis de tumores cancergenos, se analiza su valor
gentico a 64 tumores y por medio de las tcnicas de Cluster se trata de detectar cuantos cnceres corresponde a qu
tipo de tumor.

Algunas precisiones. Se descargaron los nombres de los tumores en un archivo txt, a que los nombres de las columnas
no vienen por default en los datos. La matriz de datos est formada por 64 columnas y 6830 filas.

https://dlegorreta.wordpress.com/2015/03/18/analisis-de-cluster-un-ejemplo-sencillo/ 5/9
24/1/2017 Anlisis de Cluster, un ejemplo sencillo. | dlegorreta

#Ejemplo de Cluster con datos de tumores


#Ubicado en el directorio donde estan los nombres de los genes se procede
#Se carga como un vector
Nombres=read.table("nombres_tumores.txtisualizamos los datos
head(Nombres)
# V1
# CNS
# CNS
# CNS
# RENAL
# BREAST
# CNS

#Cargamos los datos de los genes

datos=scan("http://statweb.stanford.edu/~tibs/ElemStatLearn/datasets/nci.d

#Visualizamos los datos


head(M)
#Tranformamos los datos en una matriz de 64 renglones por 6830 columnas
#Despus invertimos la matrix
M=matrix(datos,nrow=64)
M2=t(M)

#Agremagamos los nombres a las columnas de M2

colnames(M2)=as.vector(t(Nombres))

head(M2)
#As se visualiza la tabla de datos
# CNS CNS CNS RENAL BREAST CNS CNS BREAST NSCLC NSCLC RENAL RENAL RENAL RE
#[1,] 0.300 0.679961 0.940 2.800000e-01 0.485 0.310 -0.830 -0.190 0.460 0.
#[2,] 1.180 1.289961 -0.040 -3.100000e-01 -0.465 -0.030 0.000 -0.870 0.000
#[3,] 0.550 0.169961 -0.170 6.800000e-01 0.395 -0.100 0.130 -0.450 1.150 0
#[4,] 1.140 0.379961 -0.040 -8.100000e-01 0.905 -0.460 -1.630 0.080 -1.400
#[5,] -0.265 0.464961 -0.605 6.250000e-01 0.200 -0.205 0.075 0.005 -0.005
#[6,] -0.070 0.579961 0.000 -1.387779e-17 -0.005 -0.540 -0.360 0.350 -0.70

#Aplicamos k-Means con 3 cluster a


KM3=kmeans(M2,3)

#Generamos una grfica para visualizar los componentes

library(cluster)
clusplot(M2,KM3$clusteres,shape=TRUE,color=TRUE,labels=3)

#Aplicamos Hierarchical Clustering


H1<-hclust(dist(M),"average")
#Dendrograma
plot(H1,col=2,frame.plot=TRUE)

https://dlegorreta.wordpress.com/2015/03/18/analisis-de-cluster-un-ejemplo-sencillo/ 6/9
24/1/2017 Anlisis de Cluster, un ejemplo sencillo. | dlegorreta

Las grficas que obtengo del cdigo son las siguientes:

(https://dlegorreta.files.wordpress.com/2015/03/dendrograma.jpeg)

(https://dlegorreta.files.wordpress.com/2015/03/cluster_genes.jpeg)

La primera grfica es el modo visual en que se comportan los clusters en el mtodo jerrquico y la segunda es una
herramienta visual para observar el comportamiento del mtodo k-medias.

Una observacin entre los dos mtodos es, k-medias pide como parmetro conocer cuantos clusters se buscamos en el
algoritmo y el jerrquico no, de cierto modo la aglomeracin por el jerrquico es cercana a lo que sera un mtodo no
supervisado.

Para el algoritmo de k-medias resulta importante el anlisis de la eleccin de la cantidad de clusters en los datos.

Existen varias tcnicas para tratar de elegir el mejor valor de k, en R project, existen varias libreras entre las cuales
estn: fpc y mclust. Para los datos de este ejemplo prob con mclust, pero le resultaba muy costoso as que cancel
el proceso.

Pero otro modo muy sencillo y que no requiere ninguna librera es mediante el anlisis de los cuadrados de las
distancias de cada dato aglomerado con respecto a la cantidad de clusters que se calculan.

#Eleccin de K para k-medias


wss <- (nrow(M2)-1)*sum(apply(M2,2,var))
for (i in 2:10) wss[i] <- sum(kmeans(M2,centers=i)$withinss)
plot(1:10, wss, type="b", xlab="Nmbero de Clusters",ylab="Suma de cuadrad

La grfica que se obtiene es la siguiente:

https://dlegorreta.wordpress.com/2015/03/18/analisis-de-cluster-un-ejemplo-sencillo/ 7/9
24/1/2017 Anlisis de Cluster, un ejemplo sencillo. | dlegorreta

(https://dlegorreta.files.wordpress.com/2015/03/k-medias.jpeg)

Esta ltima tcnicas es sencilla, pero el problema es que no siempre indica de modo claro como elegir la cantidad de
clusters de un modo ptimo. Por lo cual es bueno recurrir a otro tipo de algoritmo y compara nuestra seleccin y al final
validar con alguna muestra de datos.

En un trabajo de investigacin de Robert Tibshirani-G. Walther y Trevor Hastie[5] plantean un mtodo para obtener un
ptimo del nmero de clusters en el algoritmo k-meadias, sobre este reporte de investigacin se basan varias libreras
en R project para estimar el valor ptimo de k.

Espero que este complemente de una idea en general del tipo de anlisis y de las tcnicas bsicas de como usar este
tipo algoritmo. Cabe mencionar que las tcnicas de Cluster estn relacionadas con la Mezcla de Modelos y el algoritmo
EM, lo cual se puede usar para la construccin de modelos. En otra entrada explico el uso y relacin de esto.

Referencias:

1.-http://shop.oreilly.com/product/0636920018483.do (http://shop.oreilly.com/product/0636920018483.do)

2.-http://statweb.stanford.edu/~tibs/ElemStatLearn/ (http://statweb.stanford.edu/~tibs/ElemStatLearn/)

3.-http://www.amazon.com/Cluster-Analysis-Brian-S-Everitt/dp/0470749911 (http://www.amazon.com/Cluster-
Analysis-Brian-S-Everitt/dp/0470749911)

4.-http://www.amazon.com/Machine-Learning-Probabilistic-Perspective-Computation/dp/0262018020
(http://www.amazon.com/Machine-Learning-Probabilistic-Perspective-Computation/dp/0262018020)

5.-http://web.stanford.edu/~hastie/Papers/gap.pdf (http://web.stanford.edu/~hastie/Papers/gap.pdf)

Advertisements (https://en.support.wordpress.com/about-these-
ads/)

Categoras: Machine Learning en R Project Etiquetas: Andrew Moore, Andrew Ng, cluster, Distancia Euclidiana,
escalado multidimensional, k-Means Clustering, mtrica

3 comentarios sobre Anlisis de Cluster, un


ejemplo sencillo.

https://dlegorreta.wordpress.com/2015/03/18/analisis-de-cluster-un-ejemplo-sencillo/ 8/9
24/1/2017 Anlisis de Cluster, un ejemplo sencillo. | dlegorreta

1. Pingback: Sobre sistemas de recomendacin, ejemplo sencillo. | dlegorreta


2. Pingback: Algoritmos de Machine Learning en R project | dlegorreta
3. Pingback: Encontrando grupos o anlisis de Cluster | dlegorreta

CREA UN BLOG O UN SITIO WEB GRATUITOS CON WORDPRESS.COM. TEMA: WILSON POR
ANDERS NOREN.

https://dlegorreta.wordpress.com/2015/03/18/analisis-de-cluster-un-ejemplo-sencillo/ 9/9