ΔΙΑΧΩΡΙΣΤΙΚΗ ΟΜΑΔΟΠΟΙΗΣΗ
Εισαγωγή Τεχνικές διαχωριστικής ομαδοποίησης: Ν πρότυπα k ομάδες Ν>>k Συνήθως k καθορίζεται από χρήστη Διαχωριστικές τεχνικές: επιτρέπουν πρότυπα να μετακινούνται από ομάδα σε ομάδα (ιεραρχικές τεχνικές όχι) Αρχικός κακός διαχωρισμός μπορεί να διορθωθεί. Διαχωρισμός πραγματοποιείται με μεγιστοποίηση ή ελαχιστοποίηση συνάρτησης κριτηρίων. Τετραγωνικό σφάλμα πολύ δημοφιλές Τεχνικές διαχωριστικής ομαδοποίησης: Αλγόριθμος Forgy K-means Isodata
Αλγόριθμος Forgy Γιώργος Παπαδουράκης
ΔΙΑΧΩΡΙΣΤΙΚΗ ΟΜΑΔΟΠΟΙΗΣΗ:Αλγόριθμος Forgy
Αλγόριθμος Forgy 1o Βήμα: 2 ομάδες, k=2 Αντιπροσωπευτικά πρότυπα (τυχαία): [4,4] [8,4] 2ο Βήμα: Υπολογισμός πλησιέστερης ομάδας για κάθε πρότυπο.
Αλγόριθμος Forgy 3ο Βήμα: Υπολογισμός νέων αντιπροσωπευτικών προτύπων Α ομάδα: [4,4] B ομάδα: [17.75,7] Υπάρχει αλλαγή στην καταχώρηση των προτύπων, επιστροφή στο 2ο Βήμα. Δεύτερη επανάληψη του αλγορίθμου 2ο Βήμα: Υπολογισμός πλησιέστερης ομάδας για κάθε πρότυπο.
Αλγόριθμος Forgy 3ο Βήμα: Υπολογισμός νέων αντιπροσωπευτικών προτύπων Α ομάδα: [6,4] B ομάδα: [21,8] Υπάρχει αλλαγή στην καταχώρηση των προτύπων, επιστροφή στο 2ο Βήμα. Τρίτη επανάληψη του αλγορίθμου 2ο Βήμα: Υπολογισμός πλησιέστερης ομάδας για κάθε πρότυπο. Δεν υπάρχει αλλαγή στην καταχώρηση των προτύπων, ο αλγόριθμος τερματίζεται.
Ομαδοποίηση με k-means Γιώργος Παπαδουράκης Κώστας Μαριάς
Διαχωριστική και Ιεραρχική συσταδοποίηση Όπως είδαμε αναλυτικά σε προηγούμενα μαθήματα υπάρχει η δυνατότητα διαχωριστικής ομαδοποίησης όπου τα πρότυπα διαχωρίζονται σε μη επικαλυπτόμενες ομάδες (συστάδες) και κάθε πρότυπο ανήκει μόνο σε μια ομάδα. Σε αντίθεση στην ιεραρχική ομαδοποίηση δημιουργούνται ουσιαστικά ένα σύνολο από εμφωλευμένες συστάδες με μια ιεράρχιση
Ομαδοποίηση (ή συσταδοποίηση με kmeans) Όταν έχουμε ένα σύνολο προτύπων η ομαδοποίηση είναι μια τεχνική που προσπαθεί να δημιουργήσει συστάδες αντικειμένων με παρόμοια χαρακτηριστικά. Ιδεατά οι αποστάσεις ανάμεσα σε κάθε συστάδα πρέπει να είναι ελάχιστες ενώ ανάμεσα στις διαφορετικές συστάδες μέγιστες. Με αυτό ακριβώς το σκεπτικό μπορεί κανείς να σκεφτεί ότι η ποιότητα της ομαδοποίησης εξαρτάται άμεσα από το να υπάρχει μεγάλη ομοιότητα εντός κάθε συστάδας (π.χ. να μην υπάρχουν outliers*) και παράλληλα μικρή ομοιότητα (η αλλιώς μεγάλη απόσταση) ανάμεσα στις συστάδες. Αναλόγως το μέγεθος των προτύπων μπορούν να υπάρχουν υπολογιστικές προκλήσεις. Συχνά για να λυθεί για να λυθεί υπάρχουν αρκετοί ευριστικοί αλγόριθμοι που μπορούν να συγκλίνουν γρήγορα. *ακραίες τιμές ή απομονωνόμενα πρότυπα που δυσκολεύουν την ομαδοποίηση
Επεξήγηση του κ means Ο αλγόριθμος k-means έχει χρησιμοποιηθεί κατά κόρον στην ψηφιακή επεξεργασία σήματος π.χ. για data mining. Η ομαδοποίηση αυτή έχει ως στόχο να διαχωρίσει n παρατηρήσεις σε K ομάδες, έτσι ώστε κάθε παρατήρηση να ανήκει στη συστάδα με το κοντινότερο μέσο, το οποίο χρησιμεύει ως ένα χαρακτηριστικό δείγμα της συστάδας. Αυτό οδηγεί σε μια διαμέριση του χώρου δεδομένων σε κελιά Voronoi*. https://el.wikipedia.org/wiki/ομαδοποίηση_κ-μέσων * https://en.wikipedia.org/wiki/voronoi_diagram Στα μαθηματικά, ένα διάγραμμα Voronoi είναι ένα διαχωρισμός ενός επιπέδου σε περιοχές που βασίζονται στην απόσταση από τα σημεία ενός συγκεκριμένου υποσυνόλου του επιπέδου.
Ο αλγόριθμος K means Η είσοδος του αλγορίθμου είναι ένα σύνολο προτύπων x 1,x 2,,x n καθώς και ο επιθυμητός αριθμός των ομάδων Κ Ξεκινάμε μια επαναληπτική διαδικασία όπου Αναθέτουμε τυχαία τα κέντρα των ομάδων Κ 1, Κ 2,,Κ n Για κάθε πρότυπο x i υπολογίζουμε το κοντινότερο κέντρο Κ j και αναθέτουμε το x i στην συστάδα Κ j Στη συνέχεια για κάθε συστάδα Κ 1, Κ 2,,Κ n υπολογίζομε τα νέα γεωμετρικά τους κέντρα ως τους μέσους όρους κάθε συστάδας με όλα τα σημεία x i που προκύψαν από το προηγούμενο βήμα. Σταματάμε την διαδικασία όταν δεν έχουμε μεταβολές στις συστάδες, δηλαδή τα στοιχεία τους παραμένουν ίδια.
Ο αλγόριθμος K means (με περισσότερα μαθηματικά ) Αναθέτουμε τυχαία τα κέντρα των ομάδων Κ 1, Κ 2,,Κ n x i υπολογίζουμε το κοντινότερο κέντρο Κ j : argmin j D x i, Kj αναθέτουμε το x i στην συστάδα Κ j Στη συνέχεια για κάθε συστάδα Κ 1, Κ 2,,Κ n υπολογίζομε τα νέα γεωμετρικά τους κέντρα: K j = 1 n j xi Kj xi και Σταματάμε την διαδικασία όταν δεν έχουμε μεταβολές στις συστάδες, δηλαδή τα στοιχεία τους παραμένουν ίδια.
Πολυπλοκότητα αλγορίθμου κ means Χώρος: αποθηκεύουμε μόνα τα κέντρα Η πολυπλοκότητα είναι O(I * n * K * d) n = αριθμός σημείων, K = αριθμός συστάδων, I = αριθμός επαναλήψεων, d = αριθμός γνωρισμάτων (διάσταση)
Παράδειγμα αλγορίθμου 1/3 Έστω ότι έχουμε τα παρακάτω 12 πρότυπα που ουσιαστικά έχουν ως χαρακτηριστικά το ύψος και το βάρος 12 ανθρώπων. Υποθέτουμε ότι θέλουμε να τους χωρίσουμε σε 2 κατηγορίες (Κ=2). 1st Πρότυπα Iteration Height Weight 1 185 72 2 170 56 3 168 60 4 174 68 5 182 72 6 188 77 7 180 71 8 165 70 9 183 84 10 160 75 11 158 67 12 177 76 Αρχικά θα πρέπει να αρχικοποιήσουμε τον αλγόριθμό και να αναθέσουμε 2 κέντρα, έστω π.χ. Κ1=(190,90) και Κ2=(170,56). Στη συνέχει υπολογίζουμε τις αποστάσεις από όλα τα πρότυπα όπως φαίνεται στους παρακάτω πίνακες: Dist from K1 Dist from K2 18,68154169 21,9317122 39,44616585 0 37,20215048 4,472135955 27,20294102 12,64911064 19,6977156 20 13,15294644 27,65863337 21,47091055 18,02775638 32,01562119 14,86606875 9,219544457 30,87069808 33,54101966 21,47091055 39,40812099 16,2788206 19,10497317 21,1896201 Αν η μικρότερη απόσταση είναι από το Κ1 το πρότυπο κατατάσσεται στην κόκκινη ομάδα ενώ αν είναι κοντινότερα στην Κ2 κατατάσσεται στη πράσινη. Στη συνέχεια βρίσκουμε το καινούριο κέντρο Κ1 ως τον μέσο όρο όλων των «κόκκινων» προτύπων και αντίστοιχα το Κ2 ως τον μέσο όρο των πράσινων προτύπων. Based and extended from http://dni-institute.in/blogs/k-means-clustering-algorithm-explained/
Παράδειγμα αλγορίθμου 2/3 1st Πρότυπα Iteration Height Weight 1 185 72 2 170 56 3 168 60 4 174 68 5 182 72 6 188 77 7 180 71 8 165 70 9 183 84 10 160 75 11 158 67 12 177 76 Dist from K1 Dist from K2 4,65188134 17,9392398 21,48799314 10,9264704 19,50874289 6,71580529 9,622445062 6,27596643 2,394712713 15,0983172 7,242185373 22,6170425 3,528292644 12,8769688 16,84016772 4,3542145 9,864403123 22,9804708 21,29768177 11,4187458 24,39887803 9,86128282 4,615847591 13,0313593 Έχοντας υπολογίσει τα νέα κέντρα Κ1=(183,76,2) και Κ2=(167.86,66.74) υπολογίζουμε και πάλι τις αποστάσεις από όλα τα πρότυπα όπως φαίνεται στους παρακάτω πίνακες και το κάθε πρότυπο κατατάσσεται στο πλησιέστερο (νέο) κέντρο. Παρατηρούμε ότι το πρότυπο 7 ενώ ήταν στην πράσινη ομάδα τώρα είναι κοντινότερα στην κόκκινη και άρα κατατάσσεται σε αυτήν. Ο αλγόριθμός μας λοιπόν δεν έχει συγκλίνει ακόμα οπότε προχωράμε σε Τρίτη επανάληψή οπού και πάλι βρίσκουμε το καινούριο κέντρο Κ1 ως τον μέσο όρο όλων των «κόκκινων» προτύπων και αντίστοιχα το Κ2 ως τον μέσο όρο των πράσινων προτύπων.
Παράδειγμα αλγορίθμου 3/3 1st Πρότυπα Iteration Height Weight 1 185 72 2 170 56 3 168 60 4 174 68 5 182 72 6 188 77 7 180 71 8 165 70 9 183 84 10 160 75 11 158 67 12 177 76 Dist from K1 Dist from K2 4,16664 20,08385518 23,02230416 10,83333462 21,10355631 6,379220868 11,22618764 8,408002075 3,370591771 17,24416478 5,74698955 24,74593419 5,002748134 15,02313346 18,29464645 4,085882878 8,68111104 24,87357149 22,50246851 10,72509855 25,87844448 7,896901854 5,540260724 14,98981384 Έχοντας υπολογίσει τα νέα κέντρα Κ1=(182.5,75.33) και Κ2=(165.83,66) υπολογίζουμε και πάλι τις αποστάσεις από όλα τα πρότυπα όπως φαίνεται στους παρακάτω πίνακες και το κάθε πρότυπο κατατάσσεται στο πλησιέστερο (νέο) κέντρο. Παρατηρούμε ότι το πρότυπο 7 παραμένει στην κόκκινη ομάδα και γενικά δεν υπάρχει καμία αλλαγή στις συστάδες σε σχέση με το προηγούμενο βήμα, οπότε ο αλγόριθμός μας συγκλίνει!!! Κ2 Κ1 x=[185 182 188 180 183 177] y=[72 72 77 71 84 76] x2=[170 168 174 165 160 158] y2=[56 60 68 70 75 67] plot(x,y,'ro',x2,y2,'go');xlabel('height');ylabel('width')
Εφαρμογή kmeans σε Εικόνα Η χρήση του kmeans στην εικόνα μπορεί να θεωρηθεί ως μια μέθοδο τμηματοποίησης. Για να εφαρμόσουμε την τεχνική αυτή συσταδοποίησης σε μια εικόνα θα πρέπει να σκεφτούμε τι ακριβώς θέλουμε να κάνουμε: Αν έχουμε μονόχρωμη εικόνα (gray-scale) μπορούμε να θεωρήσουμε κάθε pixel ως ένα πρότυπο και να χωρίσουμε τα pixels της εικόνας σε όσες κλάσεις επιθυμούμε. Σε έγχρωμες εικόνες μπορούμε να χρησιμοποιήσουμε 2ή 3 κανάλια, δηλαδη 2 ή 3 χαρακτηριστικά ανα pixel για να κάνουμε kmeans. Για να το υλοποιήσουμε στη matlab σε κάθε περίπτωση πρέπει να κατανοήσουμε την εντολή reshape.
Εφαρμογή kmeans σε Εικόνα Ας πούμε ότι φορτώνουμε μια RGB εικόνα (ουσιαστικά είναι 3 πίνακες με τιμές που αντιπροσωπεύουν κάθε βασικό χρώμα). im = imread('football.jpg'); Στο workspace βλέπουμε ότι είναι <256x320x3 uint8> Αν κόψουμε ένα μικρό 3Δ κύβο π.χ.: test=im(1:4,1:4,1:3) Τότε θα πάρουμε:
Εφαρμογή kmeans σε Εικόνα test(:,:,1) = 49 43 33 44 36 38 39 38 34 30 36 37 37 24 27 42 test(:,:,2) = 86 80 73 84 73 75 79 78 71 67 73 74 74 61 64 79 test(:,:,3) = 113 107 99 110 100 102 105 104 98 94 100 101 101 88 91 106 Ας υποθέσουμε ότι θέλουμε το και τα 3 κανάλια πληροφορίας για να το περάσουμε για kmeans. Τότε γράφουμε: ab = reshape(test,size(test,1)*size(test,2),3) ab = 49 86 113 36 73 100 34 71 98 37 74 101 43 80 107 38 75 102 30 67 94 24 61 88 33 73 99 39 79 105 36 73 100 27 64 91 44 84 110 38 78 104 37 74 101 42 79 106 Διάνυσμα με 3 χαρακτηριστικά που αντιστοιχούν στο pixel (1,1)
Εφαρμογή kmeans σε Εικόνα test(:,:,1) = 49 43 33 44 36 38 39 38 34 30 36 37 37 24 27 42 test(:,:,2) = 86 80 73 84 73 75 79 78 71 67 73 74 74 61 64 79 test(:,:,3) = 113 107 99 110 100 102 105 104 98 94 100 101 101 88 91 106 Ας υποθέσουμε ότι θέλουμε το 2 και 3 κανάλι πληροφορίας για να το περάσουμε για kmeans. Τότε γράφουμε: test2=test(:,:,2:3) test2(:,:,1) = 86 80 73 84 73 75 79 78 71 67 73 74 74 61 64 79 test2(:,:,2) = 113 107 99 110 100 102 105 104 98 94 100 101 101 88 91 106 Για να μπορούμε όμως να τα περάσουμε στον αλγόριθμο kmeans θα πρέπει να χρησιμοποιήσουμε την εντολή reshape ώστε κάθε pixel να έχει 2 χαρακτηριστικά. Τότε γράφουμε: ab = reshape(test2,size(test2,1)*size(test2,2),2) ab = 86 113 73 100 71 98 74 101 80 107 75 102 67 94 61 88 73 99 79 105 73 100 64 91 84 110 78 104 74 101 79 106 Διάνυσμα με 2 χαρακτηριστικά που αντιστοιχούν στο pixel (1,1)
Εφαρμογή kmeans σε Εικόνα Ας ξεκινήσουμε από μια ασπρόμαυρη εικόνα του φεγγαριού. Με τον τρόπο που περιγράψαμε μπορούμε να περάσουμε στο kmeans την ένταση κάθε pixel ως το χαρακτηριστικό του προτύπου. Τα αποτελέσματα και ο κώδικας που φτιάξαμε φαίνονται στην επόμενη διαφάνεια όπου χρησιμοποιούμε τον αλγόριθμο kmeans για να τμηματοποιήσουμε την εικόνα σε Κ=3 κλάσεις.
Άσκηση Εφαρμογή kmeans σε Εικόνα Α.Να εφαρμόσετε τη μέθοδο kmeans για να τμηματοποιήσετε την gray scale ασπρόμαυρη εικόνα moon.tif σε τρείς κάλσεις. Β.Να φορτώσετε την RGB εικόνα της Matlab football.jpg και να εφαρμόσετε την μέθοδο kmeans χρησιμοποιώντας α) Όλα τα κανάλια και β)μόνο τα κανάλια G,B. Να γίνει τμηματοποίηση για Κ=3 και Κ=4 σε όλα τα παραπάνω και να γραφτεί αναφορά με κώδικα, εξηγήσεις, αποτελέσματα εικόνων και γενικά σχόλια. Οι απαντήσεις είναι στα επόμενα slides (μόνο για διδάσκοντες )
im=imread('moon.tif'); nrows = size(im,1); ncols = size(im,2); ab = reshape(double(im),nrows*ncols,1); ncolors = 3; % repeat the clustering 5 times to avoid local minima [cluster_idx, cluster_center] = kmeans(ab,ncolors,'distance','sqeuclidean',... 'Replicates',5); pixel_labels = reshape(cluster_idx,nrows,ncols); figure, imshow(pixel_labels,[]), title('image labeled by cluster index'); figure subplot(2,2,1), imshow(im), title('moon'); subplot(2,2,2), imshow(im.*(uint8(pixel_labels==1))), title('objects in cluster 1'); subplot(2,2,3), imshow(im.*(uint8(pixel_labels==2))), title('objects in cluster 2'); subplot(2,2,4), imshow(im.*(uint8(pixel_labels==3))), title('objects in cluster 3');
Image Labelled by Cluster Index