Pages: [1]   Go Down
Print
Author Topic: soluzione primo esercizio compito 25 giugno  (Read 793 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Giovanni Gallo
Moderator
Forumista
*****
Offline Offline

Gender: Male
Posts: 509


WWW
« on: 27-06-2010, 15:39:33 »

Il compito partiva da due classi di dati. I dati avevano il formato di coppie (x,y) di numeri reali. Il training set forntio conteneva 100 punti per ciascuna classe.

TUTTI gli studenti hanno applicato una riduzione PCA separata per le due classi. Questo è errato, la riduzione deve essere unica per le due classi assieme.

Ecco una (possibile) traccia di soluzione (in MATLAB):

-----------------------------------------------------------------------------------
close all;
clear all;
load classi;

% una visualizzazione preliminare è spesso la chiave di tutto il
% procedimento. E' chiaro che dovendo proiettare su una dimensione essa
% dovrà approssimativamente essere lungo l'asse delle y, schiacciando i
% dati sull'asse delle x. Intuitivamente basterebbe "ignorare" la feature
% y, ma lo chiariremo con l'aiuto della PCA
% Ecco il codice per la visualizzazione

figure,
hold on,
plot(pop1(:,1),pop1(:,2),'r.');
plot(pop2(:,1),pop2(:,2),'b+');

% scopo dell'esercizo è costruire a partire da un TS un clasificatore
% bayesiano. Ora la PCA non può essere applicata separatamente alle due
% popolazioni. Al momento della classificazione di un nuovo item di cui non
% è nota la classe quale proiezione verrebbe adottata?
% per questo è necessartio fondere le due calssi in una unica popolazione
% e appicare ad essa l'analisi PCA

popolazione=[pop1;pop2];

media=mean(popolazione);
popolazione(:,1)=popolazione(:,1)-media(1)*ones(200,1);
popolazione(:,2)=popolazione(:,2)-media(2)*ones(200,1);

covarianza=cov(popolazione);
[U V]=eig(covarianza);
autovalori=diag(V) % questo ci rivela che l'autovalore maggiore è il secondo

popolazione=popolazione*U; % abbiamo "orientato" i dati secondo le direzioni più importanti

% disegniamo gli istogrammi per verificare visualmente come la seconda
% nuova componente crei effettivamente una distribuzione bimodale.

figure, hist(popolazione(:,1));
figure, hist(popolazione(:,2));

popRidotta=popolazione(:,2); %abbiamo trasformato i dati in uno-dimensionali e su questi lavoreremo da adesso

% ricordiamo che i primi 100 elementi sono nella classe 1 e i seconid 100
% sono nella classe 2

media1=mean(popRidotta(1:100));
var1=var(popRidotta(1:100));

media2=mean(popRidotta(101:200));
var2=var(popRidotta(101:200));

parametri=[media1 var1; media2 var2]

% sempre a scopo visuale tracceremo i grafi delle due gaussiane che
% moodellano la distribuzione dei dati

k1=1/sqrt(2*pi*var1^2);
k2=1/sqrt(2*pi*var2^2);

t=min(popRidotta):.01:max(popRidotta);
figure,
hold on;
plot(k1*exp(-(t-media1).^2)./(2*(var1^2)),'r');
plot(k2*exp(-(t-media2).^2)./(2*(var2^2)),'b');

% si noti come il valore di "picco" della gaussiana sia inversamente prop.
% alla varianza.

% poichè la prob. a priori è costante e la likelyhood non è importante  la
% classificazione è molto semplice.

for i=1:200
    prob1=k1*exp(-(popRidotta(i)-media1)^2/(2*var1^2));
    prob2=k2*exp(-(popRidotta(i)-media2)^2/(2*var2^2));
    if prob1>prob2 classificazione(i)=1;
    else classificazione(i)=2;
    end
end

confusione(1,1)=sum(classificazione(1:100)==1);
confusione(1,2)=100-confusione(1,1);
confusione(2,2)=sum(classificazione(101:200)==2);
confusione(2,1)=100-confusione(2,2);

disp(confusione);



Logged

---
Pages: [1]   Go Up
Print
Jump to: