Διπλωματική Εργασία Μελέτη Αλγορίθμων Κατηγοριοποίησης με Χρήση του MATLAB Στεργιανή Δόβα Διπλ. Μηχανικός Πληροφορικής και Επικοινωνιών Επιβλέπων Καθηγητής: Σαμαράς Νικόλαος
Εισαγωγή: Το πρόβλημα της κατηγοριοποίησης Πρόβλημα κατηγοριοποίησης (classification): Αναγνώριση της κατηγορίας που ανήκει ένα αντικείμενο, βάσει ενός συνόλου μετρήσεων που έχουν ληφθεί για αυτό Κατηγοριοποιητής (classifier): Μαθηματικό μοντέλο που επιτελεί την κατηγοριοποίηση Είσοδοι: τα Ν χαρακτηριστικά (features) του προβλήματος Έξοδος: μία από τις M κατηγορίες (ή κλάσεις) του προβλήματος Γενικότερο μοντέλο με ελεύθερες παραμέτρους (στατιστικές παράμετροι, βάρη, δομικά στοιχεία), ο κατάλληλος προσδιορισμός των οποίων επιτρέπει την επίλυση διαφορετικών προβλημάτων κατηγοριοποίησης Αλγόριθμος εκμάθησης Προσδιορισμός των ελεύθερων παραμέτρων του κατηγοριοποιητή για ένα δεδομένο πρόβλημα, βάσει ενός συνόλου εκπαίδευσης (training set) Το σύνολο εκπαίδευσης περιέχει Q ήδη κατηγοριοποιημένα πρότυπα (patterns) αναφοράς, καθένα από τα οποία είναι ένα ζεύγος εισόδων/εξόδου (τιμές χαρακτηριστικών/κατηγορία προτύπου)
Εισαγωγή: Το πρόβλημα της κατηγοριοποίησης Κύριες τεχνικές εκμάθησης: Παραμετρική κατηγοριοποίηση (parametric classification) Υπολογισμός στατιστικών παραμέτρων, θεωρώντας ότι τα δεδομένα ακολουθούν κάποια στατιστική κατανομή Διαχωριστική ανάλυση (discriminant analysis) Απλός κατηγοριοποιητής Bayes (naïve Bayes classifier) Επιβλεπόμενη εκμάθηση (supervised learning): Εξειδικευμένοι αλγόριθμοι εκμάθησης με χρήση του συνόλου εκπαίδευσης, που δεν κάνουν κάποια υπόθεση για την κατανομή των δεδομένων Κατηγοριοποιητής εγγύτατου γείτονα (nearest neighbor classifier) Δέντρα αποφάσεων (decision trees)
Εισαγωγή: Σφάλμα κατηγοριοποίησης Η αξιολόγηση ενός κατηγοριοποιητή γίνεται μέσω του σφάλματος κατηγοριοποίησης (συνήθως ως απόλυτος αριθμός στο διάστημα [0,1]): Εναλλακτικά χρησιμοποιείται η ακρίβεια κατηγοριοποίησης (συνήθως ως ποσοστό επί τοις εκατό): Acc = 100 (1 Err) (%) Τα δεδομένα αναφοράς συνήθως χωρίζονται σε δύο σύνολα: Σύνολο εκπαίδευσης (training set): Χρησιμοποιείται από τον αλγόριθμο εκμάθησης για τη δημιουργία του κατηγοριοποιητή σφάλμα αντικατάστασης (resubstitution error) Σύνολο δοκιμής (testing set): Χρησιμοποιείται για την αξιολόγηση του κατηγοριοποιητή σφάλμα γενίκευσης (generalization error) Η ποιότητα του κατηγοριοποιητή κρίνεται πάντα βάσει του σφάλματος γενίκευσης Εναλλακτικά χρησιμοποιείται η εξελιγμένη τεχνική διασταυρωμένης επικύρωσης (crossvalidation) k-fold: Τα πρότυπα χωρίζονται σε k τεμάχια 1 τεμάχιο χρησιμοποιείται ως σύνολο δοκιμής και τα υπόλοιπα k 1 ως σύνολο εκπαίδευσης Η διαδικασία επαναλαμβάνεται k φορές, θεωρώντας κάθε φορά διαφορετικό σύνολο δοκιμής Υπολογισμός του σφάλματος κατηγοριοποίησης από τα k σύνολα δοκιμής
Εισαγωγή: MATLAB Το MATLAB είναι μία τεχνική γλώσσα προγραμματισμού υψηλού επιπέδου, που παρέχει: Διαδραστικά εργαλεία για την εύκολη ανάπτυξη και δοκιμή αλγορίθμων Εξελιγμένες δυνατότητες οπτικοποίησης και ανάλυσης των δεδομένων και των αποτελεσμάτων Εκτεταμένες βιβλιοθήκες για την εύκολη διενέργεια περίπλοκων αριθμητικών υπολογισμών Απλή γλώσσα προγραμματισμού υψηλού επιπέδου, με έμφαση στην εύκολη διενέργεια πράξεων μεταξύ πινάκων Η γλώσσα του MATLAB είναι μία δυναμική γλώσσα δέσμης ενεργειών (scripting language), που προσφέρει μεταξύ άλλων: Δυναμική αλλαγή του τύπου των μεταβλητών Συναρτήσεις και δομές δεδομένων (δομημένος προγραμματισμός) Εύκολο χειρισμό εισόδου/εξόδου Εντολές ελέγχου ροής Ορισμό κλάσεων και δημιουργία αντικειμένων (αντικειμενοστραφής προγραμματισμός) Για ένα σύνολο δεδομένων κατηγοριοποίησης θεωρούνται ότι υπάρχουν αποθηκευμένες στο χώρο εργασίας (workspace) του MATLAB δύο μεταβλητές: features: Αριθμητικός πίνακας διαστάσεων Q N με τις τιμές των χαρακτηριστικών όλων των προτύπων labels: Διάνυσμα κελιών (cell array) με Q συμβολοσειρές, καθεμία από τις οποίες περιγράφει την κατηγορία του αντίστοιχου προτύπου
Εισαγωγή: Πρόβλημα κατηγοριοποίησης Iris Αναγνώριση του γένους του φυτού ίρις, βάσει μετρήσεων στο άνθος του: Τέσσερα χαρακτηριστικά: o Μήκος σέπαλων (sepal length, SL) o Πλάτος σέπαλων (sepal width, SW) o Μήκος πετάλων (petal length, PL) o Πλάτος πετάλων (petal width, PW) Τρεις κατηγορίες: o Setosa o Versicolor o Virginica Εισήχθηκε από τον στατιστικολόγο Roland Fischer το 1936 για την εξέταση της διαχωριστικής ανάλυσης Απλό πρόβλημα κατηγοριοποίησης, με 150 πρότυπα αναφοράς (50 για κάθε κλάση) Τα δύο τελευταία χαρακτηριστικά (μήκος και πλάτος πετάλων) επαρκούν για το διαχωρισμό της συντριπτικής πλειονότητας των προτύπων αναφοράς Εύκολη οπτικοποίηση των αποτελεσμάτων εποπτική σύγκριση των διαφόρων μεθοδολογιών κατηγοριοποίησης
Εισαγωγή: Πρόβλημα κατηγοριοποίησης Iris Διασπορά των προτύπων αναφοράς στα δύο πρώτα χαρακτηριστικά Διασπορά των προτύπων αναφοράς στα δύο τελευταία χαρακτηριστικά
Διαχωριστική Ανάλυση (Discriminant Analysis) Μία από τις αρχαιότερες μεθοδολογίες κατηγοριοποίησης (Fischer, 1936) Παραμετρική μεθοδολογία κατηγοριοποίησης: θεωρεί ότι τα δεδομένα ακολουθούν κανονική κατανομή Δύο βασικές μορφές: LDA (Linear discriminant analysis): Δημιουργία ενός γραμμικού κατηγοριοποιητή. Δισδιάστατος χώρος χαρακτηριστικών διαχωρίζεται μέσω ευθειών. QDA (Quadratic discriminant analysis): Θεώρηση επιπλέον τετραγωνικών όρων. Δισδιάστατος χώρος χαρακτηριστικών διαχωρίζεται μέσω καμπυλών, που αντιστοιχούν σε κάποια κωνική τομή. Ο αλγόριθμος εκμάθησης απλώς υπολογίζει κάποιες στατιστικές παραμέτρους από τα δεδομένα εκπαίδευσης: Μέσο όρο κάθε χαρακτηριστικού Πίνακα συνδιακύμανσης (covariance matrix) Στην περίπτωση της LDA γίνεται η υπόθεση ότι οι επιμέρους συνδιακυμάνσεις μεταξύ των χαρακτηριστικών είναι ίσες
Διαχωριστική Ανάλυση: Εφαρμογή στο MATLAB Η εφαρμογή στο MATLAB γίνεται μέσω της συνάρτησης classify, που υπολογίζει τις παραμέτρους μέσω του συνόλου εκπαίδευσης και παράγει το αποτέλεσμα της κατηγοριοποίησης ενός οποιουδήποτε συνόλου δεδομένων sample: result = classify(sample, trainingfeatures, traininglabels, type) Το όρισμα type καθορίζει τον τύπο της ανάλυσης: 'linear': Ο κατηγοριοποιητής LDA 'quadratic': Ο κατηγοριοποιητής QDA 'diaglinear': Ο LDA, θεωρώντας διαγώνιο πίνακα συνδιακύμανσης 'diagquadratic': Ο QDA θεωρώντας διαγώνιο πίνακα συνδιακύμανσης 'mahalanobis': Ο QDA, όπου ο πίνακας συνδιακύμανσης υπολογίζεται μέσω της απόστασης Mahalanobis Οι επιλογές 'diaglinear' και 'diagquadratic' είναι ειδικές περιπτώσεις του απλού κατηγοριοποιητή Bayes (naïve Bayes classifier), που θεωρεί ότι τα χαρακτηριστικά είναι μεταξύ τους ασυσχέτιστα Παράδειγμα εφαρμογής: result = classify(testingfeatures, trainingfeatures, traininglabels, 'quadratic'); generalizationerror = sum(~strcmp(result, testinglabels)) / length(testinglabels);
Τμήμα Εφαρμοσμένης Πληροφορικής Στεργιανή Δόβα Διπλωματική Εργασία Διαχωριστική Ανάλυση: Όρια κατηγοριοποίησης Σύνορα κατηγοριοποίησης στα δύο πρώτα χαρακτηριστικά του προβλήματος Iris
Τμήμα Εφαρμοσμένης Πληροφορικής Στεργιανή Δόβα Διπλωματική Εργασία Διαχωριστική Ανάλυση: Όρια κατηγοριοποίησης Σύνορα κατηγοριοποίησης στα δύο πρώτα χαρακτηριστικά του προβλήματος Iris
Τμήμα Εφαρμοσμένης Πληροφορικής Στεργιανή Δόβα Διπλωματική Εργασία Διαχωριστική Ανάλυση: Όρια κατηγοριοποίησης Σύνορα κατηγοριοποίησης στα δύο πρώτα χαρακτηριστικά του προβλήματος Iris
Απλός Κατηγοριοποιητής Bayes Ο απλός κατηγοριοποιητής Bayes (naïve Bayes classifier, NBC) βασίζεται στην υπόθεση ότι τα χαρακτηριστικά του προβλήματος είναι μεταξύ τους ασυσχέτιστα (naïve hypothesis) Παραμετρική μεθοδολογία κατηγοριοποίησης: θεωρεί ότι τα δεδομένα ακολουθούν κανονική κατανομή Βασίζεται στο θεώρημα Bayes και παρουσιάζει ομοιότητες με τη διαχωριστική ανάλυση Απαιτεί τη θεώρηση της κατανομής που ακολουθούν τα δεδομένα: Κανονική κατανομή (τυπικός NBC) Κατανομή πυρήνα (kernel distribution): Πιο εξελιγμένη μορφή του NBC, που δεν απαιτεί τα δεδομένα να ακολουθούν κανονική κατανομή.
Απλός Κατηγοριοποιητής Bayes: Εφαρμογή στο MATLAB Αρχικά δημιουργείται ένα αντικείμενο της κλάσης NaiveBayes μέσω της μεθόδου fit, χρησιμοποιώντας τα δεδομένα εκπαίδευσης (διαδικασία εκμάθησης): nbc = NaiveBayes.fit(trainingFeatures, traininglabels, 'Distribution',type) Το όρισμα type καθορίζει τον τύπο της κατανομής που θεωρείται: 'normal': Κανονική κατανομή (τυπικός NBC) 'kernel': Κατανομή πυρήνα Ένα οποιοδήποτε σύνολο δειγμάτων κατηγοριοποιείται μέσω της συνάρτησης predict: result = predict(nbc, sample) Παράδειγμα εφαρμογής: nbc = NaiveBayes.fit(trainingFeatures, traininglabels, 'Distribution', 'normal'); result = predict(nbc, testingfeatures); generalizationerror = sum(~strcmp(result, testinglabels)) / length(testinglabels);
Τμήμα Εφαρμοσμένης Πληροφορικής Στεργιανή Δόβα Διπλωματική Εργασία Απλός Κατηγοριοποιητής Bayes: Όρια κατηγοριοποίησης Σύνορα κατηγοριοποίησης στα δύο πρώτα χαρακτηριστικά του προβλήματος Iris
Κατηγοριοποιητής Εγγύτατου Γείτονα Ο κατηγοριοποιητής k-εγγύτατου γείτονα (k-nearest neighbor, knn) αποτελεί μία από τις πιο απλές μη παραμετρικές μεθοδολογίες κατηγοριοποίησης Η κατηγοριοποίηση ενός οποιουδήποτε δείγματος διενεργείται ως εξής: Υπολογίζονται οι αποστάσεις του δείγματος από όλα τα πρότυπα εκπαίδευσης Κρατούνται τα k πλέον κοντινά πρότυπα (γείτονες) Το δείγμα κατηγοριοποιείται στην κλάση που εμφανίζεται με τη μεγαλύτερη συχνότητα μεταξύ των k γειτόνων (κανόνας πλειοψηφίας, majority voting) Για τον υπολογισμό της απόστασης δύο σημείων θεωρείται παραδοσιακά η ευκλείδεια απόσταση. Εντούτοις, μπορούν να θεωρηθούν και άλλα μέτρα υπολογισμού της απόστασης. Παρά την απλότητα της βασικής αρχής λειτουργίας του, ο knn εμφανίζει υψηλή ακρίβεια κατηγοριοποίησης σε πολλά προβλήματα κατηγοριοποίησης Η απόδοση του κατηγοριοποιητή συνήθως μειώνεται για προβλήματα που περιλαμβάνουν μεγάλο αριθμό χαρακτηριστικών Βασικό μειονέκτημα: η ανάγκη καθορισμού του πλήθους των γειτόνων (τιμή της παραμέτρου k) από το χρήστη μέσω δοκιμής και σφάλματος
Κατηγοριοποιητής Εγγύτατου Γείτονα: Εφαρμογή στο MATLAB Η εφαρμογή στο MATLAB γίνεται μέσω της συνάρτησης knnclassify, που παράγει το αποτέλεσμα της κατηγοριοποίησης ενός οποιουδήποτε συνόλου δεδομένων sample χρησιμοποιώντας το σύνολο εκπαίδευσης: result = knnclassify(sample, trainingfeatures, traininglabels, k, distance) Το όρισμα k καθορίζει το πλήθος των εγγύτατων γειτόνων που θεωρούνται Το όρισμα distance καθορίζει το μέτρο απόσταση που θα χρησιμοποιηθεί: 'euclidean': Ευκλείδεια απόσταση 'cityblock': Απόσταση οικοδομικού τετραγώνου (city block distance) ή απόσταση Manhattan 'cosine': Απόσταση συνημίτονου 'correlation': Απόσταση συνέλιξης Παράδειγμα εφαρμογής: result = knnclassify(testingfeatures, trainingfeatures, traininglabels, 5, 'euclidean'); generalizationerror = sum(~strcmp(result, testinglabels)) / length(testinglabels);
Τμήμα Εφαρμοσμένης Πληροφορικής Στεργιανή Δόβα Διπλωματική Εργασία Κατηγοριοποιητής Εγγύτατου Γείτονα: Όρια κατηγοριοποίησης Σύνορα κατηγοριοποίησης στα δύο πρώτα χαρακτηριστικά του προβλήματος Iris Όσο μεγαλύτερη η τιμή του k, τόσο πιο ομαλά γίνονται τα σύνορα διαχωρισμού των κλάσεων
Δέντρα Αποφάσεων Τα δέντρα αποφάσεων (decision trees) είναι μία οικογένεια μη παραμετρικών κατηγοριοποιητών Το MATLAB προσφέρει την πλέον διαδεδομένη μορφή δέντρου αποφάσεων, που ονομάζεται δέντρο κατηγοριοποίησης και παλινδρόμησης (classification and regression tree, CART) (Breiman et al., 1984) Ένα μοντέλο CART υλοποιείται μέσω ενός δυαδικού δέντρου αποφάσεων: Οι κόμβοι (nodes) του δέντρου περιλαμβάνουν μία ανισότητα σε ένα χαρακτηριστικό (π.χ. ΑΝ PetalLength < 2.45) Εφόσον ισχύει η ανισότητα ακολουθείται το αριστερό μονοπάτι, αλλιώς το δεξιό Τα φύλλα (leafs) του δέντρου περιγράφουν μία από τις κατηγορίες του προβλήματος ΑΝ PL < 2.45 ΤΟΤΕ κλάση Setosa, ΑΛΛΙΩΣ ΑΝ PW < 1.75 ΤΟΤΕ κλάση Versicolor ΑΛΛΙΩΣ κλάση Virginica
Δέντρα Αποφάσεων: Εφαρμογή στο MATLAB Αρχικά δημιουργείται ένα αντικείμενο της κλάσης classregtree μέσω της μεθόδου οικοδόμησης της κλάσης, χρησιμοποιώντας τα δεδομένα εκπαίδευσης (διαδικασία εκμάθησης): tree = classregtree(trainingfeatures, traininglabels) Η συνάρτηση classregtree επιδέχεται επιπλέον ορίσματα, που καθορίζουν διάφορες λεπτομέρειες της εκπαίδευσης Ένα οποιοδήποτε σύνολο δειγμάτων κατηγοριοποιείται μέσω της συνάρτησης eval: result = eval(tree, sample) Η δομή του δέντρου οπτικοποιείται μέσω της συνάρτησης view: view(tree) Παράδειγμα εφαρμογής: tree = classregtree(trainingfeatures, traininglabels); view(tree); result = eval(tree, testingfeatures); generalizationerror = sum(~strcmp(result, testinglabels)) / length(testinglabels);
Τμήμα Εφαρμοσμένης Πληροφορικής Στεργιανή Δόβα Διπλωματική Εργασία Δέντρα Αποφάσεων : Όρια κατηγοριοποίησης Σύνορα κατηγοριοποίησης στα δύο πρώτα χαρακτηριστικά του προβλήματος Iris Τα σύνορα διαχωρισμού των κλάσεων είναι πάντοτε παράλληλα ως προς τους άξονες, αφού κάθε κόμβος ορίζει μία ανισότητα σε ένα χαρακτηριστικό
Δέντρα Αποφάσεων : Δομή δέντρου Δομή του μοντέλου CART (μέσω της συνάρτησης view)
Εφαρμογή σε Πραγματικά Προβλήματα Κατηγοριοποίησης Ονομασία Αριθμός Χαρακτηρ. Αριθμός κλάσεων Iris 4 3 Ionosphere 34 2 Cancer 9 2 Glass 9 2 Περιγραφή Αναγνώριση του γένους του φυτού ίρις, βάσει μετρήσεων στο άνθος του Αναγνώριση ύπαρξης ελεύθερων ηλεκτρονίων στην ιονόσφαιρα, μέσω σημάτων από ραντάρ Αναγνώριση του τύπου όγκου του μαστού (καλοήθης ή κακοήθης) μέσω βιοϊατρικών μετρήσεων από βιοψία Διαχωρισμός γυαλιού για παράθυρα από τους υπόλοιπους τύπους, μέσω μετρήσεων για τη χημική τους σύνθεσης Θεωρήθηκαν τέσσερα γνωστά πραγματικά προβλήματα κατηγοριοποίησης από τη βάση προβλημάτων UCI machine learning repository (Bache and Lichman, 2013) Τα δεδομένα αναφοράς βρίσκονται προαποθηκευμένα σε κάθε διανομή MATLAB Για κάθε κατηγοριοποιητή θεωρήθηκε η μορφή που παρέχει την υψηλότερη ακρίβεια κατηγοριοποίησης Χρησιμοποιήθηκε η τεχνική διασταυρωμένης επικύρωσης 10-fold για τον υπολογισμό του σφάλματος
Εφαρμογή σε Πραγματικά Προβλήματα Κατηγοριοποίησης Ακρίβεια διασταυρωμένης επικύρωσης στα θεωρούμενα προβλήματα κατηγοριοποίησης Μεθοδολογία Iris Ionosphere Cancer Glass LDA 98.00 85.18 96.14 92.47 QDA 98.00 87.47 94.71 91.54 Naïve Bayes (NBC) 96.00 91.17 96.42 92.49 knn 96.00 90.80 97.28 95.79 CART 94.67 89.17 94.56 92.03 Δεν υπάρχει κάποιος κατηγοριοποιητής που να εμφανίζει την υψηλότερη ακρίβεια σε όλα τα προβλήματα Οι LDA και QDA εμφανίζουν υψηλή ακρίβεια σε εύκολα προβλήματα (π.χ. Iris) Ο knn εμφανίζει τη μάλλον πιο ισορροπημένη απόδοση στα θεωρούμενα προβλήματα. Βασικό του μειονέκτημα όμως αποτελεί η ανάγκη καθορισμού της παραμέτρου k. Ο NBC (επιλογή 'kernel') εμφανίζει υψηλές ακρίβειες σε όλα τα προβλήματα και την υψηλότερη στο πλέον δύσκολο πρόβλημα Ionosphere Ο CART εμφανίζει υψηλές ακρίβειες στα πιο δύσκολα προβλήματα (Ionosphere και Glass) και συγκριτικά μικρότερες στα πιο απλά προβλήματα. Ταυτόχρονα όμως χαρακτηρίζεται από εύκολα ερμηνεύσιμη δομή μοντέλου κατηγοριοποίησης.
Τέλος παρουσίασης Ευχαριστώ πολύ για την προσοχή σας!
Εφαρμογή σε Πραγματικά Προβλήματα Κατηγοριοποίησης Διαδικασία εφαρμογής της τεχνικής διασταυρωμένης επικύρωσης 10-fold στο MATLAB: Για κάθε πρόβλημα φορτώνονται στο χώρο εργασίας η μεταβλητή features (με τις τιμές των χαρακτηριστικών των προτύπων αναφοράς) και το διάνυσμα κελιών labels (με τις αντίστοιχες ετικέτες που υποδηλώνουν την κλάση) Δημιουργείται ένα αντικείμενο της κλάσης cvpartition, που αποθηκεύει τις 10 διαμερίσεις των δεδομένων: cp = cvpartition(labels, 'kfold', 10) Ορίζεται ένας χειρισμός συνάρτησης (function handle), που υλοποιεί τη συνάρτηση που επιτελεί την εκπαίδευση του κατηγοριοποιητή και την τελική κατηγοριοποίηση (ο χειρισμός συνάρτησης έχει αντίστοιχη έννοια με το δείκτη συνάρτησης στη C/C++). Για παράδειγμα, η συνάρτηση για τον QDA ορίζεται ως εξής: qdafun = @(xtrain,ytrain,xtest)... (classify(xtest,xtrain,ytrain,'quadratic')) Η τεχνική 10-fold εκτελείται μέσω της συνάρτησης crossval: cverr = crossval('mcr', features, labels,... 'PredFun', qdafun, 'Partition', cp) Η συνάρτηση crossval επιστρέφει το σφάλμα διασταυρωμένης επικύρωσης (cverr)
Δέντρα Αποφάσεων: Διαδικασία κλαδέματος Ο αλγόριθμος εκμάθησης του CART μπορεί να οδηγήσει σε περίπλοκες δομές δέντρων, που ενδεχομένως να μειώνουν τις δυνατότητες γενίκευσης του κατηγοριοποιητή Η δομή ενός CART μπορεί να μειωθεί εκ των υστέρων, μέσω μίας διαδικασίας που ονομάζεται κλάδεμα (pruning) Η διαδικασία κλαδέματος αξιοποιεί πληροφορία που έχει αποθηκευτεί κατά τη δημιουργία του δέντρου (κόμβοι που θα μπορούσαν να αφαιρεθούν χωρίς να μειωθεί πολύ η ακρίβεια κατηγοριοποίησης) Η εφαρμογή της διαδικασίας στο MATLAB γίνεται μέσω των συναρτήσεων test και prune: [cost, secost, ntnodes, bestlevel] =... test(tree, 'crossvalidate', trainingfeatures, traininglables) tree = prune(tree, bestlevel)
Διαχωριστική Ανάλυση: Διαδικασία κλαδέματος
Τμήμα Εφαρμοσμένης Πληροφορικής Στεργιανή Δόβα Διαχωριστική Ανάλυση: Διαδικασία κλαδέματος Διπλωματική Εργασία