Εργασία 1. ατομική εργασία

Άνοιξε: Τρίτη, 8 Νοεμβρίου 2022, 12:00 πμ
Λήγει: Παρασκευή, 23 Δεκεμβρίου 2022, 11:59 μμ

MM Εργασία 1

Μηχανική Μάθηση 2022-2023. Εργασία 1 (ατομική)

Χρονικός προγραμματισμός

  • ΕΚΦΩΝΗΣΗ: 9 Νοεμβρίου 2022

Εισαγωγή

Η πρώτη εργασία του μαθήματος της Μηχανικής Μάθησης είναι ατομική. Στο πρώτο μέρος της θα ασχοληθούμε με επιβλεπόμενη μάθηση και στο δεύτερο με μη επιβλεπόμενη. Στην επιβλεπόμενη μάθηση θα δουλέψετε με ένα dataset από το αποθετήριο OpenML και στη μη επιβλεπόμενη με δύο dataset από τη σουίτα "Clustering_Benchmarks".

Στο "φοιτητές - datasets" θα βρείτε ποια datasets σας αντιστοιχούν. Στην κολόνα "OpenML" θα βρείτε τον κωδικό OML του συνόλου δεδομένων από το OpenML και στην κολόνα "clustering_benchmarks_v1" το όνομα των δύο συνόλων δεδομένων σας από τη σουίτα των clustering benchmarks.

1.1 Επιβλεπόμενη μάθηση: μελέτη dataset του αποθετηρίου OpenML

Εισαγωγή datasets

Στο "openml datasets" θα βρείτε ποιο dataset σας αντιστοιχεί με βάση των κωδικό OML σας. Στον πίνακα θα βρείτε επίσης το ID του dataset στο αποθετήριο.

Για να εισάγετε το dataset σας απευθείας στο notebook σας χωρίς να το κατεβάσετε τοπικά μπορείτε να βασιστείτε στο "OpenML Python API.ipynb".  Θα χρειαστεί να αντικαταστήσετε το ID με τον δικό σας αριθμό ID.

Επισκόπηση

Στη συνέχεια, σε κελιά markdown γράψτε τις βασικές πληροφορίες ως προς αυτό:

  • Σύντομη παρουσίαση του dataset δηλαδή ποιο είναι το πρόβλημα που περιγράφει.
  • Χρειάστηκε να κάνετε μετατροπές στα αρχεία plain text για την εισαγωγή του; αν ναι, ποιες είναι αυτές;
  • Δώστε το πλήθος δειγμάτων και χαρακτηριστικών, και το είδος όλων των χαρακτηριστικών. Υπάρχουν μη διατεταγμένα χαρακτηριστικά και ποια είναι αυτά;
  • Υπάρχουν επικεφαλίδες; Αρίθμηση γραμμών;
  • Ποιες είναι οι ετικέτες των κλάσεων και σε ποια κολόνα βρίσκονται;
  • Υπάρχουν απουσιάζουσες τιμές; Πόσα είναι τα δείγματα με απουσιάζουσες τιμές και ποιο το ποσοστό τους επί του συνόλου;
  • Ποιος είναι το πλήθος των κλάσεων και τα ποσοστά δειγμάτων τους επί του συνόλου; Αν θεωρήσουμε ότι ένα dataset είναι μη ισορροπημένο αν μια οποιαδήποτε κλάση είναι 1.5 φορά πιο συχνή από κάποια άλλη (60%-40% σε binary datasets) εκτιμήστε αν το dataset είναι ισορροπημένο ή όχι.

Προετοιμασία

  • Διαχωρίστε το σύνολο δεδομένων σε σύνολο εκπαίδευσης (train set) και σύνολο (test set) με 30% των δειγμάτων στο test set.
  • Αν υπάρχουν απουσιάζουσες τιμές διαχειριστείτε τες και αιτιολογήστε.
  • Διαχειριστείτε τυχόν κατηγορικά ή/και μη διατεταγμένα χαρακτηριστικά και αιτιολογήστε.

