![]() |
S-114.210 Laskennallisen tekniikan ohjelmatyöt |
Työssä on tarkoituksena tutustua epälineaaristen tilastollisten mallinnusmenetelmien vertailuun DELVE-ympäristön avulla ja samalla saada lisää tuntumaa erilaisista malleista ja niiden käytöstä. Esitietoina olisi hyvä olla S-114.200 Laskennallisen tekniikan erikoiskurssi tai vastaavat tiedot.
DELVE:n avulla voidaan helpommin suoritta menetelmien vertailua ajamalla menetelmiä samoilla datoilla ja eri kokoisilla opetusaineistoilla. Delven manuaalin lukeminen ei ole välttämätöntä, mutta helpottaa työn tekemistä.
Malleja ei tarvitse itse toteuttaa (sallitua se on), vaan
voit käyttää valmiita ohjelmia ja rutiineja. Matlab-rutiinien
kanssa voi pientä Matlab-skriptien koodausta tarvita.
Delve-ympäristö on valmiiksi asennetuu ATK-keskuksen
alpha-koneisiin hakemistoon /p/edu/s-114.210/delve
(hakemistosta löytyy myös Delven manuaalista tiivistetty
versio, jossa 2 sivua per A4-arkki).
Työselostuksessa kuvataan lyhyesti (sen verran, mistä käy ilmi, että ymmärretty mitä tehty) valitut menetelmät ja käytetyt parametrit sekä perustellaan menetelmien ja parametrien valintaa lyhyesti. Selostuksessa verrataan myös eri menetelmien suorituskykyä eri kokoisilla opetusaineistoilla ja keskenään. Pohdi myös miksi tulokset ovat sellaisia kuin ovat. Tulokset tulee esittää selkeästi. Ohjeen loppupuolella on esimerkkejä kuvista, joita selostuksessa voi käyttää.
Tulosten vertailua varten on valmiiksi muutamia esimerkki-skriptejä Matlabille. Tulosten vertailuihin myös pohdintaa siitä miksi käyteyt menetelmät tuottavat toisiinsa verrattuna saatuja tuloksia.
Esimerkki vastaavasta syvällisemmästä vertailusta on Radford Nealin Assessing relevance determination methods using DELVE.
Työssä on yksi regressio-ongelma ja yksi luokitteluongelma.
Tehtävänä on tehdä regressiomalli asuntojen mediaanihinnasta
eri asuinalueilla Bostonissa. Data on USA:n
väestölaskennasta. Tässä työssä tehdään malli vain
osatehtävälle price.
Tehtävänä on tehdä malli, joka luokittelee kirjainten
kuvia. Syötteet ovat valmiita tilastollisia piirteitä
kuvista. Ongelman osatehtävä on recog.
Huomaa, että luokka (kirjain) on koodattu numerolla 0-25
(jotkut mallit voivat tarvita sopivan muunnoksen).
Ilmoita tulokset molemille ongelmille vähintään neljällä seuraavista malleista. Voit käyttää myös muita toteutuksia kuin alla on mainittu. Alla mainitut ohjelmat ja Matlab-toolboxit on asenettu ATK-keskuksen jalokiviin.
regressiota varten on knn-cv-1-ohjelma
hakemistossa /p/edu/s-114.210/knn-cv-1/
luokittelua varten on knn-class-1-ohjelma
hakemistossa
/p/edu/s-114.210/knn-class-1/
knn-cv-1 ja knn-class-1 valitsevat K:n
Leave-one-out-ristiinvalidoinilla ja ovat nopeita ja
helppokäyttöisiä.
Regularisoidun lineaarimallin voi tehdä helposti esim. Mark J. L. Orr:in Matlab toolboxilla Matlab Routines for Subset Selection and Ridge Regression in Linear Neural Networks, joka on erittäin havainnollinen ja selkeä Matlab-paketti lineaariseen sovitukseen. RBF:n suhteen rajoittunut - ei sisällä piiloyksiköiden paikan tai leveyden optimointia, vaan regressorit (piiloyksiköt) valitaan annetusta joukosta kiinteitä kantafunktioita.
Toolbox on hakemistossa
/p/edu/s-114.210/matlab/rbf/ ja sen saa
Matlabissa käyttöön komennolla addpath
/p/edu/s-114.210/matlab/rbf/.
Matlab-rutiinien manuaali (postscript) löytyy
hakemistosta
/p/edu/s-114.210/matlab/rbf/doc/. Samasta
hakemistosa löytyy Introduction to RBF Networks,
joka on hyvä intro lineaarisiin RBF-verkkoihin ja niiden
regularisointiin. Kannattaa lukea ennen kuin käyttää
yllä mainittua pakettia.
Katso lineaarimallit.
/p/edu/s-114.210/matlab/-hakemistossa on
Matlab-funktiot cverror.m,
cvsplit.m ja tlm2wd.m.
Esim. Matlabin Neural Network Toolbox 3.0
Bishopin ja Nabneyn Netlab toolbox
Matlabille.
Löytyy hakemistosta /p/edu/s-114.210/matlab/netlab/
Matlabissa käyttöön komennolla
addpath /p/edu/s-114.210/matlab/netlab/
Katso tiedostoja demev1.m ja
evidence.m. Huomaa myös
/p/edu/s-114.210/matlab/netlab/doc/index.htm.
Bishopin ja Nabneyn Netlab toolbox
Matlabille.
Löytyy hakemistosta /p/edu/s-114.210/matlab/netlab/
Matlabissa käyttöön komennolla
addpath /p/edu/s-114.210/matlab/netlab/
Katso tiedostoja demhmc3.m
hmc.m. Huomaa myös
/p/edu/s-114.210/matlab/netlab/doc/index.htm.
Vaihtoehtoisesti voi käyttää Radford
Nealin Flexible
Bayesian Modeling-ohjelmistoa joka löytyy hakemistosta
/p/edu/s-114.210/fbm/. Dokumentointi on
/p/edu/s-114.210/fbm/doc/index.html ja mallia
voi katsoa hakemistoista
/p/edu/s-114.210/mlp-mc-[34] ja
/p/edu/s-114.210/fbm/ex-netgp.
Voi käyttää esim. Radford
Nealin Flexible
Bayesian Modeling-ohjelmistoa joka löytyy hakemistosta
/p/edu/s-114.210/fbm/. Dokumentointi on
/p/edu/s-114.210/fbm/doc/index.html ja mallia
voi katsoa hakemistosta
/p/edu/s-114.210/fbm/ex-netgp.
Vertailupohjana on base-1 menetelmä, joka regresiossa arvaa keskiarvolla (neliösummavirhe S) ja luokittelussa arvaa luokkaa jota on eniten (zero-one virhe Z). Vertaa tuloksiasi myös tätä menetelmää vasten. base-1:n tulokset on valmiiksu ajettu, käytä Delven komentoja tulosten lukemiseen.
Jotta Delven komennot toimisivat oikein pitää asettaa joitakin ympäristöasetuksia, jotka on helpointa asettaa kommennolla (tcsh/csh)
source /p/edu/s-114.210/delve/delve_env.csh
Tässä työssä tarvittavat Delven oleelliset komennot ovat
mlinkdata
minfo
dinfo
mloss
mstats
mstats2asc
minfo, dinfo, mloss ja
mstats ovat dokumentoitu Delven manuaalissa.
Levytilan säästämiseksi (census-house 48MB ja letter 15MB)
datat vain linkitetään komennolla mlinkdata
(normaalisti Delve kopioi datat mgendata-komennolla).
Ajan säästämiseksi mstats2asc-komennolla voi
tehdä ascii-tiedoston, joka sisältää tarpeelliset mstats-komennon
tuottamat tiedot riveittäin yhden prototehtävän kaikille eri
kokoisille opetusainestoille. Tämä helpottaa tietojen siirtoa
Matlabiin kuvien piirto varten. Katso mstats2asc
-h.
Seuraava esimerkki näyttää kaikki vaiheet knn-mallien tekoon ja tulosten keruuseen. Tee muut mallisi vastaavasti.
asetetaan ympäristö
source /p/edu/s-114.210/delve/delve_env.csh
luodaan kotihakemiston alle delve-hakemisto
mkdir ~/delve
luodaan delve-hakemiston alle
methods-hakemisto
mkdir ~/delve/methods
luodaan methods-hakemiston alle
knn-hakemisto
mkdir ~/delve/methods/knn
linkitetään boston ja letter
datat
cd ~/delve/methods/knn
mlinkdata boston
mlinkdata letter
boston-datalle
ajetaan knn boston-datan
price-prototehtävälle
cd ~/delve/methods/knn/boston/price
ajot voi tehdä käsin yksitellen, mutta tässä malli skriptistä joka
tekee kerralla enemmän. Tiedostoihin cguess.[0-n] talletetaan
menetelmän ennusteet. Samalla ajetaan
mloss-komento joka laskee kustannukset.
#!/bin/sh
PATH=$PATH:/p/edu/s-114.210/knn-cv-1/bin
export PATH
for d in std.*
do
cd $d
j=0
for train in train.*
do
nice -10 knn-cv-1 $j
j=`expr $j + 1`
done
mloss -l S
cd ..
done
yksittäisiä tuloksia voi tarkastella
mstats-komennolla
cd ~/delve/methods/knn/boston/price/std.32
mstats -l S
tuloksia voi vertailla muihin menetelmiin
mstats -l S -c base-1
yhteenvetona datan ja prototehtävän tulokset kaiken kokoisilla opetusaineistoilla tekstitiedostoon, joka helppo lukea Matlabiin
mstats2asc knn boston price S > E.txt
letter-datalleja vastaavsti samalla tavalla tulokset letter-datan
recog-prototehtävälle
cd ~/delve/methods/knn/letter/recog
ajot voi tehdä käsin yksitellen, mutta tässä malli skriptistä joka
tekee kerralla enemmän. Tiedostoihin cguess.[0-n] talletetaan
menetelmän ennusteet. saman tien ajetaan
mloss-komento joka laskee kustannukset.
#!/bin/sh
PATH=$PATH:/p/edu/s-114.210/knn-class-1/bin
export PATH
for d in std.*
do
cd $d
j=0
for train in train.*
do
nice -10 knn-class-1 -t $train -m l -k 20 -c cguess.$j -p prob.$j test.$j
j=`expr $j + 1`
done
mloss -l Z
cd ..
done
yksittäisiä tuloksia voi tarkastella
mstats-komennolla
cd ~/delve/methods/knn/letter/recog/std.390
mstats -l Z
tuloksia voi vertailla muihin menetelmiin
mstats -l Z -c base-1
yhteenvetona datan ja prototehtävän tulokset kaiken
kokoisilla opetusaineistoilla tekstitiedostoon, joka helppo
lukea Matlabiin
mstats2asc knn letter recog Z > E.txt
Matlabissa tuloksia voi esittää esim.
logxerrbar-funktion avulla.
Luetaan aikaisemmin tehty yhteenvetotiedosto.
ja piirretään kuva yhden menetelmän tuloksista (näytetään
standardoidut virheet ja hajonnat)
load E.txt -ascii
logxerrbar(E(:,1)',E(:,3)',E(:,5)')
Luetaan usemman menetelmän tulokset ja tehdään kuva
(näytetään standardoidut virheet ja hajonnat)
(file2var- ja logxerrbar-funktiot
löytyvät hakemistosta /p/edu/s-114.210/matlab)
figure(1)
clear E
E(1,:,:)=file2var('/p/edu/s-114.210/delve/methods/base-1/boston/price/E.txt');
E(2,:,:)=file2var([getenv('HOME') '/delve/methods/knn/boston/price/E.txt']);
logxerrbar(E(:,:,1)',E(:,:,3)',E(:,:,5)')
set(gca,'Ylim',[0 1.1]);
legend('base-1','knn',3)
title('Boston price');
xlabel('Training set size')
ylabel('Standardized error');
figure(2)
clear E
E(1,:,:)=file2var('/p/edu/s-114.210/delve/methods/base-1/letter/recog/E.txt');
E(2,:,:)=file2var([getenv('HOME') '/delve/methods/knn/letter/recog/E.txt']);
logxerrbar(E(:,:,1)',E(:,:,2)'*100,E(:,:,4)'*100)
set(gca,'Ylim',[0 100]);
legend('base-1','knn',3)
title('Letter recoginition');
xlabel('Training set size')
ylabel('Error %');
Tässä esimerkkinä matlab-skripti, jolla base-1
tulokset on tehty.
method='base-1';
for i=[32 64 128]
is=num2str(i);
cd(['~/delve/methods/' method '/boston/price/std.' is]);
for j=0:7
js=num2str(j);
if exist(['train.' js])
p=file2var(['train.' js]);
pp=file2var(['test.' js]);
% v vaihda tähän haluamasi menetelmä v
guessS=zeros(length(pp),1)+mean(p(:,end));
% ^ vaihda tähän haluamasi menetelmä ^
fid = fopen(['cguess.S.' js],'w');
fprintf(fid,'%f\n',guessS);
fclose(fid);
end
end
end
for i=[390 780 1560]
is=num2str(i);
cd(['~/delve/methods/' method '/letter/recog/std.' is]);
for j=0:5
js=num2str(j);
if exist(['train.' js])
p=file2var(['train.' js]);
pp=file2var(['test.' js]);
% v vaihda tähän haluamasi menetelmä v
for k=1:26
s(k)=sum(p(:,end)==k);
end
[mm,mi]=max(s);
guessZ=zeros(length(pp),1)+mi;
% ^ vaihda tähän haluamasi menetelmä ^
fid = fopen(['cguess.Z.' js],'w');
fprintf(fid,'%d\n',guessZ);
fclose(fid);
end
end
end
Jos tässä ohjeessa on virheitä, puutteita tai epäselvyyksiä tai /p/edu/s-114.210-hakemistoon asennetujen ohjelmien käytössä on ongelmia ota yhteyttä Aki.Vehtari@hut.fi, muissa kursiin liittyvissä asioissa ja ongelmissa ota yhteyttä kurssin vastaavaan opettajaan:
Jouko Lampinen
Teknillinen korkeakoulu
Laskennallisen tekniikan laboratorio
PL 9203, 02015 TKK
puh: 451 4827, kän: 050 560 4827
email:
Jouko.Lampinen@hut.fi
WWW:
http://www.hut.fi/~jlampine/