ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής ΕΠΛ 451 Εξόρυξη Δεδομένων στον Παγκόσμιο Ιστό I. Στόχος ΑΣΚΗΣΗ 2 Ομαδοποίηση (Clustering) και Μείωση Διαστάσεων (Dimensionality Reduction) Διδάσκων: Γιώργος Πάλλης Υπεύθυνος Εργασίας: Παύλος Αντωνίου Ημερομηνία Ανάθεσης: Τετάρτη 01/03/17 Ημερομηνία Παράδοσης: Τετάρτη 29/03/17 και ώρα 23:59 (28 μέρες) (η λύση να υποβληθεί σε zip μέσω του Moodle) http://www.cs.ucy.ac.cy/courses/epl451 Ο στόχος της άσκησης είναι η διερεύνηση και η εξοικείωση με τις έννοιες της ομαδοποίησης (clustering) και της μείωσης διαστάσεων (dimensionality reduction). Πιο συγκεκριμένα, θα δείτε πότε και πως χρησιμοποιείται η ομαδοποίηση πάνω σε μικρά datasets. Εκτός από τα μικρά datasets, θα κτίσετε και ένα μεγαλύτερο συλλέγοντας πληροφορίες από τους φίλους σας στο Facebook για να μπορέσετε εν συνεχεία να τους ομαδοποιήσετε σε διάφορες ομάδες (clusters) π.χ. ως προς τα ενδιαφέροντά τους. Στο τέλος της εργασίας, θα χρησιμοποιήσετε τεχνικές μείωσης διαστάσεων με στόχο την αναγνώριση χειρόγραφων αριθμών (0-9) από το γνωστό (στην περιοχή της εξόρυξης δεδομένων) dataset με το όνομα MNIST. II. Περιγραφή Στην άσκηση αυτή θα υλοποιήσετε 5 διαφορετικές φάσεις που αναλύονται πιο κάτω. Η κάθε φάση απαρτίζεται από ένα σύνολο μικρότερων εργασιών (tasks). Σας δίνεται ένα αρχείο με το όνομα epl451-as2.py το οποίο περιέχει κώδικα με εκτεταμένα σχόλια για όλες τις φάσεις και εργασίες που καλείστε να ασχοληθείτε. Σε όσα σημεία υπάρχει το None ή Pass θεωρείται ως ασυμπλήρωτος κώδικας, και με βάση τα σχόλια θα συμπληρώνετε αναλόγως. Τα αναμενόμενα αποτελέσματα κάθε εργασίας παρουσιάζονται πιο κάτω. Φάση 1: Αξιολόγηση του αλγόριθμου k-means πάνω σε διαφορετικά datasets Στη φάση αυτή θα διερευνήσετε πως ο αλγόριθμος k-means συμπεριφέρεται πάνω σε datasets με διαφορετική δομή. Θα διερευνήσετε επίσης διάφορους τρόπους τροποποίησης του αλγορίθμου k- means και θα μάθετε πώς να βρείτε μια καλή αρχική τιμή και μια καλή τελική τιμή για το k. Εργασία 1a: Στην 1 η εργασία, θα συμπληρώσετε τον κώδικα της συνάρτησης part1_plot_clustering() για να εκτυπώνει γραφικές παραστάσεις τύπου scatter.
Εργασία 1b: Στη 2 η εργασία, θα καλέσετε τον αλγόριθμο k-means με διαφορετικές παραμέτρους. Για την πρώτη κλήση του k-means θα τυπώσετε τα centroids ως ακολούθως: [[ 5.62930751-4.16861737] [-4.25402493 5.92936468] [-1.14986255 5.51731899] [-5.92179508 2.2297414 ]] και επιπλέον θα καλέσετε τη συνάρτηση της εργασίας 1a για να τυπώσει τις πιο κάτω 3 γραφικές. Εργασία 1c: Στην 3 η εργασία θα καλέσετε τον αλγόριθμο k-means με διαφορετικές παραμέτρους (μεγαλύτερη διακύμανση) και θα καλέσετε τη συνάρτηση της εργασίας 1a για να τυπώσει τις πιο κάτω 3 γραφικές. Εργασία 1d: Στην 4 η εργασία θα καλέσετε τον αλγόριθμο k-means με διαφορετικές παραμέτρους (περισσότερα clusters) και θα καλέσετε τη συνάρτηση της εργασίας 1a για να τυπώσει τις πιο κάτω 3 γραφικές.
Εργασία 1e: Στην 5 η εργασία θα καλέσετε τον αλγόριθμο k-means με διαφορετικές παραμέτρους (περισσότερα clusters και μεγαλύτερη διακύμανση) και θα καλέσετε τη συνάρτηση της εργασίας 1a για να τυπώσει τις πιο κάτω 3 γραφικές. Εργασία 1f: Στην 6 η εργασία θα καλέσετε τον αλγόριθμο k-means πάνω σε διαφορετικού είδους dataset και θα καλέσετε τη συνάρτηση της εργασίας 1a για να τυπώσει τις πιο κάτω 3 γραφικές. Εργασία 1g: Στην 7 η εργασία θα καλέσετε τον αλγόριθμο k-means πάνω σε διαφορετικού είδους dataset και θα καλέσετε τη συνάρτηση της εργασίας 1a για να τυπώσει τις πιο κάτω 3 γραφικές. Εργασία 1h: Στην εργασία αυτή θα εμπλακείτε σε μια πολύ ενδιαφέρουσα εφαρμογή του αλγορίθμου k-means για συμπίεση εικόνας. Θα δείτε μια πιο εξειδικευμένη τεχνική στη φάση 5 που ασχολείται με τη μείωση διαστάσεων. Η ιδέα εδώ είναι υπερβολικά απλή. Υποθέστε ότι έχουμε μια εικόνα που έχει αρκετά χρώματα που επιθυμούμε να συμπιέσουμε. Ένας απλός τρόπος είναι να μειώσουμε τον αριθμό των χρωμάτων. Μια τεχνική συμπίεσης που χρησιμοποιείται από τον τύπο JPG καλείται run length
encoding (RLE). Αν υποθέσουμε ότι έχουμε ένα κείμενο όπως το AAAAAAAABB, η τεχνική RLE το συμπιέζει σαν 8A2B. Διαισθητικά, εικόνες με λιγότερα χρώματα θα έχουν περισσότερα όμοια συνεχόμενα χρώματα (longer runs) και κατά συνέπεια μεγαλύτερη συμπίεση. Υποθέστε ότι τρέχουμε τον αλγόριθμο k-means με είσοδο μια εικόνα χρησιμοποιώντας μια σχετικά μικρή τιμή του k (number of clusters), όπου τα δεδομένα (data points) θεωρείται ότι είναι τα pixels. Για παράδειγμα, υποθέστε ότι αποφασίζουμε να χρησιμοποιήσουμε μόνο 64 διαφορετικά χρώματα. Τότε, τρέχουμε τον αλγόριθμο k-means με k=64. Τα κέντρα των clusters (centroids) που παράγονται αντιστοιχούν στα πιο «αντιπροσωπευτικά» χρώματα της εικόνας. Έτσι αντικαθιστούμε το χρώμα κάθε pixel της εικόνας με το χρώμα του centroid του cluster στο οποίο ανήκει το pixel. Με τον τρόπο αυτό, κβαντίζουμε την εικόνα για να έχει ακριβώς k χρώματα. Δείτε ένα πρόχειρο υπολογισμό του κέρδους συμπίεσης που επιτυγχάνεται. Έστω ότι χρησιμοποιούμε την παλέτα RGB. Στην παλέτα αυτή, κάθε pixel προκύπτει ως συνδυασμός 3 χρωματικών συνιστωσών (Red, Green, Blue) και κάθε χρωματική συνιστώσα απεικονίζεται με 8 bits. Κατά συνέπεια κάθε pixel της αρχικής εικόνας αποτελείται από 24 bits και μπορεί να παρασταθεί από 2 24 διαφορετικά χρώματα. Αν η εικόνα έχει πλάτος x ύψος = 128 128, τότε χρειαζόμαστε 128 128 24 bits. Αν υποθέσουμε ότι συμπιέζαμε την εικόνα χρησιμοποιώντας μόνο 16 διαφορετικά χρώματα (περνώντας την από τον k-means με k=16), τότε θα χρειαζόμασταν μόνο 4 bits (16=2 4 ) για να απεικονίσουμε το κάθε pixel και η εικόνα θα χρειαζόταν μόνο 128 128 4 bits μείωση στο 1/6 του αρχικού μεγέθους!! Στην εργασία αυτή κάνουμε μια απλή επίδειξη των πιο πάνω. Αρχικά θα τυπωθούν οι διαστάσεις της εικόνας, ο αριθμός των pixels (273280=427x640) και το βάθος (depth) του κάθε pixel που είναι 3 χρωματικές συνιστώσες (RGB). Η αρχική εικόνα περιέχει 83312 διαφορετικά χρώματα. Width=427, Height=640, Depth=3 In 2-D the shape is (273280, 3)
Στη συνέχεια θα συμπληρώσετε τον κώδικα που καλεί τον αλγόριθμο k-means με τιμές k=16, 32, 64, 128 έτσι ώστε να μπορέσετε να παράξετε με χρήση της δοθείσας συνάρτησης recreate_image() συμπιεσμένες εικόνες με τον αντίστοιχο αριθμό χρωμάτων. Τα αποτελέσματα της διαδικασίας παρουσιάζονται πιο κάτω. Μια σημαντική παρατήρηση είναι ότι ο χρόνος που δαπανάται για την ολοκλήρωση της διαδικασίας είναι σχετικά μεγάλος. Σε διπύρηνο υπολογιστή Intel Core i5 520M 2.4GHz και 8GB RAM χρειάστηκαν περίπου 29 λεπτά (1748 δευτερόλεπτα). Handling k = 16 Handling k = 32 Handling k = 64 Handling k = 128 Clustering over entire data took 1748.5600888729095 seconds Όπως μπορείτε να δείτε, παρόλο που στα 16 χρώματα η ποιότητα της συμπιεσμένης εικόνας είναι χαμηλή, η εικόνα των 128 χρωμάτων ομοιάζει με την αρχική εικόνα που είναι των 83312 χρωμάτων. Εργασία 1i: Λόγω του ότι η διαδικασία που ακολουθήθηκε στην προηγούμενη εργασία ήταν χρονοβόρα, υπάρχει ανάγκη για εναλλακτική λύση. Στην εργασία αυτή θα ακολουθήσετε μια τακτική που χρησιμοποιείται στην επεξεργασία εικόνας. Αντί να τρέξετε τον αλγόριθμο k-means πάνω σε όλα τα pixels της αρχικής εικόνας, μπορείτε να επιλέξετε ένα υποσύνολο (δείγμα) των pixels. Πιο συγκεκριμένα αν λάβετε ένα δείγμα των 1000 pixels (0.3% των 273280 pixels που υπάρχουν συνολικά στην εικόνα) μπορείτε να επιτύχετε πολύ μεγάλη μείωση στο χρόνο (~ 6 δευτερόλεπτα). Handling k = 16 Handling k = 32 Handling k = 64 Handling k = 128 Clustering with Sampling took 5.54399037361145 seconds
Εργασία 1j: Μια από τις πιο σημαντικές παραμέτρους στον αλγόριθμο k-means είναι το k και αποτελεί ανοικτό πρόβλημα η εύρεση της βέλτιστης τιμής του. Κάποιες φορές, η τιμή του k μπορεί να είναι γνωστή λόγω της φύσεως του προβλήματος. Για παράδειγμα, αν θέλουμε να ομαδοποιήσουμε εικόνες που απεικονίζουν μονοψήφιους χειρόγραφους αριθμούς (βλέπε MNIST dataset) θα χρησιμοποιήσουμε k=10 διότι υπάρχουν 10 ψηφία (0-9). Εντούτοις, δοθέντος ενός αυθαίρετου dataset (ιδίως αν είναι πολλαπλών διαστάσεων), είναι πολύ δύσκολο να βρούμε μια καλή τιμή για το k. Υπάρχουν πολλές πολύπλοκες στατιστικές μέθοδοι για την εύρεση του k. Δείτε εδώ για μια σχετική περίληψη. Παρόλα αυτά, σχεδόν όλες οι μέθοδοι εμπεριέχουν κάποιες κρυφές υποθέσεις και γι αυτό μπορούν να θεωρηθούν μόνο σαν ευριστικές. Η εύρεση μιας καλής τιμής για το k είναι ένα πολύ δύσκολο πρόβλημα. Σε αυτή την εργασία, θα ασχοληθείτε με 3 δημοφιλείς και σχετικά απλές τεχνικές: 1. Μέθοδος Elbow (SSQ) 2. Gap Statistic 3. Gap Statistic differences Στον υπολογισμό του gap statistic θα χρησιμοποιήσετε μια διαφορετική υλοποίηση του k-means από το scipy.vq (vector quantization) module. Μπορείτε να διαβάσετε γι αυτό στο http://docs.scipy.org/doc/scipy/reference/cluster.vq.html. Ο κώδικας υλοποίησης των πιο πάνω μεθόδων δίνεται. Ο στόχος της εργασίας είναι να έρθετε σε επαφή με αυτές τις μεθόδους και να γνωρίζετε την ύπαρξή τους. Τα αποτελέσματα της εργασίας αυτής φαίνονται πιο κάτω.
Φάση 2: Αξιολόγηση του αλγόριθμου ιεραρχικής ομαδοποίησης (hierarchical clustering) πάνω σε ποικίλα datasets Στη δεύτερη φάση, θα διερευνήσετε την μέθοδο της ιεραρχικής ομαδοποίησης (hierarchical clustering) πάνω σε διάφορα datasets. Θα αξιολογήσετε επίσης διάφορους τρόπους για συγχώνευση των clusters. Τα αποτελέσματα της κάθε εργασίας φαίνονται πιο κάτω. Εργασία 2b: Εργασία 2c: Εργασία 2d:
Εργασία 2e:
Φάση 3: Σύγκριση μετρικών αξιολόγησης της ομαδοποίησης Υπάρχουν πολλές στατιστικές μέθοδοι για την αξιολόγηση της ποιότητας των δημιουργηθέντων clusters και θα τις δοκιμάσετε στην εργασία αυτή. Γενικότερα, αυτές οι μέθοδοι μπορούν να χωριστούν σε δύο κατηγορίες: 1. Μετρικές αξιολόγησης της ομαδοποίησης όταν είναι διαθέσιμη η πραγματική ανάθεση των σημείων σε clusters (ground truth). 2. Μετρικές αξιολόγησης όταν η πραγματική ανάθεση (ground truth) δεν είναι διαθέσιμη. Στον ακόλουθο σύνδεσμο μπορείτε να βρείτε πολύ χρήσιμες πληροφορίες: http://scikitlearn.org/stable/modules/clustering.html#clustering-performance-evaluation Εργασία 3a: Όταν είναι διαθέσιμη η πραγματική ανάθεση σε clusters (ground truth available) Ας υποθέσουμε ότι η ανάθεση σε clusters είναι γνωστή. Αυτό αποτελεί μια ιδανική περίπτωση και πολύ συχνά, σε πραγματικές εφαρμογές, δεν συναντάται μιας και η διαδικασία της ομαδοποίησης είναι επί της ουσίας τεχνική για unsupervised learning (που συνεπάγεται δεν έχουμε πρότερη γνώση της μεταβλητής που θέλουμε να προβλέψουμε). Εντούτοις, μιας και τα δικά σας datasets δημιουργούνται με συνθετικό τρόπο (κλήση συνάρτησης make_blobs), είναι δυνατόν να γνωρίζετε την πραγματική ανάθεση (ground truth). Στην πρώτη εργασία θα αξιολογήσετε τις πιο κάτω μετρικές: 1. Adjusted Rand index 2. Adjusted Mutual Information Score 3. Homogeneity 4. Completeness 5. V-measure score Τα αποτελέσματα της πρώτης εργασίας της Φάσης 3 φαίνονται στις πιο κάτω γραφικές παραστάσεις.
Εργασία 3b: Όταν ΔΕΝ είναι διαθέσιμη η πραγματική ανάθεση σε clusters (ground truth ΝΟΤ available) Ας υποθέσουμε ότι η ανάθεση σε clusters δεν είναι γνωστή. Πολύ συχνά, σε πραγματικές εφαρμογές δεν γνωρίζουμε τη σωστή απάντηση, οπότε κατά συνέπεια η επιλογή της τιμής του k είναι πολύ δύσκολη Στην δεύτερη εργασία θα χρησιμοποιήσετε τα συνθετικά δεδομένα που παράξατε αγνοώντας το ground truth. Θα μελετήσετε 3 απλές μετρικές που αναλύουν πόσο καλό είναι το αποτέλεσμα της ομαδοποίησης Πιο συγκεκριμένα θα εξεταστούν οι πιο κάτω μετρικές: 1. SSQ 2. Silhouette Coefficient 3. Stability Τα αποτελέσματα της δεύτερης εργασίας της Φάσης 3 φαίνονται στις πιο κάτω γραφικές παραστάσεις.
Φάση 4: Ομαδοποίηση φίλων Facebook Στην τέταρτη φάση, με τη βοήθεια του εργαλείου selenium θα ανακτήσετε πληροφορίες των φίλων σας από το Facebook με στόχο την ομαδοποίησή τους στη βάση των ενδιαφερόντων τους (Likes). Ο κώδικας για σύνδεση με το Facebook και για ανάκτηση πληροφοριών είναι κατά πολύ μεγάλο ποσοστό έτοιμο, μιας και δεν είναι αυτός ο στόχος της παρούσας άσκησης, αλλά είναι αρκετά ενδιαφέρον και συνίσταται όπως πειραματιστείτε με αυτό. Αυτά που θα κάνετε στην φάση αυτή σε περιληπτική μορφή είναι: 1. Θα χρησιμοποιήσετε το πακέτο selenium/webdriver για να επισκεφτείτε τις σελίδες του Facebook μέσω κάποιου browser και να επιλέξετε elements από την ιστοσελίδα μέσω css selectors για να εξαγάγετε πληροφορίες από τους φίλους σας. 2. Θα μετατρέψετε τα δεδομένα κάθε φίλου σας σε ένα διάνυσμα (vector) έτσι ώστε να μπορεί να τύχει επεξεργασίας από τους αλγόριθμους ομαδοποίησης 3. Θα τρέξετε τους αλγόριθμους ομαδοποίησης και θα μελετήσετε τα αποτελέσματα Κάποια σχόλια: Συνίσταται να χρησιμοποιηθούν οι browsers Mozilla Firefox ή Google Chrome. Οι IE/Safari μπορεί να παρουσιάσουν πρόβλημα. Θα ήταν καλό να αποφύγετε να χρησιμοποιήσετε το λογαριασμό Facebook σας από το παράθυρο του browser (που θα ξεκινήσει το πρόγραμμά σας) καθώς αυτό τρέχει. Χρήσιμες πληροφορίες για το Selenium webdriver μπορείτε να βρείτε στον σύνδεσμο http://selenium-python.readthedocs.io/locating-elements.html Αν έχετε μεγάλο αριθμό φίλων ο κώδικας θα τρέξει για μεγάλο χρονικό διάστημα. Εισήγησή μας είναι να δοκιμάσετε τον κώδικά σας αρχικά σε μικρού μεγέθους δεδομένα Τα αναμενόμενα αποτελέσματα από την εργασία αυτή είναι: 1. Η εκτύπωση της γραφικής που δείχνει απεικονίζει τις μετρικές SSQ, gap statistics and gap differences για διάφορες τιμές του k 2. Η εκτύπωση των clusters για τη καλύτερη τιμή του k (που επιλέξατε με βάση τις πιο πάνω μετρικές) όπως φαίνεται πιο κάτω. Στο κάθε cluster θα τυπώνετε τα ονόματα των φίλων σας που ανήκουν σε αυτό. Cluster 1: X, Y,Z Cluster 2: A,B,C,D etc 3. Η εκτύπωση των 2 πιο αντιπροσωπευτικών φίλων σε κάθε cluster, αυτών που απέχουν λιγότερο από το κέντρο του cluster.
Φάση 5: Μείωση διαστάσεων Η μείωση διαστάσεων αποτελεί πολύ σημαντική τεχνική προ-επεξεργασίας δεδομένων. Χρησιμοποιείται όταν για παράδειγμα θέλουμε να υλοποιήσουμε ένα μοντέλο πρόγνωσης και ο αριθμός των μεταβλητών ή features ή διαστάσεων είναι υπερβολικά μεγάλος κάτι που δυσκολεύει τη μοντελοποίηση. Στη φάση αυτή θα τρέξετε τον αλγόριθμο PCA (Principal Components Analysis Ανάλυση Κύριων Συνιστωσών), μια δημοφιλή τεχνική μείωσης μεταβλητών, δίνοντας σαν είσοδο κάποιες εικόνες έτσι ώστε να πάρετε μια ένδειξη για τις δυνατότητες του αλγορίθμου. Η ανάλυση κύριων συνιστωσών είναι μία στατιστική διαδικασία η οποία μετατρέπει μία ομάδα τιμών (παρατηρήσεων) δυνητικά συσχετιζόμενων μεταβλητών (features) σε μία ομάδα νέων τιμών μη γραμμικά συσχετιζόμενων μεταβλητών οι οποίες καλούνται κύριες συνιστώσες (components). Ο αριθμός των νέων μεταβλητών που προκύπτει είναι ίσος ή και συχνότερα πολύ μικρότερος από τον αριθμό των αρχικών μεταβλητών. Η μετάβαση αυτή πραγματοποιείται με τέτοιο τρόπο ώστε, η πρώτη συνιστώσα να εξηγεί τη μέγιστη δυνατή διακύμανση που αναπτύσσεται μεταξύ των αρχικών μεταβλητών, η δεύτερη, μη συσχετιζόμενη με την πρώτη, να εξηγεί ένα σημαντικό μέρος αυτής αλλά πάντα μικρότερο της πρώτης κοκ. Στη συνέχεια θα εφαρμόσετε τον αλγόριθμο πάνω στα δεδομένα του MNIST dataset για να δείτε πως συμπεριφέρεται. Το MNIST dataset περιλαμβάνει 70000 εικόνες που απεικονίζουν χειρόγραφα ψηφία (0-9). Η κάθε εικόνα είναι 28 x 28 pixels. Τα pixels αποθηκεύονται σαν μη προσημασμένοι αριθμοί (unsigned char) του 1 byte και λαμβάνουν τιμές από 0 έως 255. Ο τρόπος ανάκτησης των δεδομένων που χρησιμοποιούμε στην άσκηση αυτή, τοποθετεί τις εικόνες σε πίνακα 2 διαστάσεων, που σε καθεμιά από τις 70000 γραμμές του πίνακα βρίσκεται μια εικόνα ευθυγραμμισμένη σε διάνυσμα 784 θέσεων (=28 x 28). Για να πάρετε μια ιδέα, πιο κάτω φαίνεται η πρώτη εικόνα του dataset που απεικονίζει τον αριθμό 0. Εργασία 5a Στην πρώτη εργασία θα βρείτε τις μέσες τιμές των τιμών των pixels για κάθε χειρόγραφο ψηφίο και θα τις τυπώσετε όπως φαίνεται πιο κάτω:
Εργασία 5b Στη δεύτερη εργασία, θα εκπαιδεύσετε ένα SVM (support vector machine ) classifier για να μπορεί δοθέντος μια εικόνας με χειρόγραφο αριθμό να προβλέπει/κατηγοριοποιεί ποιο ψηφίο είναι. Κάθε εικόνα είναι επί της ουσίας ένα διάνυσμα 784 τιμών, με άλλα λόγια έχει 784 διαστάσεις (features). Για το λόγο αυτό, η διαδικασία της εκπαίδευσης (fit) του classifier είναι χρονοβόρα όπως θα διαπιστώσετε από το αποτέλεσμα της εργασίας αυτής: SVM training over all features took 167.32604837417603 seconds SVM over all features has an accuracy score of 0.911666666667 Εργασία 5c Στην τρίτη εργασία, θα χρησιμοποιήσετε τον αλγόριθμο PCA για να μειώσετε τις διαστάσεις της κάθε εικόνας και στα 2 datasets (training και testing), και με το νέο dataset (με 100 components) θα εκπαιδεύσετε ξανά ένα SVM classifier. Μπορείτε να δείτε ότι η χρήση της τεχνικής μείωσης διαστάσεων επιτυγχάνει μειωμένο χρόνο εκπαίδευσης χωρίς σημαντική απώλεια ακρίβειας (accuracy score). PCA and transformation took 11.292430400848389 seconds SVM training over top-100 components took 142.57797169685364 seconds SVM over top-100 components has an accuracy score of 0.907238095238 Εργασία 5d Εδώ, θα δούμε πως η μεταβολή των components στην τεχνική PCA μπορεί να επηρεάσει το χρόνο και την ακρίβεια των μοντέλων πρόγνωσης. Η έξοδος της εργασίας αυτής είναι ο πιο κάτω πίνακας. Num Components PCA Time Training Time Total Time Accuracy 784 31.785158 443.350575 475.135733 0.911524 200 23.676838 218.260815 241.937653 0.911000 190 22.124929 212.786750 234.911679 0.911000 180 21.283730 207.178329 228.462059 0.911762 170 20.855804 197.996282 218.852086 0.910857 160 17.915122 189.084661 206.999782 0.911667 150 17.366191 183.437589 200.803780 0.910095 140 15.744201 178.673916 194.418117 0.910143 130 14.515578 199.711884 214.227462 0.909810 120 16.427798 195.608112 212.035910 0.909238 110 15.504960 189.624730 205.129689 0.907190 100 14.315012 187.250707 201.565719 0.907476 90 14.402588 175.977852 190.380440 0.904667
80 12.045852 167.882744 179.928596 0.903571 70 16.472852 160.692686 177.165537 0.900048 60 15.947876 144.962620 160.910495 0.897714 50 12.340112 134.537324 146.877436 0.893714 40 11.286177 124.034420 135.320598 0.886714 30 9.396465 109.452884 118.849349 0.874333 20 7.328102 91.958532 99.286634 0.854952 10 6.112550 89.337358 95.449908 0.769857 5 6.558908 75.785263 82.344171 0.623476 4 4.059874 73.776627 77.836501 0.550095 3 4.565373 77.769283 82.334656 0.441619 2 3.738748 74.041336 77.780083 0.409095 1 4.228009 82.154152 86.382161 0.290762 Εργασία 5e Ένας τρόπος να καθορίσουμε τον καλύτερο αριθμό των components είναι να το θέσουμε στη χαμηλότερη τιμή τέτοια ώστε να εξηγεί 95% της διακύμανσης (variance). Στην τελευταία εργασία, θα υπολογίσετε και θα απεικονίσετε το ποσοστό της διακύμανσης που εξηγεί η επιλογή των 100 πρώτων συνιστωσών που υπολογίζει η τεχνική PCA. Total variance explained with 100 components is 0.914671435638 Οδηγίες Υποβολής Θα υποβάλετε ένα αρχείο username.zip (βάλτε το δικό σας username) που να περιέχει μόνο 2 αρχεία: (α) το αρχείο username.py με συμπληρωμένο τον κώδικά σας και (β) ένα αρχείο username.doc που να περιέχει screenshots και άλλα αποτελέσματα από την εκτέλεση της κάθε εργασίας. Στο πάνω μέρος κάθε αρχείου τοποθετήστε το όνομά σας. Η εργασία είναι ατομική και η αντιγραφή απαγορεύεται αυστηρά. Η βαθμολόγηση της εργασίας αυτής θα ακολουθήσει την πιο κάτω λογική: Σωστή υλοποίηση κώδικα (70%) Παρουσίαση αποτελεσμάτων: 30% Η υποβολή του αρχείου zip να γίνει μέσω του Moodle. Παρακαλώ υποβάλετε ΜΟΝΟ ΕΝΑ zip file. Καλή Επιτυχία!