Está en la página 1de 6

ANLISIS DE CLSTERS II PRCTICA

CLSTERS EN EL ENTORNO R

Los paquetes (packages) en el entorno R


Cualquier expresin vlida en la lnea de rdenes de R puede escribirse en un fichero con extensin .r y ser ejecutada mediante la operacin Interpretar cdigo fuente R del men Ficheros. Es frecuente emplear esta posibilidad para preparar funciones, que puedan utilizarse en paralelo a las internas del lenguaje de modo transparente al usuario final. Cuando se tiene una coleccin de funciones y, posiblemente, otros recursos relacionados, como datos ilustrativos para mostrar sintaxis, pueden reunirse formando un paquete, que es el resultado de organizar y documentar un tal conjunto de recursos, de acuerdo a unas especificaciones bastante estrictas, que facilitan su uso pblico. Hay ms de tres mil paquetes R aportados por la comunidad de usuarios, para muchsimas aplicaciones de tratamiento y visualizacin de datos, aprendizaje automtico, bioinformtica, etc. En los repositorios CRAN pueden obtenerse los que han superado las pruebas de validacin. Para usar un paquete previamente instalado, se ha de cargar en memoria con la instruccin: library(<nombre>) o mediante la operacin Cargar paquete.. del men Paquetes. Si los ficheros que constituyen el paquete no estn disponibles en el disco, deben instalarse, ya sea a partir de un fichero .zip descargado antes, o bien directamente, mediante instalacin en lnea desde CRAN. Este mismo men Paquetes da ambas opciones.

El paquete de datos datasets


Este paquete se carga automticamente al inicializar R. Contiene conjuntos de datos para ilustrar muchas de las funciones ms usuales de R. Podeis ir, en el men Ayuda html, a la lista de Paquetes, a las descripciones de estos conjuntos de datos, con su origen y variables que contienen. La instruccin: data(<nombre>)

crea un objeto R, usualmente de la clase data.frame (aunque hay otras posibilidades). Esta clase representa lo que usualmente pensamos como una matriz de datos, donde las filas representan individuos u objetos y las columnas son las variables observadas, aadiendo opcionalmente informacin adicional sobre el tipo de las variables (si son numricas, o cadenas de caracteres, etc.) o los nombres de individuos o variables. Un ejemplo de estos conjuntos de datos, que emplearemos en esta prctica, es eurodist, una matriz de datos de distancias entre ciudades europeas. La instruccin: data(eurodist) crea en R el objeto eurodist, que es de la clase dist, una matriz de distancias, es decir, una matriz simtrica con ceros en la diagonal de la que, por tanto, se guarda slo el tringulo inferior sin la diagonal.

El paquete de datos ElemStatLearn


Este paquete contiene diversas bases de datos del libro Elements of Statistical Learning de Hastie, Tibshirani y Friedman (ver bibliografa de la asignatura). Se carga con: library(ElemStatLearn) Por ejemplo, para disponer de los datos de dgitos escaneados que usamos en la prctica anterior hay que ejecutar: data(zip.train) para obtener el subconjunto de entrenamiento. Esto crea un objeto R de la clase data.frame con nombre zip.train. Anlogamente: data(zip.test) para el subconjunto de prueba de esta base de datos. En este mismo paquete hay la funcin zip2image, que extrae una de las matrices 16x16 con un bitmap. As: d12<-zip2image(zip.train,12) guarda el duodcimo dgito en la variable d12. Para mostrarlo en la pantalla, usamos, por ejemplo: image(a, col=gray((0:32)/32)) La funcin image pertenece al paquete graphics, que se carga automticamente. Podeis ver su documentacin en el Help. Los datos nci (NCI microarray data) contienen los datos de cnceres humanos que se han empleado como ilustracin en el captulo de anlisis de clsters.

Los datos spam contienen datos sobre emails, para clasificar como spam o no spam. Tambin nos sern tiles. Los datos vowel.train y vowel.test sirven para pruebas de reconocimiento de vocales inglesas a partir del sonido registrado. Los datos countries contienen un conjunto de datos de disimilaridades entre pases, que puede emplearse para pruebas de anlisis de clsters, de representacin eucldea (escalado multidimensional) o de mapas autoorganizados.

El paquete animation de utilidades y demos


Paquete que contiene funciones y tiles para realizar y operar con grficos animados en R, junto con un repertorio de demos de diversas tcnicas de clculo de probabilidades, como el experimento de la aguja de Buffon, tiradas de una moneda o el Teorema Central del Lmite, y estadsticas como ajustes por mnimos cuadrados, prediccin k-NN o construccin de clusters por el mtodo de k medias.

Anlisis de clsters en el entorno R


Puesto que el anlisis de clsters es uno de los procedimientos bsicos en la minera de datos, hay literalmente cientos de funciones para R tiles en la formacin de clsters u operaciones auxiliares, tales como clculo de distancias, similaridades o disimilaridades o representaciones grficas de dendrogramas y otros diagramas. En el paquete stats, que se carga por defecto en la inicializacin del entorno R, hay las funciones kmeans(), para hacer clsters no jerrquicos por el mtodo de las k medias, y el hclust(), para clsters jerrquicos. Cada una de estas funciones tiene mltiples opciones, que pueden estudiarse a partir de la documentacin que las acompaa y puede visualizarse a partir del men ayuda html. Cada pgina de documentacin de una funcin R suele finalizar con algunos ejemplos con datos. En tal caso, se puede copiar y pegar al programa R las lneas con los ejemplos, para ver su funcionamiento. En primer lugar, practicaremos esto con la funcin kmeans, probando los ejemplos que vienen como ilustracin en la pgina de ayuda para esta funcin. Tambin es interesante hacer algunas pruebas con la funcin kmeans.ani() del paquete animation.

