opgaver:Uge5

(Difference between revisions)
Jump to: navigation, search
Line 179: Line 179:
  
  
== Opgave 3 - ==
+
== Opgave 3 - Principal component analysis ==
Disse øvelser handler om radial acceleration (med Principal Component Analysis).
+
Disse øvelser handler om radial acceleration (med Principal Component Analysis - PCA).
  
 
* Du skal starte med at hente datasættet [[Media:ipod_4.txt|ipod_4.txt]], der er et datasæt taget med app'en [http://www.iseismometer.com/ iSeismometer] på en Ipod Touch som del af et eksperiment på kurset i 2011.
 
* Du skal starte med at hente datasættet [[Media:ipod_4.txt|ipod_4.txt]], der er et datasæt taget med app'en [http://www.iseismometer.com/ iSeismometer] på en Ipod Touch som del af et eksperiment på kurset i 2011.
Line 187: Line 187:
 
Indlæs datasættet. De fire variable er hhv. acceleration langs $x$-, $y$- og $z$-akserne samt tid i sekunder. Plot de tre accelerationskomponenter som funktion af tiden.
 
Indlæs datasættet. De fire variable er hhv. acceleration langs $x$-, $y$- og $z$-akserne samt tid i sekunder. Plot de tre accelerationskomponenter som funktion af tiden.
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
[[File:uge5fig5.png|frame|De tre accelerations-retninger.]]
 +
Data indlæses med
  
 +
:<code>data = importdata([datadir,'ipod_4.txt']);</code>
 +
 +
og man kan plotte de tre retnings-akser i samme figur med <code>subplot</code>
 +
 +
:<code>figure</code>
 +
:<code>subplot(3,1,1)</code>
 +
:<code>plot(data(:,4), data(:,1))</code>
 +
:<code>title('acceleration x-akse (g)')</code>
 +
:<code>subplot(3,1,2)</code>
 +
:<code>plot(data(:,4), data(:,2))</code>
 +
:<code>title('acceleration y-akse (g)')</code>
 +
:<code>subplot(3,1,3)</code>
 +
:<code>plot(data(:,4), data(:,3))</code>
 +
:<code>title('acceleration z-akse (g)')</code>
 +
 +
Disse tre plots kan ses i figuren til højre.
 
{{hidden end}}
 
{{hidden end}}
  
Line 196: Line 214:
 
Transponér input matricen sådan at den er $M \times N$, hvor $M$ svarer til antallet af parametre og $N$ antallet af målinger. Centrér derefter dataen ved først at beregne middelværdien for de fire parametre, og fratræk denne de enkelte komponenter.  
 
Transponér input matricen sådan at den er $M \times N$, hvor $M$ svarer til antallet af parametre og $N$ antallet af målinger. Centrér derefter dataen ved først at beregne middelværdien for de fire parametre, og fratræk denne de enkelte komponenter.  
 
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
For at centrere dataen kan det være praktisk at bruge en kode a la
 +
 
:<code>data_center = data - repmat(middelværdierne, 1, antallet_af_målinger)</code>
 
:<code>data_center = data - repmat(middelværdierne, 1, antallet_af_målinger)</code>
 +
 +
Prøv at læse lidt om <code>repmat</code> i MATLAB hjælpen.
 
{{hidden end}}
 
