EPL451: Data Mining on the Web Lab 9 Παύλος Αντωνίου Γραφείο: B109, ΘΕΕ01 University of Cyprus Department of Computer Science
Μείωση διαστάσεων Dimensionality reduction Από λίστα χρηστών ηλ. ταχυδρομείου του Mahout μετρώντας εμφανίσεις λέξεων-κλειδιών στα emails φαίνεται ότι ο αλγόριθμος Singular Value Decomposition (SVD) είναι ο πιο ευρέως χρησιμοποιούμενος αλγόριθμος ακολουθεί ο k-means 2
SVD: 3 όψεις του ιδίου νομίσματος Μέθοδος μετασχηματισμού συσχετιζόμενων (correlated) μεταβλητών (π.χ. driver behavior features) σε ένα σύνολο ασυσχέτιστων (uncorrelated) που «αποκαλύπτουν» καλύτερα τις σχέσεις μεταξύ των αρχικών δεδομένων Αρχικά δεδομένα: π.χ. σύνολο από οδηγούς με πολλά χαρακτηριστικά που προσδιορίζουν τη συμπεριφορά του (π.χ. υπερβάσεις ορίου, απότομα φρεναρίσματα, μέση ταχύτητα οδήγησης, κτλ.) SVD => απορρίπτει περιττά χαρακτηριστικά, αποκαλύπτει κρυφές συσχετίσεις (χαρακτηριστικά που εμφανίζονται μαζί συχνά) που μπορούν να περιγράψουν καλύτερα τη συμπεριφορά ενός οδηγού, και επιτρέπει ευκολότερη αποθήκευση και επεξεργασία δεδομένων 3
SVD: 3 όψεις του ιδίου νομίσματος Μέθοδος προσδιορισμού και σειριοποίησης (ordering) των διαστάσεων (π.χ. driver behavior features) κατά μήκος των οποίων τα αρχικά δεδομένα παρουσιάζουν την πιο μεγάλη διακύμανση (variation) Σε ποια χαρακτηριστικά (ή συνδυασμούς) υπάρχει η πιο μεγάλη διακύμανση τιμών => πιο σημαντικά διότι πιο δύσκολο να προβλεφθούν οι τιμές τους Όταν προσδιορίσουμε που υπάρχει η μεγαλύτερη διακύμανση, είναι δυνατόν να βρούμε την καλύτερη προσέγγιση (approximation) των αρχικών δεδομένων χρησιμοποιώντας λιγότερες διαστάσεις (με άλλα λόγια, λιγότερα χαρακτηριστικά) 4
Παράδειγμα μείωσης διαστάσεων Έστω δεδομένα (σημεία) 2 διαστάσεων (2D) Η ευθεία (regression line) που τα διαπερνά είναι η καλύτερη προσέγγιση των αρχικών δεδομένων με ένα μονοδιάστατο 1D αντικείμενο (ευθεία) Αν ξέρουμε τη θέση ενός σημείου πάνω στην ευθεία μπορούμε προσεγγιστικά να «ανακαλύψουμε» το αρχικό σημείο 2 διαστάσεων 2 αρχικές διαστάσεις (x, y) 1 τελική διάσταση Καλύτερη ευθεία => η απόσταση μεταξύ των αρχικών σημείων και της ευθείας είναι η ελάχιστη δυνατή 5
m SVD και γραμμική άλγεβρα Ο SVD βασίζεται σε ένα θεώρημα της γραμμικής άλγεβρας το οποίο λέει ότι ένας ορθογώνιος πίνακας Α μπορεί να «προσεγγιστεί» από ένα γινόμενο 3 άλλων πινάκων A mn = U md Σ dd V T dn ορθογώνιος πίνακας U διαγώνιος πίνακας Σ (έχει στοιχεία μόνο στην κύρια διαγώνιο) ανάστροφος ενός πίνακα V n A m n V T d: αριθμός μη-γραμμικώς εξαρτημένων μεταβλητών (χαρακτηριστικών) concepts rank(σ) = rank(a) Οι τιμές (singular values) είναι θετικές & ταξινομημένες σε φθίνουσα σειρά. U Δείτε ανάλυση και παραδείγματα εδώ. 6
Οδηγοί Χαρακτηριστικά Υπερβάσεις ορίου Απότομα φρεναρίσματα Επιταχύνσεις Εμπρόθεσμη παράδοση Θετικά σχόλια Παράδειγμα 1 1 1 0 0 2 2 2 0 0 1 1 1 0 0 5 5 5 0 0 0 0 0 2 2 0 0 0 3 3 0 0 0 1 1 = Πίνακας ομοιότητας οδηγών-προς-concept 0.18 0 0.36 0 0.18 0 0.90 0 0 0.53 0 0.80 0 0.27 x Οι τιμές του πίνακα Σ ονομάζονται ιδιοτιμές (eigenvalues) ή singular values και οι γραμμές του πίνακα V ιδιοδιανύσματα (eigenvectors). Concepts 9.64 0 0 5.29 Κακοί Καλοί Πίνακας x ομοιότητας χαρακτηριστικών -προς-concept 0.58 0.58 0.58 0 0 0 0 0 0.71 0.71 Πίνακας A Πίνακας U Πίνακας V T 8
Οπτική Επισκόπηση Ο 6-διάστατος χώρος των χαρακτηριστικών (1 άξονας ανά χαρακτηριστικό) γίνεται 2-διάστατος (περιγράφεται από τα 2 διανύσματα του πίνακα V) v1 v2 0.58 0.58 0.58 0 0 0 0 0 0.71 0.71 2D latent dimensions space Latent dimensions (κρυφές διαστάσεις) ή singular vectors ή ιδιοδιανύσματα. Οδηγοί που ανήκουν στο concept «καλοί» v2 v1 Οδηγοί που ανήκουν στο concept «κακοί» 9
Υλοποίηση SVD Υλοποίηση σε μεγάλους αραιούς (sparse) πίνακες: SVDPACK (σε Fortran/C) περιέχει διάφορους αλγόριθμους υλοποιημένους από τον Michael Berry SVDLIBC (σε C) http://tedlab.mit.edu/~dr/svdlibc/ Υπολογίζουν τα πρώτα m singular values και vectors SVD συνιστώσες U, Σ και V αποθηκεύονται σε ξεχωριστά αρχεία 10
SVD in Mahout (long command form) <MAHOUT_HOME>/bin/mahout svd command Job-Specific Options: --input (-i) input Path to job input directory. --output (-o) output The directory pathname for output. --numrows (-nr) numrows Number of rows of the input matrix --numcols (-nc) numcols Number of columns of the input matrix --rank (-r) rank Desired decomposition rank (note: only roughly 1/4 to 1/3 of these will have the top portion of the spectrum) --symmetric (-sym) symmetric Is the input matrix square and symmetric? --cleansvd (-cl) cleansvd Run the EigenVerificationJob to clean the eigenvectors after SVD --maxerror (-err) maxerror Maximum acceptable error --mineigenvalue (-mev) mineigenvalue Minimum eigenvalue to keep the vector for --inmemory (-mem) inmemory Buffer eigen matrix into memory (if you have enough!) --help (-h) Print out help --tempdir tempdir Intermediate output directory --startphase startphase First phase to run --endphase endphase Last phase to run 13
SVD in Mahout (short command form) <MAHOUT_HOME>/bin/mahout svd \ --input (-i) <Path to input matrix> \ --output (-o) <The directory pathname for output> \ --numrows (-nr) <Number of rows of the input matrix> \ --numcols (-nc) <Number of columns of the input matrix> \ --rank (-r) <Desired decomposition rank> \ --symmetric (-sym) <Is the input matrix square and symmetric> Μετά το όρισμα --input δίνεται η θέση του αρχείου (στο HDFS) που περιέχει τα διανύσματα (vectors) γράμμή-προςγραμμή του πίνακα εισόδου Α θα σε μορφή SequenceFile<Writable,VectorWritable> preferably SequentialAccessSparseVectors instances vector that only stores non-zero doubles as a pair of parallel arrays one int[] (position), one double[] (value) 14
SVD in Mahout Κάθε διάνυσμα περιέχει --numcols στοιχεία; --numrows είναι ο αριθμός των διανυσμάτων Οι τιμές αυτές χρησιμοποιούνται για την δέσμευση μνήμης των δομών στις οποίες θα αποθηκευτεί ο πίνακας. Μετά την εκτέλεση, ο κατάλογος --output θα περιέχει ένα αρχείο με το όνομα "raweigenvectors" το οποίο θα περιέχει τα ιδιοδιανύσματα (eigenvectors). Ο αλγόριθμος υπολογισμού του SVD στο Mahout (DistributedLanczosSolver) ενδέχεται να παράξει «επιπλέον» ιδιοδιανύσματα, των οποίων οι ιδιοτιμές δεν είναι έγκυρες, οπότε υπάρχει ακόμα ένα βήμα που ξεκαθαρίζει τα σωστά ζεύγη ιδιοτιμών/ιδιοδιανυσμάτων δες επόμενη διαφάνεια. 15
Cleaning the output Αυτό γίνεται με την εντολή «cleansvd» <MAHOUT_HOME>/bin/mahout cleansvd \ --eigeninput <path to raw eigenvectors> \ --corpusinput <path to corpus> \ --output <path to output directory> \ --maxerror <maximum allowed error. Default is 0.5> \ --mineigenvalue <minimum allowed eigenvalue. Default is 0.0> \ --inmemory <true if the eigenvectors can all fit into memory. Default false> 16
Cleaning the output --corpusinput είναι το μονοπάτι αρχείου εισόδου από το προηγούμενο βήμα, --eigeninput είναι το μονοπάτι καταλόγου εξόδου από το προηγούμενο βήμα (<output>/raweigenvectors), --output είναι το επιθυμητό μονοπάτι αρχείου εξόδου (το ίδιο με την svd εντολή). Οι 2 παράμετροι «καθαρίσματος» είναι οι --maxerror (το μέγιστο επιτρεπτό 1-cosAngle (v, A.timesSquared(v)), και --mineigenvalue. Τα ιδιοδιανύσματα που έχουν πολύ μεγάλο σφάλμα ή πολύ μικρή ιδιοτιμή απορρίπτονται. 17
Long command form Και τα 2 βήματα μπορούν να γίνουν με μια εντολή. <MAHOUT_HOME>/bin/mahout svd \ \ --cleansvd "true \ όπως φαίνεται εδώ. Μετά την εκτέλεση, ο κατάλογος εξόδου --output directory θα περιέχει 2 αρχεία: το "raweigenvectors" και το "cleaneigenvectors". 18
Cleaning the output Optional argument: --inmemory, if you have enough memory on your local machine (not on the hadoop cluster nodes!) to load all eigenvectors into memory at once (at least 8 bytes/double * rank * numcols), then you will see some speedups on this cleaning process. Μετά την εκτέλεση, ο κατάλογος --output θα έχει το όνομα "cleaneigenvectors" και θα περιέχει τα σωστά ιδιοδιανύσματα 19
Παράδειγμα 1 Μετατροπή CSV σε αρχείο εισόδου Mahout SVD SequenceFile<Writable,VectorWritable> Κατεβάστε το CSV2SVD.zip Ο πίνακας Α της διαφάνειας 13 βρίσκεται σε μορφή csv (comma separated) στο αρχείο data.csv <row>,<col>,<value>\n 1 1 1 0 0 2 2 2 0 0 1 1 1 0 0 5 5 5 0 0 0 0 0 2 2 0 0 0 3 3 0 0 0 1 1 Δημιουργείστε Maven project με το δοθέν pom.xml και το data.csv και βάλτε μέσα στον κατάλογο src/main/java/com/csdeptucy/app το αρχείο Convert2SVD.java 0,0,1 0,1,1 0,2,1 1,0,2 1,1,2 1,2,2 2,0,1 2,1,1 2,2,1 3,0,5 3,1,5 3,2,5 4,3,2 4,4,2 5,3,3 5,4,3 6,3,1 6,4,1 20
Παράδειγμα 1 Δημιουργείστε το jar file mvn clean install Τρέξτε το πρόγραμμα java -cp target/svd-1.0-snapshot-jarwith-dependencies.jar com.csdeptucy.app.convert2svd data.csv 5 data.seq args[0] input csv file args[1] cardinality, length of row vector (size of cols) args[2] output sequence file 21
Παράδειγμα 1 Αντιγράψτε το sequence file στο HDFS hadoop fs -copyfromlocal data.seq data.seq bin/mahout seqdumper -i data.seq Δείτε τα περιεχόμενα του binary αρχείου Τρέξτε Mahout SVD bin/mahout svd -i data.seq -o svd_output -nr 7 -nc 5 -r 10 -sym "false" -wd temp_svd --cleansvd "true" -mem "false" Δείτε αρχείο εξόδου (που είναι sequence file μορφή binary file) bin/mahout seqdumper -i svd_output/cleaneigenvectors 22
Παράδειγμα 2 Είσοδος: Last FM artist-tags vectors sequence file 41702 artists, 20863 tags Κατεβάστε το sequence file από εδώ http://www.cs.ucy.ac.cy/courses/epl451/labs/lab09/las tfmvectors.zip Αποσυμπιέστε το zip file και αντιγράψτε στο HDFS: hadoop fs -copyfromlocal lastfmvectors lastfmvectors Τρέξτε: bin/mahout svd -i lastfmvectors -o svd_output -nr 41702 -nc 20863 -r 10 -sym "false" -wd temp_svd --cleansvd "true" -mem "false" 23
Sources https://cwiki.apache.org/confluence/display/maho UT/Dimensional+Reduction https://cwiki.apache.org/confluence/display/maho UT/Stochastic+Singular+Value+Decomposition http://www.puffinwarellc.com/index.php/news-andarticles/articles/30-singular-value-decompositiontutorial.html http://bickson.blogspot.com/2011/06/what-aremost-widely-deployed-machine.html Mahout in Action - Book by Sean Owen and Robin Anil, published by Manning Publications, 2011. 24