Ταξινόμηση

Ταξινομητές

Θα μελετήσουμε τους ταξινομητές

  • dummy,
  • Gaussian Naive Bayes (GNB),
  • KNeirestNeighbors (kNN),
  • Logistic Regression (LR),
  • Multi-Layer Perceptron (MLP), και
  • Support Vector Machines (SVM).

Μετρικές

Η βελτιστοποίηση και η παρουσίαση των αποτελεσμάτων θα πρέπει κάθε φορά να γίνει ξεχωριστά για δύο μετρικές:

  • ορθότητα (accuracy), και
  • F1-score (macro σε προβλήματα multiclass).

Σχήμα διασταυρούμενης επικύρωσης

Για όλα τα πειράματα θα χρησιμοποιήσετε 10-fold cross-validation.

Επίδοση out-of-the-box

Αρχικά θα δούμε πως συμπεριφέρονται οι ταξινομητές χωρίς καμία βελτιστοποίηση (out-of-the-box) και με όλες τις παραμέτρους σε default τιμές.

Εκπαιδεύστε όλους τους εκτιμητές με ένα απλό fit σε ολόκληρο το training set και υπολογίστε την επίδοσή τους στο test set για τις δύο μετρικές.

Παρουσιάστε συνοπτικά και συγκριτικά την επίδοσή τους:

  1. σε πίνακα markdown, και
  2. σε bar plot σύγκρισης,

και σχολιάστε την επίδοσή τους.

Βελτιστοποίηση

Για όλους τους ταξινομητές βελτιστοποιήστε την επίδοσή τους μέσω των διαδικασιών

  • προεπεξεργασίας,
  • ορισμού pipelines, και
  • εύρεσης βέλτιστων υπερμαραμέτρων με αναζήτηση πλέγματος με διασταυρούμενη επικύρωση

Για το καλύτερο μοντέλο κάθε ταξινομητή, εκπαιδεύστε το στο σύνολο του train set και εκτιμήστε την επίδοσή του στο test set. Επιπρόσθετα, για τα βέλτιστα μοντέλα, καταγράψτε τους χρόνους train και test.

Αποτελέσματα και συμπεράσματα

Παρουσιάστε συνοπτικά και συγκριτικά την επίδοσή τους:

  1. σε πίνακα markdown όπου εκτός των δύο μετρικών θα περιλαμβάνεται η μεταβολή τους σε σχέση με το out-of-the-box καθώς και οι δύο χρόνοι, και
  2. σε bar plot σύγκρισης που θα περιλαμβάνει και την μεταβολή (χωρίς τους χρόνους).

Σχολιάστε συνολικά την επίδοσή τους καθώς και τη μεταβολή από την επίδοση out-of-the-box.

Για τον καλύτερο και τον χειρότερο ταξινομητή (εξαιρουμένων των dummy) ως προς την ορθότητα εκτυπώστε τους πίνακες σύγχυσης με γραφικό τρόπο (πχ seaborn) και σχολιάστε.

Ποιον ταξινομητή προτείνετε τελικά για το συγκεκριμένο πρόβλημα και γιατί; Μπορείτε να δώσετε κάποια ερμηνεία για την καλή επίδοσή του στο πρόβλημα, απόλυτα ή/και σε σχέση με τους υπόλοιπους (εκτός των dummy);

1.2 Μη επιβλεπόμενη μάθηση: μελέτη dataset της σουίτας "Clustering Benchmarks"

Στο πρόβλημα της μη επιβλεπόμενης μάθησης, τα δύο datasets που σας αντιστοιχούν βρίσκονται στην κολόνα "clustering_benchmarks_v1" και είναι χωρισμένα με κόμμα. Τα datasets έχουν την μορφή "συλλογή/όνομα". Το πρώτο dataset (μικρό) είναι σε δύο διαστάσεις και το δεύτερο (μεγάλο) σε περισσότερες.