{{hidden end}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
Transponeringen gøres med den simple <code>'</code> operator, og <code>size</code> kan bruges til at få <code>M</code> og <code>N</code>,
  
 +
:<code>dat = data';</code>
 +
:<code>[M N] = size(dat);</code>
 +
 +
Centreringen af dataen kan nu gøres som vist i hintet ovenfor, ved først at finde gennemsnittene i et nyt array,
 +
 +
:<code>m = mean(dat,2);</code>
 +
 +
og derefter bruge <code>repmat</code> til at lave et array der kan trækkes fra de oprindelige data (leg lidt med den, hvis du ikke forstår hvordan den virker).
 +
 +
:<code>dat = dat - repmat(m, 1, N);</code>
 
{{hidden end}}
 
{{hidden end}}
  
 
==== Del 2 ====
 
==== Del 2 ====
 
Beregn kovariansmatricen af den centrerede data, og beregn så egenværdierne og egenvektorerne af den, med den indbyggede funktion i MATLAB. Gem diagonalen af egenværdimatricen i en vektor ($M \times 1$).
 
Beregn kovariansmatricen af den centrerede data, og beregn så egenværdierne og egenvektorerne af den, med den indbyggede funktion i MATLAB. Gem diagonalen af egenværdimatricen i en vektor ($M \times 1$).
 +
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
Man kan finde egenværdier og egenvektorer for en matrice i MATLAB ved at bruge <code>eig</code> funktionen. Man kan trække diagonalen af en matrice ud til en vektor med <code>diag</code> funktionen.
 +
{{hidden end}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
Kovariansmatricen udregnes som sædvanligt, med
 +
 +
:<code>cor = cov(dat');</code>
 +
 +
Egenværdierne og egenvektorerne for denne matrice findes ved hjælp af den indbyggede funktion i MATLAB, der giver
 +
 +
:<code>[V E] = eig(cor);</code>
 +
 +
Her er <code>V</code> en matrice der indeholder egenvektorerne, mens <code>E</code> er en matrice der indeholder egenværdierne i diagonalen. Denne diagonal gemmes med
  
 +
:<code>eval = diag(E);</code>
 
{{hidden end}}
 
{{hidden end}}
  
Line 211: Line 257:
 
Sorter egenværdierne efter faldende orden, og gem de indekser som sorteringsmetoden retunerer i en vektor.  
 
Sorter egenværdierne efter faldende orden, og gem de indekser som sorteringsmetoden retunerer i en vektor.  
 
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
Læs lidt om <code>sort</code> funktionen i MATLAB hjælpen. Man kan få den til at spytte indekser ud ved hjælp kode på formen
 +
 
:<code>[smidvæk indices] = sort(egenværdier, 'descend')</code>
 
:<code>[smidvæk indices] = sort(egenværdier, 'descend')</code>
 
{{hidden end}}
 
{{hidden end}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
Dette gøres simpelthen med koden
  
 +
:<code>[drop indices] = sort(eval, 'descend');</code>
 +
 +
hvor <code>drop</code> ikke skal bruges til noget videre.
 
{{hidden end}}
 
{{hidden end}}
  
Line 220: Line 272:
 
Sorter egenvektorerne og egenværdierne med indeks-vektoren.  
 
Sorter egenvektorerne og egenværdierne med indeks-vektoren.  
 
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
Brug de indices som du gemte i del 3 til at bytte rundt på dine egenværdier og egenvektorer. Dette kan gøres med kode som
 +
 
:<code>egenvec = egenvec(:,indices); egenværdier = egenværdier(indices)</code>
 
:<code>egenvec = egenvec(:,indices); egenværdier = egenværdier(indices)</code>
 
{{hidden end}}
 
{{hidden end}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
Egenvektorerne i den ønskede rækkefølge findes med
 +
 +
:<code>egvec = V(:, indices);</code>
 +
 +
mens egenværdierne i samme rækkefølge findes med
  
 +
:<code>eval = eval(indices);</code>
 
{{hidden end}}
 
{{hidden end}}
  
 
==== Del 5 ====
 
==== Del 5 ====
 
Projektér den oprindelige data langs den nye basis (egenvektor matricen).  
 
Projektér den oprindelige data langs den nye basis (egenvektor matricen).  
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
:<code>data_pca = egenvec' * data</code>
 
{{hidden end}}
 
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
For at projicere skal man bare gange egenvektor matricen (transponeret, for at dimensionerne passer) sammen med dataen, som
  
 +
:<code>data_pca = egvec' * dat;</code>
 
{{hidden end}}
 
{{hidden end}}
  
Line 238: Line 297:
 
Plot hvert komponent af det transformerede datasæt som funktion af tiden. Ved at sammenligne værdierne fra egenvektorne med de fire plots, forklar hvad de enkelte komponenter beskriver.
 
Plot hvert komponent af det transformerede datasæt som funktion af tiden. Ved at sammenligne værdierne fra egenvektorne med de fire plots, forklar hvad de enkelte komponenter beskriver.
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
[[File:uge5fig6.png|frame|De fire komponenter efter PCA analysen.]]
 +
Igen kan man plotte flere plots i samme figur ved at bruge <code>subplot</code>.
  
 +
:<code>figure</code>
 +
:<code>subplot(4,1,1)</code>
 +
:<code>plot(data(:,4), data_pca(1, :))</code>
 +
:<code>title('1. Komponent')</code>
 +
:<code>subplot(4,1,2)</code>
 +
:<code>plot(data(:,4), data_pca(2, :))</code>
 +
:<code>title('2. Komponent')</code>
 +
:<code>subplot(4,1,3)</code>
 +
:<code>plot(data(:,4), data_pca(3, :))</code>
 +
:<code>title('3. Komponent')</code>
 +
:<code>subplot(4,1,4)</code>
 +
:<code>plot(data(:,4), data_pca(4, :))</code>
 +
:<code>title('4. Komponent')</code>
 
{{hidden end}}
 
{{hidden end}}
  

Revision as of 15:05, 7 March 2012

I denne uge skal I arbejde med lidt mere avanceret statisk, som en forsmag på hvad I kan lære i mere avancerede statistik-kurser, som f.eks. Anvendt Statistik, der afholdes i blok 1.

Som en forberedelse på at kunne lave disse opgaver, skal I læse et lille dokument skrevet af Morten Dam Jørgensen, der desuden også lavede nedenstående opgaver.

Det kan også hjælpe at læse nogle Wikipedia-sider om emnerne, som f.eks.


Contents

Opgave 1 - Lineær korrelation

Disse øvelser viser hvordan lineære korrelationer kan beregnes og visualiseres, metoder som er anvendelige på det meste data med flere parametre.

  • Du skal starte med at hente datasættet lande.txt, der stammer fra [1].

Spørgsmål 1

Start med at indlæse datafilen, og plot så populationen i forhold til landenes størrelse.

Spørgsmål 2

Beregn den linære korrelation manuelt (altså uden at bruge de indbyggede MATLAB funktioner til at gøre det). Er de to variable korrelerede?

Spørgsmål 3

Beregn kovariansmatricen og korrelationsmatricen med MATLAB's indbyggede funktioner, og sammenlign resultatet med dine egne beregninger.

Spørgsmål 4

Tag logaritmen af begge værdier, og plot resultatet igen. Diskutér forskellen - er korrelationen tydeligere nu? Beregn korrelationen for de logaritmiske værdier. Hvorfor er korrelationen anderledes end i spørgsmål 2?

Spørgsmål 5

Lav et lineært fit af resultatet i spørgsmål 4. Hvor godt er fittet? Beskriver en lineær relation forholdet?


Opgave 2 - Flere korrelationer

Disse øvelser viser mere med korrelationer.

Spørgsmål 1

Indlæs datasættet og beregn korrelationerne mellem de to variable. Er variablene korrelerede?

Spørgsmål 2

Lav et scatter plot af de to variable. Ved visuel inspektion, forklar hvorfor der ikke var en korrelation mellem de to akser i beregningen.

Spørgsmål 3

Datasættet er genereret med følgende udtryk:

n = 2000;
x = linspace(-1, 1, n);
y = - 5 * (x.^2 - 1/2).^2 + unifrnd(-1, 1, [1 n])/3;

Der er tydeligvis en afhængighed mellem $x$- og $y$-aksen. I hvilke tilfælde vil en lineær korrelation være et acceptabelt mål for korrelationen mellem to værdier?


Opgave 3 - Principal component analysis

Disse øvelser handler om radial acceleration (med Principal Component Analysis - PCA).

  • Du skal starte med at hente datasættet ipod_4.txt, der er et datasæt taget med app'en iSeismometer på en Ipod Touch som del af et eksperiment på kurset i 2011.

Spørgsmål 1

Indlæs datasættet. De fire variable er hhv. acceleration langs $x$-, $y$- og $z$-akserne samt tid i sekunder. Plot de tre accelerationskomponenter som funktion af tiden.

Spørgsmål 2

I dette spørgsmål skal du finde de dominerende komponenter, ved at benytte PCA metoden beskrevet afsnit 2 i multivariatstatistik.pdf dokumentet. For at hjælpe dig lidt på vej er spørgsmålet delt op i mindre dele:

Del 1

Transponér input matricen sådan at den er $M \times N$, hvor $M$ svarer til antallet af parametre og $N$ antallet af målinger. Centrér derefter dataen ved først at beregne middelværdien for de fire parametre, og fratræk denne de enkelte komponenter.

Del 2

Beregn kovariansmatricen af den centrerede data, og beregn så egenværdierne og egenvektorerne af den, med den indbyggede funktion i MATLAB. Gem diagonalen af egenværdimatricen i en vektor ($M \times 1$).

Del 3

Sorter egenværdierne efter faldende orden, og gem de indekser som sorteringsmetoden retunerer i en vektor.

Del 4

Sorter egenvektorerne og egenværdierne med indeks-vektoren.

Del 5

Projektér den oprindelige data langs den nye basis (egenvektor matricen).

Spørgsmål 3

Plot hvert komponent af det transformerede datasæt som funktion af tiden. Ved at sammenligne værdierne fra egenvektorne med de fire plots, forklar hvad de enkelte komponenter beskriver.

Spørgsmål 4

(Frivillig) Benyt MATLABs indbyggede PCA rutiner i stedet:

[C, latent, explained] = pcacov(cov(data'))
biplot(egenvec(:,1:2), 'scores', signals(1:2,:)', 'varlabels',datalabels)

Spørgsmål 5

(Frivillig) PCA teknikken afhænger af lineære relationer mellem de forskellige variable. Der findes en anden metode til ikke-lineære data, der benytter det såkaldte "kernel-kneb". I zip-filen medfølger en funktion kaldet "kernelpca_tutorial.m", gentag spørgsmål 4 for resultatet fra funktionen.

Mere info: http://en.wikipedia.org/wiki/Kernel_principal_component_analysis


Samlede løsninger



Personal tools
Namespaces
Variants
Actions
Navigation
Opgaver
Andet
Toolbox
Commercial