Mahout
Ida Mele
Introduzione
• Machine Learning
• Data Mining
• Web Mining:
• Web content mining
• Web structure mining
• Web usage mining
Mahout
Pagina 2
Introduzione
• Tecniche di data mining:
• Clustering – apprendimento non
supervisionato
• Classificazione – apprendimento
supervisionato
• Alberi di decisione
• Analisi delle associazioni
• Reti neurali
Mahout
Pagina 3
Clustering
• Raggruppamento di oggetti in cluster.
• Obiettivo: oggetti simili dovranno
appartenere allo stesso cluster.
• Gli algoritmi di clustering raggruppano gli
oggetti considerando la somiglianza tra essi.
• Tale somiglianza è tipicamente misurata
come distanza reciproca tra oggetti.
Mahout
Pagina 4
Clustering
• Il clustering può essere condotto con:
• Metodi aggregativi
• Metodi divisivi
• Possibili clustering:
• esclusivo
• non esclusivo
• partitivo
• gerarchico
Mahout
Pagina 5
Classification
• È una forma di apprendimento supervisionato o
apprendimento con rinforzo.
• Nella classificazione i dati sono divisi in Training set
e Test set.
• Il Training set è utilizzato nella fase di
addestramento per la costruzione del modello. In
questa fase si assume che le istanze
appartengono a classi e la classe di
appartenenza è specificata dall’attributo di
classe.
Mahout
Pagina 6
Classification
• Il Test set viene utilizzato per valutare
l’accuratezza del modello. È importante
che sia diverso dal training set in modo
da evitare stime ottimistiche.
• Il modello realizzato è applicato per la
classificazione delle istanze la cui classe
è ignota.
Mahout
Pagina 7
Mahout: introduzione
• Apache Mahout:
– Librerie scalabili per il machine learning.
– Adatto a grandi data sets.
– Gli algoritmi sono implementati su Apache
Hadoop utilizzando il paradigma
map/reduce.
Mahout
Pagina 8
Mahout: introduzione
• Link utili:
– Homepage: http://mahout.apache.org/
– Wiki:
https://cwiki.apache.org/confluence/display/MAH
OUT/Mahout+Wiki
– Download:
http://www.apache.org/dyn/closer.cgi/mahout/
Mahout
Pagina 9
Mahout: introduzione
• Mahout possiede numerose funzionalità:
–
–
–
–
–
–
–
–
–
–
Mahout
Collaborative Filtering
User and Item based recommenders
K-Means, Fuzzy K-Means clustering
Mean Shift clustering
Dirichlet process clustering
Latent Dirichlet Allocation
Singular value decomposition
Parallel Frequent Pattern mining
Complementary Naive Bayes classifier
Random forest decision tree based classifier
Pagina 10
Installazione
• Scaricare l’ultima release di Mahout (esempio la
0.5).
• Prerequisiti:
– Java JDK 1.6
– Maven 2.0.11 o superiore
(http://maven.apache.org/). Solo se si desidera
installare Mahout a partire dal source code.
Mahout
Pagina 11
Installazione
• Posizionarsi nella directory con il core di Mahout e
digitare:
mvn compile
• In alternativa si può fare direttamente l’installazione.
Posizionarsi nella directory di Mahout e digitare:
mvn install
Verrà generato in core/target/ un file jar il cui nome
conterrà la versione di Mahout. Ad esempio se si
usa la release 0.5 il file sarà: mahout-core-0.5.jar.
Mahout
Pagina 12
Clustering
Clustering of synthetic control data
– Scaricare synthetic_control.data.txt da:
http://archive.ics.uci.edu/ml/databases/synthetic_control/sy
nthetic_control.data
– Copiare l’input nell’HDFS: creare testdata all’interno di
Hadoop e copiarvi i dati scaricati.
• cd $HADOOP_HOME
• bin/hadoop fs -mkdir testdata
• bin/hadoop fs –put
$PATH_DATI/synthetic_control.data.txt testdata
Nota: $HADOOP_HOME è la path della directory di Hadoop, mentre
$PATH_DATI è la path della cartella con il file dati.
Mahout
Pagina 13
Clustering
– Il job Example di Mahout non esiste ed è necessario
crearlo:
• cd $MAHOUT_HOME
• mvn clean install // include tutti gli unit tests
Oppure
• mvn clean install -DskipTests=true // senza gli unit tests
Nota: $MAHOUT_HOME è la root directory di Mahout.
Se tutto è andato a buon fine comparirà: BUILD
SUCCESSFUL, il job verrà generato nella directory
examples/target di Mahout e si chiamerà: mahoutexamples-0.5.job.jar (es. se si usa Mahout 0.5).
Mahout
Pagina 14
Clustering
– In Hadoop settare la JAVA_HOME:
• cd $HADOOP_HOME
• export JAVA_HOME=/Library/Java/Home
– Eseguire il clustering, ad esempio utilizziamo canopy:
• $MAHOUT_HOME/bin/mahout
org.apache.mahout.clustering.syntheticcontrol.canopy.J
ob
– In Hadoop verrà creata la cartella output con il risultato
del clustering. Per visualizzare i file di output utilizzare:
• bin/hadoop fs -lsr output
Mahout
Pagina 15
Output
• Per analizzare l’output dobbiamo prima farne il
dump.
• Utilizziamo il Cluster Dumper di Mahout.
• Il comando clusterdump riceve:
– La directory con il risultato del clustering;
– La directory con i clustered points;
– Il file dove dovrà essere creato il dump
Mahout
Pagina 16
Creazione del dump
• Copiare il risultato del clustering nella cartella examples di
Mahout:
- bin/hadoop fs -get output $MAHOUT_HOME/examples
• Spostarsi in Mahout e dopo aver settato la JAVA_HOME
eseguire il dump con clusterdump:
- cd $MAHOUT_HOME
- export JAVA_HOME=/Library/Java/Home
- bin/mahout clusterdump --seqFileDir
examples/output/clusters-0 --pointsDir
examples/output/clusteredPoints/ --output
examples/output/clusteranalyze.txt
Mahout
Pagina 17
Creazione del dump
• Contenuto di clusteranalyze.txt
– more examples/output/clusteranalyze.txt
C-0{n=21 c=[29.552, 33.073, 35.876, 36.375, 35.118, 32.761, 29.566, 26.983, 25.272,
24.967, 25.691, 28.252, 30.994, 33.088, 34.015, 34.349, 32.826, 31.053, 29.116,
27.975, 27.879, 28.103, 28.775, 30.585, 31.049, 31.652, 31.956, 31.278, 30.719,
29.901, 29.545, 30.207, 30.672, 31.366, 31.032, 31.567, 30.610, 30.204, 29.266,
29.753, 29.296, 29.930, 31.207, 31.191, 31.474, 32.154, 31.746, 30.771, 30.250,
29.807, 29.543, 29.397, 29.838, 30.489, 30.705, 31.503, 31.360, 30.827, 30.426,
30.399] r=[0.979, 3.352, 5.334, 5.851, 4.868, 3.000, 3.376, 4.812, 5.159, 5.596,
4.940, 4.793, 5.415, 5.014, 5.155, 4.262, 4.891, 5.475, 6.626, 5.691, 5.240, 4.385,
5.767, 7.035, 6.238, 6.349, 5.587, 6.006, 6.282, 7.483, 6.872, 6.952, 7.374, 8.077,
8.676, 8.636, 8.697, 9.066, 9.835, 10.148, 10.091, 10.175, 9.929, 10.241, 9.824,
10.128, 10.595, 9.799, 10.306, 10.036, 10.069, 10.058, 10.008, 10.335, 10.160,
10.249, 10.222, 10.081, 10.274, 10.145]}
Weight: Point:
1.0: [28.781, 34.463, 31.338, 31.283, 28.921, 33.760, 25.397, 27.785, 35.248,
27.116, 32.872, 29.217, 36.025, 32.337, 34.525, 32.872, 34.117, 26.524, 27.662,
26.369, 25.774, 29.270, 30.733, 29.505, 33.029, 25.040, 28.917, …
Mahout
Pagina 18
Visualizzazione
Visualizing Sample Clusters
• Spostarsi nella sottocartella examples di mahout:
– cd examples
• Eseguire il DisplayClustering:
– mvn -q exec:java Dexec.mainClass=org.apache.mahout.clustering.display.Dis
playClustering
Il risultato della visualizzazione è il dataset random originale con
delle ellissi semi-illustrative.
Mahout
Pagina 19
DisplayClustering: risultato
Mahout
Pagina 20
DisplayCanopy: risultato
mvn -q exec:java Dexec.mainClass=org.apache.mahout.clustering.display.DisplayCanopy
Mahout
Pagina 21
DisplayMeanShift: risultato
mvn -q exec:java Dexec.mainClass=org.apache.mahout.clustering.display.DisplayMeanShift
Mahout
Pagina 22
Classification
Classificare un dump di dati da Wikipedia
utilizzando Naive Bayes.
• Il Wikipedia dump è diviso in chunk e ognuno di
essi è ulteriormente diviso per paese.
• A partire da queste suddivisioni si effettua il training
del classificatore, il quale dovrà predire il paese di
provenienza dei nuovi articoli (articoli mai visti, di
cui non si conosce la provenienza).
• Scaricare e scompattare il dump di Wikipedia:
http://download.wikimedia.org/enwiki/latest/enwikilatest-pages-articles.xml.bz2
-- Attenzione: sono circa 8GB -Mahout
Pagina 23
Classification
• Creare in examples di Mahout la cartella temp e
copiarvi il file enwiki-latest-pages-articles10.xml.
• Dividere i dati:
– bin/mahout wikipediaXMLSplitter –d
examples/temp/enwiki-latest-pages-articles10.xml
-o wikipedia/chunks -c 64
• Il risultato verrà fatto nell’HDFS, la lista di file la si
può visualizzare con il comando:
– hadoop fs -ls wikipedia/chunks
Mahout
Pagina 24
Classification
• Dividere i dati in base ai paesi:
– bin/mahout wikipediaDataSetCreator -i
wikipedia/chunks -o wikipediainput –c
/examples/src/test/resources/country.txt
• Training:
– bin/mahout trainclassifier -i wikipediainput -o
wikipediamodel
• Test:
– bin/mahout testclassifier -m wikipediamodel -d
wikipediainput
Mahout
Pagina 25
Formato Vector
Clustering e classificazione dei propri dati.
• Per prima cosa è necessario convertire i prorpi dati
nel formato Vector di Mahout.
• È possibile creare vettori da:
– Indice in formato Lucene,
– Directory contenente documenti,
– File in formato ARFF
Mahout
Pagina 26
Formato Vector
Creare vettori da file di testo.
• Mahout mette a disposizione delle utilities per generare
vettori da cartelle con file di testo. Prima di creare il
vettore è necessario convertire i documenti nel formato
SequenceFile.
– bin/mahout seqdirectory --input <PARENT DIR WHERE
DOCS ARE LOCATED> --output <OUTPUT
DIRECTORY> <-c <CHARSET NAME OF THE INPUT
DOCUMENTS> {UTF-8|cp1252|ascii...}> <-chunk <MAX
SIZE OF EACH CHUNK in Megabytes> 64> <-prefix
<PREFIX TO ADD TO THE DOCUMENT ID>>
Mahout
Pagina 27
Formato Vector
Creare vettori da file di testo.
• Una volta fatta la conversione si può creare il vettore:
– bin/mahout seq2sparse -i <PATH TO THE
SEQUENCEFILES> -o <OUTPUT DIRECTORY WHERE
VECTORS AND DICTIONARY IS GENERATED> <-wt
<WEIGHTING METHOD USED> {tf|tfidf}><-chunk <MAX
SIZE OF DICTIONARY CHUNK IN MB TO KEEP IN
MEMORY> 100> <-a <NAME OF THE LUCENE
ANALYZER TO TOKENIZE THE DOCUMENT>
org.apache.lucene.analysis.standard.StandardAnalyzer>
<--minSupport <MINIMUM SUPPORT> 2> <--minDF
<MINIMUM DOCUMENT FREQUENCY> 1> <-maxDFPercent <MAX PERCENTAGE OF DOCS FOR DF.
VALUE BETWEEN 0-100> 99> <--norm <REFER TO L_2
NORM ABOVE>{INF|integer >= 0}>"<-seq <Create
SequentialAccessVectors>{false|true required for running
some algorithms(LDA,Lanczos)}>"
Mahout
Pagina 28
Formato Vector
Creare vettori da file ARFF.
• Il formato ARFF di Weka può essere convertito
utilizzando: org.apache.mahout.utils.arff.Driver
• Usage:
[--input <input> --output <output> --max <max number of
vectors> --help --dictOut <dictOut>--outputWriter
<outputWriter> --delimiter <delimiter>]
• Esempio, creare la directory arff_data con un po’ di file
.arff:
– bin/mahout arff.vector --input $PATH_ARFF/arff_data/
--dictOut examples/output/dict.txt --output
examples/output/convert
Mahout
Pagina 29