LCE Kotisivu

S-114.210 Laskennallisen tekniikan ohjelmatyöt

Työ 1: Tilastollisten mallien muodostus ja vertailu

Johdanto

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.

Datat

Työssä on yksi regressio-ongelma ja yksi luokitteluongelma.

Menetelmät

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.

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.

Delve

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.

Esimerkki

Seuraava esimerkki näyttää kaikki vaiheet knn-mallien tekoon ja tulosten keruuseen. Tee muut mallisi vastaavasti.

Ympäristö ja data

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
    
Regressiomalli 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
    
Luokittelumalli letter-datalle

ja 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
    
tulosten tarkastelua Matlabilla

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 %');
    
apuskripti menetelmien ajoon Matlabilla

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/


Tästä sivusta vastaa Aki.Vehtari@hut.fi
Sivua on viimeksi päivitetty 30.05.2003
URL: http://www.lce.hut.fi/teaching/S-114.210/work1/