Analisi dei dati ed estrazione della conoscenza

CLEI/S. 6 CFU.

A.A. 2009/2010

prova pratica del 25 Novembre 2010


Modalità di svolgimento

La prova pratica è strettamente individuale. Qualora venissero consegnati degli elaborati simili, più di quanto è lecito attendersi da soluzioni indipendenti allo stesso problema, gli stessi verrebbero annullati. Non saranno ammesse motivazioni del tipo "abbiamo già provato a risolvere un esercizio simile, per questo i nostri compiti sono uguali". Se davvero avete scritto del codice R che risolve un esercizio simile, e lo volete utilizzare come base di partenza per questo, siete liberissimi di farlo, purché consegniate entro 15 minuti dall'inizio dell'esame il suddetto codice al docente.

Per la consegna dell'elaborato, utilizzare il modulo web disponibile al sito di sottomissione on-line. L'invio del file deve avvenire entro le ore 13:00, secondo l'orario indicato nel sito stesso.

Testo del compito

Il compito consiste di due esercizi. Il voto massimo che si può ottenere risolvendo correttamente il primo esercizio è 18, mentre il voto massimo per una corretta soluzione di entrambi gli esercizi è 30.

  1. Scrivere le funzioni dist.man e dist.eucl che calcolano rispettivamente la distanza di Manhattan e la distanze Euclidea di due vettori in input. Ad esempio:
    > dist.man(c(1,1),c(4,5)) 
    [1] 7
    > dist.eucl(c(1,1),c(4,5))
    [1] 5
          
  2. Scrivere le funzioni dist.sing.link e dist.mean che prendono in input una funzione distanza tra punti (come dist.man e dist.eucl) e due matrici con stesso numero di colonne. Ogni matrice viene vista come un insieme di punti: ogni riga è un punto, le colonne sono le coordinate dei punti. Ad esempio
    1   1
    2   4
    
    rappresenta un insieme di due punti, uno di coordinate (1,1), l'altro di coordinate (2,4). Le funzioni dist.sing.link e dist.mean devono calcolare la distanza tra gli insiemi di punti rappresentati dalle due matrici, usando rispettivamente il metodo della distanza minima (single link) e di quella media (average link). Ad esempio:
    > a <- rbind(c(1,1),c(2,2))
    > b <- rbind(c(1,1),c(4,5))
    > dist.sing.link(dist.man,a,b)
    [1] 0
    > dist.mean(dist.man,a,b)
    [1] 3.5
    
    Si consiglia di utilizzare la funzione apply o il comando for.