Κάθε γραμμή του αρχείου αντιπροσωπεύει τα δεδομένα ενός ατόμου και περιλαμβάνει διάφορες ιατρικές μετρήσεις και το αποτέλεσμα της διάγνωσης για διαβήτη. Οι στήλες του αρχείου είναι οι ακόλουθες:
- Pregnancies: Ο αριθμός των κυήσεων που έχει περάσει η γυναίκα.
- Glucose: Το επίπεδο γλυκόζης στο αίμα μετά από 2 ώρες σε τεστ ανοχής γλυκόζης.
- BloodPressure: Η διαστολική αρτηριακή πίεση (mm Hg).
- SkinThickness: Το πάχος του δέρματος στην περιοχή των τρικεφάλων (mm).
- Insulin: Το επίπεδο ινσουλίνης στον ορό (μικρογραμμάρια ανά χιλιοστόλιτρο).
- BMI: Δείκτης μάζας σώματος (βάρος σε κιλά δια του ύψους σε τετραγωνικά μέτρα).
- DiabetesPedigreeFunction: Μια βαθμολογία που συνοψίζει το ιστορικό διαβήτη στην οικογένεια και την γενετική προδιάθεση.
- Age: Η ηλικία της γυναίκας.
- Outcome: Το αποτέλεσμα της διάγνωσης (0 = δεν έχει διαβήτη, 1 = έχει διαβήτη)
Παρόμοια δεδομένα δίνονται από τον χρήστη για να εκπαιδεύσουν το μοντέλο μηχανικής μάθησης.
Το DataFrame είναι μια κεντρική δομή δεδομένων στη βιβλιοθήκη pandas της Python, που χρησιμοποιείται ευρέως για την ανάλυση και τη διαχείριση δεδομένων. Μοιάζει με φύλλο εργασίας στο Excel, με σειρές και στήλες. Κάθε στήλη μπορεί να περιέχει δεδομένα διαφορετικού τύπου.
Το Dataframe tab παρέχει δύο επιλογές:
- α) Χρήση των labels Τα labeled datasets περιλαμβάνουν δεδομένα όπου κάθε δείγμα έχει μια συσχετισμένη ετικέτα ή στόχο που θέλουμε να προβλέψουμε. Αυτά τα δεδομένα είναι κρίσιμα για την εκπαίδευση μοντέλων εποπτευόμενης μάθησης.
Στο συγκρκριμένο παράδειγμα τα labels αντιστοιχούν στη στήλη Outcome η οποιά περιέχει τις δυαδικές τιμές 0,1. Ο λόγος που χρησιμοποιούμε τα labels είναι η εκπαίδευση του μοντέλου μηχανικής μάθησης μας ώστε στο μέλλον μόλις του δωθούν διαφορετικά στοιχεία να μπορεί να τα επεξεργαστεί και να δώσει όσο το δυνατό πιο σωστά αποτελέσματα. Έπειτα από την εκπαίδευση τα labels χρειάζονται για την αξιολόγηση του μοντέλου, συγκρίνοντας τις προβλέψεις του μοντέλου με τα πραγματικά labels για να μετρήσουμε την ακρίβεια και την ευαισθησία του.
- β) Χωρίς labels
Τα unlabeled datasets περιέχουν μόνο τα χαρακτηριστικά των δειγμάτων χωρίς καμία συσχετισμένη ετικέτα. Αυτά τα δεδομένα χρησιμοποιούνται κυρίως για μεθόδους μη εποπτευόμενης μάθησης. Επιτρέπουν την ομαδοποίηση (clustering) δηλαδή την διαίρεση ενός συνόλου δεδομένων σε ομάδες ώστε τα δεδομένα σε κάθε ομάδα να είναι πιο παρόμοια μεταξύ τους σε σύγκριση με τα δεδομένα από άλλες ομάδες.
Αποτελέσματα:
Συμπεράσματα:
- Συσσώρευση Δεδομένων στα Αριστερά: Υπάρχει μεγάλη συγκέντρωση δεδομένων στα αριστερά του διαγράμματος. Αυτό μπορεί να σημαίνει ότι τα περισσότερα χαρακτηριστικά των δεδομένων συγκεντρώνονται γύρω από συγκεκριμένες τιμές ή ότι δεν υπάρχει μεγάλη ποικιλομορφία στα δεδομένα
- Εξάπλωση των Δεδομένων: Καθώς κινούμαστε προς τα δεξιά, τα δεδομένα αρχίζουν να διασπείρονται περισσότερο. Αυτή η εξάπλωση δείχνει ότι υπάρχουν λίγα δείγματα που αποκλίνουν αρκετά από τον κύριο όγκο των δεδομένων
- Ακραίες Τιμές: Υπάρχουν κάποια σημεία που βρίσκονται πολύ μακριά από την κύρια μάζα των δεδομένων, κάτι που μπορεί να υποδηλώνει την ύπαρξη πολύ διαφορετικών δειγμάτων.
Αποτελέσματα:
Συμπεράσματα:
- Clusters: Υπάρχουν διαχωρισμένες ομάδες (clusters) δεδομένων. Αυτό υποδηλώνει ότι τα δεδομένα έχουν φυσικές ομάδες ή κατηγορίες που είναι διακριτές μεταξύ τους.
- Διάκριση Μεταξύ Ομάδων: Διαχώρηση σε ομάδες, δείχνοντας ότι τα δεδομένα εντός κάθε ομάδας έχουν παρόμοια χαρακτηριστικά, ενώ οι διαφορετικές ομάδες έχουν αρκετά διακριτά χαρακτηριστικά.
- Διάταξη των Ομάδων: Μπορούμε να παρατηρήσουμε τρεις κύριες ομάδες στο διάγραμμα. Η μία ομάδα βρίσκεται στο πάνω μέρος, μια δεύτερη ομάδα είναι προς τα αριστερά και κάτω, και η τρίτη ομάδα είναι εκτεταμένη προς τα δεξιά.
- Απομόνωση Σημείων: Υπάρχουν μερικά σημεία που είναι απομονωμένα από τις κύριες ομάδες. Αυτά μπορεί να είναι εκτοπίσματα (outliers) ή δεδομένα που δεν ανήκουν καθαρά σε καμία από τις κύριες ομάδες.
Αποτελέσματα:
Συμπεράσματα:
- Συγκέντρωση Τιμών Κοντά στο Μηδέν: Η πλειονότητα των τιμών φαίνεται να συγκεντρώνεται κοντά στο μηδέν. Αυτό σημαίνει ότι πολλές από τις τιμές στο σύνολο δεδομένων είναι χαμηλές
- Μικρός Αριθμός Μεγάλων Τιμών: Υπάρχουν λίγες τιμές που είναι σημαντικά μεγαλύτερες από τις υπόλοιπες.
- Ετερογένεια των Δεδομένων: Το ιστόγραμμα υποδεικνύει ότι τα δεδομένα περιέχουν μια μεγάλη ποικιλία τιμών, αλλά οι περισσότερες είναι συγκεντρωμένες σε μικρό εύρος τιμών.
Αποτελέσματα:
Συμπεράσματα:
- Συγκέντρωση Κοντά στο Μηδέν: Όπως και στο ιστόγραμμα, η πλειονότητα των τιμών είναι συγκεντρωμένη κοντά στο μηδέν. Η πυκνότητα των τιμών είναι πολύ υψηλή κοντά στο μηδέν και μειώνεται ραγδαία καθώς οι τιμές αυξάνονται.
- Σπάνιες Μεγάλες Τιμές: Υπάρχουν λίγες τιμές που είναι σημαντικά μεγαλύτερες από τις υπόλοιπες, όπως φαίνεται από τις πολύ μικρές πυκνότητες που εκτείνονται προς τα δεξιά.
- Αυξημένη Ακρίβεια των Τιμών: Το πυκνογράφημα παρέχει μια ομαλότερη εκδοχή της κατανομής των τιμών σε σύγκριση με το ιστόγραμμα, επιτρέποντας καλύτερη κατανόηση της κατανομής των δεδομένων.
Αποτελέσματα:
Συμπεράσματα:
- Μεταβλητότητα Τιμών: Οι μεταβλητές όπως οι Insulin και Glucose παρουσιάζουν μεγάλη μεταβλητότητα στις τιμές τους, ενώ οι DiabetesPedigreeFunction και SkinThickness έχουν μικρότερη μεταβλητότητα.
- Διαφορές στις Κατανομές:: Οι τιμές της Glucose και της Insulin έχουν μεγαλύτερο εύρος σε σύγκριση με άλλες μεταβλητές, ενώ οι τιμές των Pregnancies και Age έχουν πιο συγκεντρωμένη κατανομή με μικρότερη διασπορά.
- Εκτός Ορίων Τιμές: Υπάρχουν πολλοί εκτός ορίων τιμές (outliers) ειδικά στις μεταβλητές Insulin, SkinThickness, BloodPressure, και BMI. Αυτό μπορεί να είναι είτε λόγω ακραίων μετρήσεων είτε πιθανώς λανθασμένων δεδομένων.
Ο χρήστης έχειτην δυνατότητα να επιλέξει ανάμεσα σε δύο είδη Machine Learning Algorithm. Είτε classifiers είτε clusters. Έπειτα δίνει τις τιμές που θέλει για τις μεταβλτητές των αλγορίθμων και πατάει το κουμπί "Start Analysis" για να δει τα αποτελέσματα και την σύγκριση των αλγορίθμων.
Αποτελέσματα:
Συμπεράσματα: SVM vs KNN:
O SVM και ο KNN είναι δύο αρκετά χρήσιμοι αλγόριθμοι κατηγοριοποίησης, δηλαδή για την εκπαίδευση δεδομένων που παρέχουν labels. Ωστόσο, ύπαρχουν περιπτώσεις που η ακρίβεια και η ποιότητα τους, μπορεί να διαφέρει σε διαφορετικού είδους δεδομένα. SVM χρησιμότητα
Πιο συγκεκριμένα, στην προσέγγιση του support vector machine (SVM) approach βρίσκουμε ένα μονοπάτι για να χωρίσουμε τα δεδομένα σε δύο κλάσεις. Ο αλγόριθμος βρίσκει την ευρύτερη δυνατή διαδρομή (για να μεγιστοποιήσει την ακρίβεια του μέσω της παράμετρος regularization). Τέλος, τα δεδομένα θα πρέπει να έχουν κανονικοποιηθεί. ΚΝΝ χρησιμότητα
Ο KNN είναι ένας απλός αλγόριθμος που κατηγοριοποιεί νέα δεδομένα με βάση την ομοιότητα των χαρακτηριστικών τους, με τα χαρακτηριστικά των k πλησιέστερων γειτόνων της στα train data. Πιο συγκεκριμένα, η παράμετρος k καθορίζει πόσοι γείτονες λαμβάνονται υπόψη για την ομοιότητα αυτή που μπορεί να μετρηθεί με βάση το μέγεθος της απόστασης τους. Σε ποια περίπτωση είναι ο καθένας πιο ιδανικός?
Ο svm αλγόριθμος είναι πιο ακριβείς σε δεδομένα υψηλής διάστασης και αραιά δεδομένα, καθώς και ιδανικός στο ελαχιστοποιεί τα errors και να αποφεύγει το να γίνει overfitting αλλά είναι αρκετά δύσκολος να υλοποιηθεί καθώς χρειάζεται αρκετές διαφοροποιήσεις στην regularization παράμετρό μέχρι να δώσει την βέλτιστη ακρίβεια. Ωστόσο, όμως ο knn είναι αρκετά εύκολος στην κατανόηση του και στην υλοποιήση του καθώς και ιδανικός στο να χειρίζεται αρκετά καλά νέα δεδομένα, αλλά είναι αρκετά αργός και δυσκολεύται στο να βρεί καλά αποτελέσματα σε μεγάλα datasets.
Αποτελέσματα:
Συμπεράσματα:
Agglomerative Hierachical Clustering vs Affinity Propagation:
O Agglomerative Hierachical Clustering και ο Affinity Propagation είναι δύο πολύ χρήσιμοι αλγόριθμοι ομαδοποίησης δεδομένων, δηλαδή για την εκπαίδευση δεδομένων που δεν παρέχουν labels αλλά βγάζουν οι ίδιοι labels ως αποτέλεσμα. Απο την άλλη μεριά, είναι περιπτώσεις που η ακρίβεια και η ποιότητα τους, μπορεί να διαφέρει σε διαφορετικού είδους δεδομένα. Agglomerative Hierachical Clustering χρησιμότητα
Πιο συγκεκριμένα, όσον αφορά τον Agglomerative Hierachical Clustering, αρχικά υπολογίζει όλες τις αρχικές αποστάσεις μεταξύ datapoints σε ένα πίνακα με βάση μία ιεραρχία. Έπειτα, ενώνει το ζευγάρι από clusters σε 1 cluster που έχει την κοντινότερη απόσταση μεταξύ datapoints και κάνει update τις αποστάσεις του αρχικού πίνακα. Ο αλγόριθμος επαναλαμβάνεται ώσπου να συναντήσει τον απαιτούμενο αριθμό clusters που χρειαζόμαστε. Affinity Propagation χρησιμότητα
Ο Affinity Propagation είναι ένας απλός αλγόριθμος που κατηγοριοποιεί νέα δεδομένα με βάση την ομοιότητα των χαρακτηριστικών τους, με τα χαρακτηριστικά των k πλησιέστερων γειτόνων της στα train data. Πιο συγκεκριμένα, η παράμετρος k καθορίζει πόσοι γείτονες λαμβάνονται υπόψη για την ομοιότητα αυτή που μπορεί να μετρηθεί με βάση το μέγεθος της απόστασης τους.
Ο Affinity Propagation βασίζεται στην ιδέα της ανταλλαγής μηνυμάτων μεταξύ των datapoints για την εύρεση του συνόλου των κέντρων (exemplars). Αρχικά, όλα τα datapoints στέλνουν και λαμβάνουν μηνύματα σχετικά με το πόσο κατάλληλο είναι κάθε άλλο datapoint για να είναι το κέντρο του. Οι ανταλλαγές αυτών των μηνυμάτων συνεχίζονται, ενημερώνοντας σταδιακά τις προτιμήσεις και την ευθύνη κάθε σημείου. Τελικά, η διαδικασία φτάνει στο τέλος της, έχοντας καθορίσει ποια σημεία θα είναι τα κέντρα και ποια θα ανήκουν σε κάθε cluster. Ο αλγόριθμος επαναλαμβάνεται έως ότου επιτευχθεί μια σταθερή λύση, χωρίς να είναι αναγκαίο να ορίσουμε τον αριθμό των clusters. Σε ποια περίπτωση είναι ο καθένας πιο ιδανικός?
Ο αλγόριθμος Agglomerative Hierarchical Clustering είναι απλός και πιο αποτελεσματικός όταν γνωρίζουμε τον αριθμό των clusters καθώς και όταν έχουμε μικρότερα datasets με καλά διαχωρισμένα clusters, καθώς μπορεί να δημιουργήσει μια σαφή ιεραρχία των δεδομένων. Ωστόσο, δεν είναι τόσο αποδοτικός και ακριβείς σε πολύ μεγάλα datasets.
Από την άλλη πλευρά, ο αλγόριθμος Affinity Propagation είναι πόλυ χρήσιμος όταν δεν γνωρίζουμε τον αριθμό των clusters καθώς είναι ιδανικός και προσφέρει αρκετή ευελιξία όταν έχουμε πολύπλοκα και αρκετά μεγάλα datasets, παρά τους πολλούς υπολογισμούς που πραγματοποιεί λόγω της ανταλλαγής μηνυμάτων.
Το info tab προσφέρει ένα σύντομο και περιεκτικό οδηγό χρήσης ενώ ταυτόχρονα περιέχει επεξηγήσης και αναλύσης των λειτουργιών της εφαρμογής.
Η συγκεκριμένη εφαρμογή έχει αναπτυχθεί για την εξόρυξη και ανάλυση δεδομένων χρησιμοποιώντας την πλατφόρμα Streamlit και υποστηρίζει λειτουργίες όπως φόρτωση δεδομένων, 2D οπτικοποιήσεις, μηχανική μάθηση και παρουσίαση του τρόπου λειτουργίας της. Οι κύριες δυνατότητες περιλαμβάνουν την εύκολη φόρτωση δεδομένων σε μορφή CSV ή Excel, την επισκόπηση και διαχείριση των δεδομένων, τη δημιουργία 2D οπτικοποιήσεων με χρήση αλγορίθμων μείωσης διάστασης όπως PCA και t-SNE, και την εκτέλεση αλγορίθμων μηχανικής μάθησης για κατηγοριοποίηση και ομαδοποίηση, επιτρέποντας τη σύγκριση της απόδοσης διαφορετικών αλγορίθμων.
Για την επιτυχή κυκλοφορία της εφαρμογής σε ευρύ κοινό, θα ακολουθήσουμε ένα προσαρμοσμένο μοντέλο κύκλου ζωής λογισμικού, εμπνευσμένο από τις αρχές του Agile. Η ανάπτυξη της εφαρμογής θα χωριστεί σε μικρές, διαχειρίσιμες εκδόσεις με διάρκεια 2-4 εβδομάδων, κατά τις οποίες θα προστίθενται νέες λειτουργίες ή θα βελτιώνονται υπάρχουσες, βασισμένες σε ανατροφοδότηση χρηστών. Οι χρήστες θα εμπλέκονται ενεργά στη διαδικασία ανάπτυξης μέσω δοκιμών beta και ανατροφοδότησης, επιτρέποντας την ευελιξία στην προσαρμογή της ανάπτυξης με βάση τις αλλαγές στις απαιτήσεις και τις τεχνολογικές εξελίξεις ενώ ταυτόχρονα για την διευκόλυνση τους κάθε έκδοση θα ξεκινά με τον καθορισμό των στόχων και των προτεραιοτήτων και θα καταλήγει με μια ανασκόπηση της προόδου και των επιτευγμάτων. Το μοντέλο μας θα επιτρέπει την προτεραιοποίηση των λειτουργιών και την αξιολόγηση της απόδοσης και λειτουργικότητας της εφαρμογής σε κάθε στάδιο της ανάπτυξης. Μετά από κάθε έκδοση, η ομάδα θα πραγματοποιεί ανασκοπήσεις για να αξιολογήσει τι πήγε καλά, τι μπορεί να βελτιωθεί και να σχεδιάσει τις αλλαγές για την επόμενη έκδοση και μέσω αυτής της συνεχής ανατροφοδότηση διασφαλίζεται ότι η εφαρμογή εξελίσσεται με βάση τις πραγματικές ανάγκες των χρηστών και τις τεχνολογικές εξελίξεις. Χρησιμοποιώντας πρακτικές συνεχούς ενσωμάτωσης και δοκιμών για την τακτική συγχώνευση των αλλαγών στον κύριο κώδικα και τη διεξαγωγή αυτόματων δοκιμών η ομάδα ανάπτυξης , διασφαλίζει ότι η εφαρμογή παραμένει σταθερή και λειτουργική. Η χρήση εργαλείων ανάλυσης δεδομένων για τη συλλογή και ανάλυση ανατροφοδότησης από τους χρήστες θα βεβαιώνει ότι οι προτάσεις και τα σχόλια των χρηστών θα ενσωματώνονται σε μελλοντικές εκδόσεις για τη βελτίωση της εφαρμογής. Τέλος, καθημερινές συναντήσεις θα εξασφαλίζουν την ενημέρωση της ομάδας σχετικά με την πρόοδο και τυχόν προβλήματα που μπορεί να προκύψουν.
Data Frame:
Την ανάπτυξη του Data Frame ανέλαβε και ολοκλήρωσε ο Νικόλας Αναγνωστόπουλος με ΑΜ: inf2021013
Visualization:
Την ανάπτυξη του Visualization ανέλαβε και ολοκλήρωσε ο Αχιλλέας Ζερβός με ΑΜ: inf2021055
Machine Learning:
Την ανάπτυξη του Machine Learning ανέλαβε και ολοκλήρωσε ο Νικόλας Αναγνωστόπουλος με ΑΜ: inf2021013
Info:
Την ανάπτυξη του Info ανέλαβε και ολοκλήρωσε ο Παναγιώτης Μουρελάτος με ΑΜ: inf2021147
Μοντέλο Κύκλου Ζωής Λογισμικού:
Την ανάπτυξη του Κύκλου Ζωής Λογισμικού ανέλαβε και ολοκλήρωσε ο Παναγιώτης Μουρελάτος με ΑΜ: inf2021147