10529 Informática Empotrada y Aplicaciones Máster en Tecnologı́as de la Información y las Comunicaciones Universitat de les Illes Balears 29 de enero de 2011 1. Introducción Esta práctica consiste en resolver una serie de problemas con ayuda de Matlab. Hay que presentar una única documentación que detalle tanto el código fuente utilizado como los resultados obtenidos. Cada grupo ha de trabajar con un conjunto diferente de clases y caracterı́sticas, de acuerdo con la siguiente tabla: grupo 1 2 3 4 5 6 7 8 ejercicios con 2 clases: ω1 - ω2 apple - bird chopper - classic apple - bell bell - carriage carriage - cellular phone carriage - chopper hammer - ray rat - ray ejercicios con 3 clases: ω1 - ω2 - ω3 apple - bird - children chopper - classic - hammer apple - bell - fork bell - carriage - children carriage - cellular phone - ray carriage - chopper - classic hammer - ray - shoe rat - ray - shoe Los datos de esta práctica se encuentran en el fichero http://dmi.uib.es/aortiz/IEA10529/10529 formas.zip. Tras descargarlo en el directorio de trabajo, y descomprimirlo conservando la estructura de directorios, se creará un directorio por cada forma diferente de la anterior tabla (el nombre del directorio coincide con el de la forma). Cada directorio contiene 20 imágenes binarias cuyo nombre corresponde a la plantilla ffffffffkk.bmp, donde ffffffff es el nombre de la forma y kk es el número de imagen (de 1 a 20). Por ejemplo, para leer la imagen ‘k’ de la forma ‘apple’, se podrı́a utilizar el siguiente comando en Matlab: img = imread(sprintf(’%s/%s%02d.gif’,’apple’,’apple’,k)); Como documentación, tenéis que seguir las instrucciones de la plantilla que estará disponible en la página web de la asignatura. Observad que esta documentación es lo único que tenéis que entregar. Si no podéis conseguir una impresión satisfactoria (p.e. la impresión es en blanco y negro cuando hay gráficos en color y el color es relevante), aparte de presentar el documento impreso, podéis enviar un e-mail con un PDF del documento. La fecha tope de entrega del informe de la práctica es el dı́a 5 de Setiembre de 2011. OBSERVACIONES: La lista con los números de grupo se encuentra disponible en la página web de la asignatura. Al final del enunciado puedes encontrar una colección de comandos de Matlab útiles para responder ciertos apartados de la práctica. En cualquier caso, se recomienda hacer uso del help de Matlab en caso de dudas. Ejemplo de uso: Desde la consola, help plot PLOT Linear plot. PLOT(X,Y) plots vector Y versus vector X. If X or Y is a matrix, then the vector is plotted versus the rows or columns of the matrix, whichever line up. If X is a scalar and Y is a vector, disconnected line objects are created and plotted as discrete points vertically at X. ... Se valorará la inclusión de comentarios en las respuestas, ası́ como la claridad, correcta expresión y estructuración en la presentación de los resultados y programas. En particular se esperan variables con nombres significativos y programas mı́nimamente comentados. Alberto Ortiz 1 A. Selección de caracterı́sticas 1. Determina los valores de excentricidad, solidez y extensión para los ejemplares de las clases asignadas al grupo utilizando como modelo el siguiente código Matlab para la forma apple: data = zeros(20,4); for k = 1:20 img = double(imread(sprintf(’%s/%s%02d.gif’,’apple’,’apple’,k))); % excentricidad, solidez y extensión rp = regionprops(img,’Eccentricity’,’Solidity’,’Extent’); % rellenamos ’data’ data(k,1) = rp1.Eccentricity; data(k,2) = rp1.Solidity; data(k,3) = rp1.Extent; data(k,4) = 1; % número de clase: en este caso w1 para el grupo 1 end 2. Representa gráficamente las formas sobre el espacio de caracterı́sticas por parejas de caracterı́sticas: excentricidad / solidez, excentricidad / extensión y solidez / extensión. Para ello, utiliza el siguiente fragmento de código para Matlab como modelo. Este código visualiza en el eje X la caracterı́stica 1 y en el eje Y la caracterı́stica 2: figure(1); clf; hold on; plot(data( 1:20,1),data( 1:20,2),’+r’); plot(data(21:40,1),data(21:40,2),’og’); plot(data(41:60,1),data(41:60,2),’xb’); % primera forma/clase, visualizada como ’+’ rojos % segunda forma/clase, visualizada como ’o’ verdes % tercera forma/clase, visualizada como ’x’ azules 3. Selecciona la pareja de caracterı́sticas que, por observación visual, separa más los ejemplares de las clases. Ésta será la pareja de caracterı́sticas que se aplicará en los siguientes apartados de la práctica. B. Clasificación Bayesiana 1. Calcula la media y la matriz de covarianza para cada una de las clases asignadas al grupo, utilizando las 18 primeras imágenes de cada grupo. Asume para el resto de este apartado que la función de densidad de probabilidad para cada clase obedece a una distribución Gaussiana con los parámetros respectivos calculados. 2. Diseña un clasificador Bayesiano para las dos (2) clases asignadas al grupo, utilizando las medias y matrices de covarianza calculadas en el apartado B.1. Describe formalmente el clasificador siguiendo la notación vista en clase: si g12 (x) = “expresión en x”> 0, entonces x → ω1 , sino x → ω2 . Por ejemplo, si g12 (x) = 3x21 + 2x1 x2 − 4x2 la descripción formal del clasificador serı́a: si 3x21 + 2x1 x2 − 4x2 > 0, entonces x → ω1 , sino x → ω2 3. Representa gráficamente la curva de decisión sobre la misma figura del apartado A.2. 4. Determina la clase en la que son clasificados los dos ejemplares de cada clase no utilizados para el entrenamiento. 5. Diseña un clasificador Bayesiano para las tres (3) clases asignadas al grupo, asumiendo que las clases comparten la misma matriz de covarianza. Para ello, utiliza como matriz de covarianza común el promedio de las tres matrices de covarianza resultantes del apartado B.1. Describe formalmente el clasificador siguiendo la notación vista en clase: si g12 (x) = “expresión en x”> 0, entonces ... Por ejemplo, si g12 (x) = 3x21 + 2x1 x2 − 4x2 la descripción formal del clasificador serı́a: si 3x21 + 2x1 x2 − 4x2 > 0, entonces ... 6. Representa gráficamente las curvas de decisión sobre la misma figura del apartado A.2. 7. Determina la clase en la que son clasificados los dos ejemplares de cada clase no utilizados para el entrenamiento. Alberto Ortiz 2 C. Funciones de discriminación lineales 1. Aplica la variante del bolsillo del algoritmo del perceptrón a las dos (2) clases que corresponden al grupo. Utiliza los 18 primeros ejemplares para el entrenamiento. 2. Representa gráficamente la curva de decisión sobre la misma figura del apartado A.2. 3. Determina la clase en la que son clasificados los dos ejemplares de cada clase no utilizados para el entrenamiento. D. Agrupamiento jerárquico aglomerativo 1. Agrupa los ejemplares de las tres (3) clases asignadas al grupo empleando agrupamiento jerárquico aglomerativo y considerando las siguientes combinaciones: distancia entre puntos: euclı́dea algoritmos de agrupamiento: vecino más próximo - vecino más lejano - de varianza mı́nima Para ello, utiliza los siguientes comandos de Matlab: P = pdist(X,distancia) calcula la matriz de proximidad P para la matriz de ejemplares X empleando la distancia indicada: entre otras, ’euclidean’, para la distancia euclı́dea, ’cosine’ para el coseno (= 1 - el coseno del ángulo que forman los ejemplares), ’chebychev’ para la distancia L∞ y ’cityblock’ para la distancia city block. L = linkage(P,algoritmo) calcula el árbol jerárquico correspondiente a la matriz de proximidad P y el algoritmo indicado: entre otros, ’single’, para el algoritmo del vecino más próximo, ’complete’, para el algoritmo del vecino más lejano, y ’ward’, para el algoritmo de varianza mı́nima. dendrogram(L) visualiza el dendrograma correspondiente al árbol jerárquico L. T = cluster(L,’MaxClust’,nc) devuelve, para el número de clusters nc, el vector T, cada fila del cual indica en qué cluster ha sido agrupado el ejemplar de la misma fila de la matriz X. 2. Visualiza el resultado de la clasificación (dendrograma y clasificación) para cada combinación y determina los ejemplares mal agrupados. E. Agrupamiento por optimización Repite el apartado D para el algoritmo k-means. Para ello, emplea la función: T = kmeans(X,nc,’Distance’,’sqEuclidean’,’Replicates’,ni) donde nc es el número final de clusters requerido, se emplea la distancia euclı́dea y se pide que el algoritmo se ejecute ni veces para no depender de la elección inicial de centroides (p.e. 10 veces). Otras distancias disponibles son: ’cityblock’ y ’cosine’. La distancia L∞ no está implementada. Si alguna ejecución da problemas, lee la ayuda del algoritmo que proporciona Matlab, en particular lo que hace referencia a ’EmptyAction’ y ’Display’. Por tanto: 1. Agrupa los ejemplares utilizando el algoritmo k-means tal y como se ha indicado, pidiendo una agrupación en tres (3) clases y considera las distancias ’sqEuclidean’, ’cityblock’ y ’cosine’. 2. Visualiza el resultado de la clasificación para cada caso y determina los ejemplares mal agrupados. Alberto Ortiz 3 2. Código MATLAB útil Visualización en la figura n de una colección de puntos dada por los vectores x e y: figure(n); plot(x,y,’+’); Visualización en la figura n de una colección de puntos dada por los vectores x e y en trazo continuo: figure(n); plot(x,y,’-’); Visualización de varias colecciones de puntos sobre la misma figura: figure(n); clf; hold on; plot(x1,y1,’r’); plot(x2,y2,’g’); ... (clf reinicia la figura y hold on evita que el segundo plot borre los efectos del primero.) También: figure(n); plot(x1,y1,’r’,x2,y2,’g’,...); Visualización de la recta ax + b, p.e. para el intervalo [-10,7] con incremento 0.1: x = -10:0.1:7; figure(n); plot(x,a*x+b); Visualización del polinomio p1 x2 + p2 x + p3 , p.e. para el intervalo [0,100] con incremento de 1: x = 0:100; figure(n); plot(x,p(1)*x.^ 2 + p(2)*x + p(3)); Visualización de una curva dada en forma implı́cita, p.e. 4x2 +3y = 5 y el dominio x ∈ [−10, 10], y ∈ [0, 5]: figure(n); ezplot(’4*xˆ2 + 3*y - 5’,[-10 10 0 5]); Alberto Ortiz 4