Introducci´
on a Matlab y PRTools
Aprendizaje autom´
atico
27 de abril de 2016
Profesor:
Hern´an Dar´ıo Ben´ıtez Restrepo
Pontificia Universidad Javeriana-Cali, Departamento de Electr´onica y Ciencias de la Computaci´on.
Temas
Introducci´on a Matlab, Introducci´on a PRTOOLS 4.2
1.
Introducci´
on
En el Reconocimiento de Patrones Estad´ıstico (RPE) se estudian t´ecnicas para la obtenci´on de reglas de decisi´on (clasificadores) que son usadas en la detecci´on y reconocimiento de patrones en datos experimentales. El reconocimiento de patrones tiene un fuerte componente computacional que demanda el uso de programas num´ericos para el an´alisis de datos y evaluaci´on de los procedi-mientos. El RPE se aplica en casi todas las ´areas de ciencia aplicada. Por esta raz´on, el uso de una herramienta computacional ampliamente aceptada como Matlab es provechoso para el estudio de las diferentes t´ecnicas en RPE ya que se puede hacer uso de los diferentes toolbox de Matlab para su aplicaci´on en diversas ´areas como im´agenes digitales, procesamiento de voz, miner´ıa de datos etc.
En este laboratorio se introduce el uso del toolbox para reconocimiento de patrones PRTOOLS 4.1 [1],[2] que ofrece cerca de 200 rutinas para el RPE.
2.
Procedimiento
2.1.
Introducci´
on a Matlab
La principal herramienta computacional a manejar en el curso es Matlab y en esta secci´on se hace una corta introducci´on a este programa y se resalta principalmente su capacidad para el ma-nejo de matrices y vectores. El lector interesado puede referirse a la secci´on Getting started del Help de Matlab o al manual que se encuentra en: Introduction to Matlab para encontrar informaci´on especial respecto a las facilidades para graficar y a las diferentes cajas de herramientas (toolbox ) en diversos campos de la ciencia y la ingenier´ıa.
Matlab (matrix laboratory) es una herramienta general de c´omputo num´erico que integra c´ alcu-lo, visualizaci´on y programaci´on en un ambiente interactivo donde los problemas y soluciones se expresan en forma muy similar a la notaci´on matem´atica. Los arreglos constituyen el elemento base en su estructura de datos y no requieren ser dimensionados. Todos los datos se representan con doble precisi´on lo que hace m´as precisos los c´alculos y la interacci´on m´as conveniente. Lo anterior
realmente necesario.
2.1.1. Vectorizar
En el ambiente de Matlab se denominar´a vectorizar a la operaci´on que busca explotar la eficien-cia de Matlab en operaciones con vectores y matrices al reemplazar c´odigos repetitivos. A primera vista puede pensarse que la vectorizaci´on conlleva a c´odigos ineficientes en tiempo de c´alculo pues puede requerirse un n´umero mayor de operaciones. La mejora se puede apreciar al tener en cuen-ta que generalmente es un solo tipo de operaci´on la que debe aplicarse repetidamente al vector. Un buen ejemplo de esta ventaja, se aprecia al vectorizar las buclas for en donde adem´as de las operaciones sobre los datos es necesario realizar saltos, comparaciones y modificaci´on de los ´ındices.
Repetici´on de filas o columnas
Frecuentemente se hace necesario formar matrices mediante la repetici´on de uno o m´as valores. Si la matriz debe tener todos los elementos con igual valor, se pueden usar funciones como ones o zeros. Por ejemplo para crear una matriz A de MxN con todos sus valores iguales a 5.3, se puede lograr con la instrucci´on,
A= 5.3* ones(M,N)
Si se desea crear una matriz de M filas a partir de la repetici´on de un vector fila x puede utilizarse la operaci´on de producto externo de matrices con la siguiente instrucci´on,
X = ones (M,1) * x Vectores l´ogicos
Uno de los principales causantes de la lentitud en un programa lo constituye la utilizaci´on de instrucciones condicionales. En principio, la vectorizaci´on no deber´ıa aplicarse a los tests de verificaci´on de condiciones, pero lo anterior no es totalmente cierto debido a que en Matlab las funciones de comparaci´on - tales como m´as grande que, igual que, .. - pueden operar sobre vectores o matrices. Por ejemplo, el c´odigo:
[2 4 6 8 10 12 ] >6
genera la respuesta [ 0 0 0 1 1 1 ], donde 0 representa FALSE y 1 TRUE Ejemplo de vectorizaci´on
Crear una funci´on que tome una se˜nal de entrada x y genere a partir de ´esta, una se˜nal y cuyas amplitudes no excedan dos l´ımites establecidos por el usuario.
function y = recortar (x, limbajo, limalto) [M, N]= size (x); for m=1:M for n=1:N if x(m,n) >limalto x(m,n)= limalto; elseif x(m,n) <limbajo x(m,n)=limbajo; end end end y=x;
Esta soluci´on requiere de dos buclas for para recorrer todos los elementos de la matriz, lo cual retarda la ejecuci´on del programa. Para realizar un programa m´as r´apido se recurre a la vecto-rizaci´on y al hecho de que TRUE y FALSE tienen valores num´ericos que pueden usarse como m´ascaras para seleccionar partes de la matriz x.
Soluci´on vectorizada (r´apida)
function y = recortar (x, limbajo, limalto) y=(x ·* [x <= limalto] ) + limalto ·* [ x > limalto]; y=(x ·* [y > = limbajo] ) + limbajo ·* [x < limbajo];
La segunda versi´on del programa requiere un n´umero m´as alto de operaciones matem´aticas que la primera, sin embargo, requiere mucho menos tiempo de ejecuci´on.
2.1.2. Operador dos puntos(:)
El operador (: ) es de suma importancia en el manejo de matrices, vectores y arreglos. Este operador permite indexar en forma total o parcial un conjunto de columnas y/o filas, que se utilizan para extraer o llenar datos en uno de los tipos de datos indicados anteriormente. Algunas de las formas de uso son:
1. vi: incr : vf Crea una lista de n´umeros espaciados incr que empiezan en vi hasta llegar a vf. El valor por defecto de incr es 1 y puede omitirse.
2. A(vi: incr :vf, j ) Indexa los elementos vi hasta vf de la columna j de la matriz A. 3. A(i, : ) Indexa todos los elementos de la fila i de la matriz A.
4. b=A (: ) Crea un vector columna, b, con las columnas de A concatenadas. 2.1.3. Operador punto y operaci´on aritm´etica
El operador (.) seguido de una operaci´on aritm´etica permite realizar operaciones elemento a elemento (correspondientes) en dos arreglos, los cuales deben ser del mismo arreglo a no ser que uno de ellos sea un escalar.
C=A ·* B Multiplicaci´on elemento a elemento de los arreglos A y B. C(i,j) = A(i,j)*B(i,j) C=A · B Divisi´on izquierda elemento a elemento de los arreglos A y B. C(i,j) = B(i,j)/A(i,j) C=A · / B Divisi´on derecha elemento a elemento de los arreglos A y B. C(i,j) = A(i,j)/B(i,j) C=A ·ˆB Potenciaci´on de cada elemento de A por su respectivo en B. C(i,j)= A(i,j)ˆB(i,j).
2.2.
PRTOOLS 4.1
2.2.1. Instalaci´on PRTOOLS 4.2
Descargue PRTools4 de la p´agina http://www.37steps.com/, descomprima el archivo y ponga la carpeta prtools en la carpeta toolbox de Matlab. Luego, en el men´u File de Matlab seleccione Set Path e incluya la ruta para la carpeta prtools puesta en la carpeta toolbox. Tambi´en incluya en esta lista de rutas los path de los datos con los que trabajar´a.
2.2.2. Creaci´on de conjuntos de datos
PRTOOLS trabaja con conjuntos de objetos representados por vectores en un espacio de ca-racter´ısticas. La estructura central se llama dataset y consiste en una matriz de m × k; m vectores fila que representan los objetos dados por k caracter´ısticas cada uno. Adjunto a esta matriz hay un conjunto de m etiquetas (cadenas o n´umeros) una para cada objeto y un conjunto de k nombres de caracter´ısticas (tambi´en cadenas o n´umeros), uno por cada caracter´ıstica. Adem´as, se almacena un conjunto de probabilidades a priori, una para cada clase. Los objetos con la misma etiqueta pertenecen a la misma clase. En el manual PRTools4.1. pdf en la direcci´on www.prtools.org se pueden consultar la lista de rutinas que manejan los datasets. Algunas rutinas ´utiles son:
dataset Define dataset a partir de una matriz de datos y etiquetas gendat Genera un subconjunto de manera aleatoria de un dataset genlab Genera etiquetas
seldat Selecciona un subconjunto espec´ıfico de un dataset setdat Define un nuevo dataset de uno existente reemplazando sus datos getdata Toma los datos del dataset
getlab Toma las etiquetas del dataset getfeat Toma las etiquetas de las caracter´ısticas renumlab Convierte las etiquetas en n´umeros
Se pueden especificar conjuntos de objetos externamente o se pueden generar con las rutinas de PRTOOLS. Sus etiquetas pueden ser dadas externamente o pueden ser el resultado de un an´alisis de cluster o clasificaci´on. Un dataset que contiene 10 objetos con 5 medidas aleatorias se puede generar con:
> > data = rand(10,5); > > a = dataset(data)
10 by 5 dataset with 0 classes: [ ]
En este ejemplo no se pusieron etiquetas, por lo tanto no se detectaron clases. Las etiquetas se pueden adicionar de esta manera:
> > labs = [1 1 1 1 1 2 2 2 2 2]0; % las etiquetas deben ser un vector columna > > a = dataset(a,labs)
10 by 5 dataset with 2 classes: [5 5]
Note que las etiquetas deben ser presentadas como un vector columna. Una manera simple de asignar vectores a un dataset es dada por la rutina genlab en combinaci´on con el comando char de Matlab:
> > labs = genlab([4 2 4],char(0manzana0,0pera0,0banana0)) > > a = dataset(a,labs) 10 by 5 dataset with 3 classes: [4 4 2]
Note que el orden de las clases ha cambiado. Use las rutinas getlab y getfeat para recuperar las etiquetas de las observaciones y las etiquetas de las caracter´ısticas de a. Los campos de un dataset pueden ser vistos convirtiendolo a una estructura, por ejemplo:
> > struct(a) data: [10x5 double] lablist: [3x6 char] nlab: [10x1 double] labtype: 0crisp0 targets: [] featlab: [5x1 double] featdom: [ ] [ ] [ ] [ ] [ ] prior: [ ] cost: [ ] objsize: 10 featsize: 5 ident: 10x1 cell
version: [1x1 struct] 005-Apr-2005 18:57:190 name: [ ]
user: [ ]
En PRTOOLS se puede obtener informaci´on en l´ınea de los comandos a trav´es del comando help de Matlab. El tama˜no de un dataset puede encontrarse de ambas maneras, size y getsize: > > [m,k] = size(a);
> > [m,k,c] = getsize(a);
El n´umero de objetos se retorna en m, el n´umero de carater´ısticas en k y el n´umero de clases en c. Las probabilidades a priori de las clases de guardan en prior. Y por defecto se fija a la frecuencia de la clase si el campo est´a vac´ıo. Los datos en un dataset se pueden obtener con la instrucci´on double(a) o de manera m´as simple con +a.
Los conjuntos de datos se pueden manipular de muchas maneras comparables con las matrices de Matlab. Luego, [a1;a2] combina dos conjuntos de datos, dado que tengan el mismo n´umero de caracter´ısticas. El conjunto de caracter´ısticas se puede extender por [a1 a2] si a1 y a2 tienen el mismo n´umero de objetos.
Referencias
[1] R.P.W. Duin, P. Juszczak, P. Paclik, E. Pekalska, D. de Ridder, and D.M.J. Tax. PRTools4.1, A Matlab Toolbox for Pattern Recognition, Delft University of Technology, 2004.
[2] Ferdi van der Heijden, Robert P.W. Duin, Dick de Ridder, David, and M.J. Tax. Classification, parameter estimation and state estimation - an engineering approach using Matlab. John Wiley & Sons, 2004.