A continuacin, aplicaremos kmeans a los datos de dgitos escaneados. En realidad, este conjunto de datos est preparado para clasificacin segn diversos procedimientos de aprendizaje supervisado, es decir, despus de haber entrenado un algoritmo de clasificacin en el subconjunto zip.train, en el que cada bitmap tiene una etiqueta con el dgito al que corresponde, realizar el reconocimiento ptico de caracteres (OCR ) con nuevos bitmaps, como los que forman parte del subconjunto zip.test. Para la presente prctica, descartaremos las etiquetas identificadoras, juntaremos los bitmaps correspondientes a dos o ms dgitos y veremos cmo el algoritmo kmeans permite separarlos en clases. Con la instruccin: data(zip.train) creamos el data.frame con nombre zip.train, que tiene 7291 filas de 257=1+256 columnas. La primera columna tiene la etiqueta del dgito. Mediante: zip.train1<-zip.train[,-1] eliminamos esta columna, y con: z<-kmeans(zip.train1,10) ejecutamos el mtodo de k-medias con k=10 y creamos un objeto de la clase kmeans de nombre z (ver la estructura de esta clase en la pgina de ayuda). Es interesante visualizar los prototipos de los dgitos creados por el algoritmo de k medias. Para ello usaremos la funcin zip2image(), descrita ms arriba. Como esta funcin est preparada para un fichero en el formato de los datos zip, vamos a aadirle una columna a la matriz de los centroides: z0<-cbind(1:10,z$centers) Para mostrar el primer prototipo, hacemos: a1<-zip2image(z0,1) image(a1, col=gray((0:32)/32)) Del mismo modo podemos visualizar los dems. Tambin es interesante producir ms de 10 o menos de 10 clsters y visualizar como imgenes los centroides resultantes. En segundo lugar, vamos a ver la produccin de clsters jerrquicos con la funcin hclust(). Como en el caso anterior, ver la pgina de ayuda de la funcin. La instruccin: h<-hclust(eurodist) crea un objeto de la clase hclust, que tiene toda la informacin del resultado del anlisis de clsters jerrquicos de las distancias entre ciudades europeas. Para ver su estructura, hacemos:

str(h) Para ver un resumen del objeto, print(h) o, equivalentemente, h Para hacer el dibujo del dendrograma producido, hacemos plot(h) De este modo vemos una caracterstica importante de la orientacin a objetos del lenguaje R. Es posible, cuando se disea una clase de objetos, escribir mtodos especficos para la clase, que toman el lugar de los mtodos genricos. As, la funcin plot() que, en general sirve para dibujar diagramas de dispersin, de puntos, se especializa para objetos de la clase hclust, dando lugar al dibujo de un dendrograma. Observad, en la sintaxis de la funcin, que puede hacerse el anlisis de clsters con uno de mltiples mtodos, los tres ms importantes, mencionados en la clase de teora, y algunos ms. Probad los distintos resultados. El ejemplo que aparece en la pgina de ayuda de hclust emplea la funcin dist(), que permite obtener una matriz de distancias, como un objeto de la clase dist, a partir de una matriz rectangular de datos, objeto de la clase data.frame. Observad que mediante el parmetro opcional method se puede emplear una de varias posibles medidas de distancia. Las funciones as.matrix() y as.dist() permiten pasar de la clase dist a una matriz completa, de la clase matrix y viceversa.

El paquete cluster
Aparte de las funciones bsicas del paquete stats, hay varios paquetes especficos para anlisis de clsters, segn varios algoritmos y para diversos tipos de datos. El paquete cluster contiene varias implementaciones de algoritmos de formacin de clsters, algunos de ellos para grandes bases de datos. Los nombres de las funciones son, en general, acrnimos de una descripcin del algoritmo, si bien los autores han buscado tambin hacer un juego de palabras, dando lugar a nombres de mujer. Este procedimiento de formacin de nombres se aplica tambin a la funcin que usan para el clculo de distancias, daisy (Dissimilarity Matrix Calculation). Los tres algoritmos: pam (Partitioning Around Medoids) clara (Clustering Large Applications)

fanny (Fuzzy Analysis Clustering)

son mtodos de particin, mientras que los otros tres: agnes (Agglomerative Nesting - Hierarchical Clustering) diana (Divisive Analysis Clustering) mona (Monothetic Analysis Clustering of Binary Variables)

son de tipo jerrquico. La funcin daisy tiene utilidad an si no se desea emplear los algoritmos del paquete cluster. Sirve, como la funcin dist del paquete stats, para calcular una matriz de disimilaridades o distancias a partir de un data.frame o una matriz de datos. Tiene esencialmente la misma sintaxis que dist, pero es una generalizacin neta de sta, permitiendo datos no numricos.