Εισαγωγή datasets

Στο "clustering_benchmarks_v1.ipynb" μπορείτε να βρείτε ένα παράδειγμα για το πως να εισάγουμε τα datasets στο notebook μας.

Αλγόριθμοι clustering

Θέλουμε να μελετήσουμε τους εξής αλγόριθμους συσταδοποίησης:

  • K-Means σε υλοποίηση scikit-learn,
  • HAC με συνδέσμους "Single", "Average", "Complete", και "Ward" σε υλοποίηση fastcluster. Το user guide για Python βρίσκεται εδώ, και διαβάστε αυτό για τον προσδιορισμό των labels αν το χρειαστείτε.
  • GMM σε υλοποίηση scikit-learn,
  • DBSCAN σε υλοποίηση scikit-learn,
  • HDBSCAN σε υλοποίηση hdbscan, και
  • SOM σε υλοποίηση sklearn-som.

Μετρικές αξιολόγησης

Για την αξιολόγηση των clustering θα χρησιμοποιήσουμε τρεις μετρικές:

Βέλτιστο πλήθος clusters

Σε όσους αλγόριθμους το απαιτούν, μπορείτε να χρησιμοποιήσετε απευθείας τη γνώση σας για τον βέλτιστο αριθμό clusters, χωρίς να κάνετε αναζήτηση με μεθόδους όπως shillouhette κλπ.

Η γνώση του πλήθους των clusters προφανώς δεν είναι ρεαλιστική συνθήκη σε ένα πρόβλημα του πραγματικού κόσμου. Η πολυπλοκότητα του clustering εξαρτάται από τον κάθε εφαρμοζόμενο αλγόριθμο ξεχωριστά αλλά, γενικά, η συσταδοποίηση θεωρείται ένα δύσκολο (NP) πρόβλημα.

Στην άσκηση μας απασχολεί κυρίως η συγκριτική απόδοση των αλγόριθμων συσταδοποίησης, οπότε θα δεχτούμε την απλοποίηση της γνώσης του βέλτιστου αριθμού clusters.

2D dataset

Για το μικρό 2D dataset, και για όλους τους αλγόριθμους clustering παρουσιάστε γράφημα των συστάδων που βρίσκουν σε σχέση με τις πραγματικές συστάδες. Για το σκοπό αυτό μπορείτε για παράδειγμα να συμβουλευτείτε την ενότητα Basics της βιβλιοθήκης genieclust.

Σχολιάστε τα γραφήματα των συστάδων.

Παρουσιάστε σε πίνακα markdown τα συγκριτικά αποτελέσματα των αλγόριθμων για όλες τις μετρικές.

Για τον καλύτερο και τον χειρότερο αλγόριθμό εκτυπώστε τους πίνακες σύγχυσης με γραφικό τρόπο (πχ seaborn) και σχολιάστε.

Ποιον αλγόριθμο clustering προτείνετε και γιατί;

Μεγάλο dataset

Για το μεγάλο dataset, παρουσιάστε σε πίνακα markdown τα συγκριτικά αποτελέσματα των αλγόριθμων για όλες τις μετρικές και επιπρόσθετα τους χρόνους που χρειάζονται για την εύρεση των συστάδων, δηλαδή τον χρόνο της μεθόδου fit_predict για τον καθένα.

Σημειώστε ότι υπάρχει πιθανότητα κάποιοι αλγόριθμοι να μην τερματίζουν ποτέ στα πλαίσια των υπολογιστικών πόρων των cloud notebooks.

Για τον καλύτερο και τον χειρότερο αλγόριθμό εκτυπώστε τους πίνακες σύγχυσης με γραφικό τρόπο (πχ seaborn) και σχολιάστε.

Ποιον αλγόριθμο clustering προτείνετε και γιατί;

Παράδοση άσκησης

Θα παραδώσετε στο helios δύο notebooks, ένα για κάθε πρόβλημα, εντός ενός αρχείου zip.