% ========================================================================= % =========================== EJERCICIO 1 ================================= % ========================================================================= % a) Asignar la semilla de la función rand y randn a 0 rand('seed',0); randn('seed',0); % b) Generar 1000 datos aleatorios de una normal 2D con centro en [3,4] % y matriz de covarianza [1 0.8;0.8 1], usando la función randnorm de la % librería pattern. C = [1 0.8 ; 0.8 1]; %Covarianza u = [3 ; 4]; %Media x = randnorm(u, C, 1000); %c) Restar la media a cada dato, para que estén centrados en (0,0). for i = 1:size(x, 2), xc(:, i) = x(:, i) - u; end %d) Calcular la matriz de conversión de PCA, usando W = pca(x). W = pca(xc); %e) Dibujar los datos originales y los convertidos, calculados como x1 = W * x; x1 = W * xc; figure, plot(1:1000,xc,'.b'), hold on, plot(1:1000, x1,'or') %f) Los datos se pueden recomponer usando x2 = pinv(W) * x1; Dibujar los %datos recompuestos y compararlos con los originales. x2 = pinv(W) * x1; figure, plot(1:1000,xc,'.b'), hold on, plot(1:1000, x2,'og') %g) Evaluar la pérdida de información (usando sumsqr) al proyectar los %datos en la primera dimensión del espacio 2D convertido mediante PCA, y %evaluar la pérdida de información al recomponer los datos. e = sumsqr(x1) er = sumsqr(x2) %h) Modificar W ligeramente, y evaluar la pérdida de información obtenida. %¿es siempre mayor? Wm = W + 0.05; x1m = Wm * xc; x2m = pinv(Wm) * x1m; em = sumsqr(x1m) erm = sumsqr(x2m) % ========================================================================= % =========================== EJERCICIO 2 ================================= % ========================================================================= %a) Asignar la semilla de la función rand y randn a 0. rand('seed',0); randn('seed',0); %b) Generar 2 clases: %CLASE 1: 1000 datos aleatorios de una normal 2D con centro en [3,4] y matriz de covarianza [1 0.8;0.8 1] %CLASE 2: 1000 datos aleatorios de una normal 2D con centro en [5,0] y matriz de covarianza [1 0.8;0.8 1] C = [1 0.8;0.8 1]; %Covarianza u1 = [3 ; 4]; u2 = [5 ; 0]; %Medias c1 = randnorm(u1, C, 1000); c2 = randnorm(u2, C, 1000); %c) Calcular la matriz de PCA, convertir los datos originales al espacio %PCA, y dibujar los datos convertidos for i = 1:size(c1, 2), xc1(:, i) = c1(:, i) - u1; xc2(:, i) = c2(:, i) - u2; end W = pca([xc1 xc2], 2); x1 = W * xc1; %Datos convertidos figure, plot(1:1000,[xc1 ;xc2],'.b'),hold on, plot(1:1000,x1,'or') rx1 = pinv(W) * xc1; %Datos recompuestos e1 = sumsqr(x1); %Error datos convertidos e1r = sumsqr(rx1); %Error datos recompuestos %d) Calcular la matriz de Fisher, convertir los datos originales al espacio %FISHER, y dibujar los datos convertidos x = [c1 c2]; y = [zeros(1,1000) ones(1, 1000)]; [x,y] = shuffle(x,y); [W,f,eigenv]=fisher(x,y,2); xp = W * x; plotpat(xp,y) % ========================================================================= % =========================== EJERCICIO 3 ================================= % ========================================================================= %a) Usar la base de datos DNATRN en la base de datos STATLOG. load DNATRN %- Visualizar los datos usando PCA y FISHER, proyectando sobre dos dimensiones W = pca(x, 2); nx = W * x; plotpat(nx, y); [W,f,eigenv]=fisher(x,y,2); fx = W * x; plotpat(fx, y); %b)Usar la base de datos DIABETES en la base de datos STATLOG. %Se hace los mismo que en apartado anterior para con otra base de datos.