Η μέθοδος PCA -Ανάλυση Κύριων Συνιστωσών Γιώργος Παπαδουράκης Κώστας Μαριάς Technological Educational Institute Of Crete Department Of Applied Informatics and Multimedia Intelligent Systems Laboratory
Ανάλυση Κύριων Συνιστωσών Είναι μια μέθοδο στατιστικής που χρησιμοποιεί έναν ορθογώνιο μετασχηματισμό* για να μετατρέψει ένα σύνολο παρατηρήσεων συσχετισμένων πιθανώς μεταβλητών, σε ένα σύνολο τιμών γραμμικά μη συσχετισμένων μεταβλητών που ονομάζονται κύριες συνιστώσες (ΚΣ)! Ο αριθμός των ΚΣ είναι από τον αριθμό των αρχικών μεταβλητών ή τον αριθμό των παρατηρήσεων. https://en.wikipedia.org/wiki/principal_component_analysis * Στη γραμμική άλγεβρα, ένας ορθογώνιος μετασχηματισμός είναι ένας γραμμικός μετασχηματισμός T: V V ο οποίος διατηρεί το εσωτερικό γινόμενο. Δηλαδή, για κάθε ζεύγος u, v των στοιχείων του V, έχουμε u, v = Tu, Tv
Ανάλυση Κύριων Συνιστωσών Η πρώτη ΚΣ έχει τη μεγαλύτερη δυνατή διακύμανση (δηλαδή, αντιπροσωπεύει όσο το δυνατόν μεγαλύτερη μεταβλητότητα στα δεδομένα). Κάθε επακόλουθη ΚΣ με τη σειρά της έχει τη μεγαλύτερη δυνατή διακύμανση υπο τον περιορισμό ότι είναι ορθογώνια σε σχέση με τις προηγούμενες ΚΣ. Το τελικό αποτέλεσμα είναι μη συσχετισμένα διανύσματα ΚΣ που αποτελούν ένα ορθογώνιο σύνολο βάσης. https://en.wikipedia.org/wiki/principal_component_analysis * Στη γραμμική άλγεβρα, ένας ορθογώνιος μετασχηματισμός είναι ένας γραμμικός μετασχηματισμός T: V V ο οποίος διατηρεί το εσωτερικό γινόμενο. Δηλαδή, για κάθε ζεύγος u, v των στοιχείων του V, έχουμε u, v = Tu, Tv
Ανάλυση Κύριων Συνιστωσών Να θυμηθούμε από την γραμμική άλγεβρα ότι: Αν Α είναι ένας πίνακας nxn, το λ είναι ιδιοτιμή του πίνακα Α αν υπάρχει μη μηδενικό διάνυσμα x, τέτοιο ώστε Αx=λx. Το x ονομάζεται ιδιοδιάνυσμα του Α που αντιστοιχεί στο λ. Αν το λ είναι ιδιοτιμή του Α και x το ιδιοδιάνυσμα που αντιστοιχεί στο λ, τότε αυτό που προκύπτει πολλαπλασιάζοντας το x με οποιοδήποτε μη μηδενικό αριθμό είναι επίσης ιδιοδιάνυσμα του Α.
Άσκηση Δείξτε ότι το x = 2 είναι ιδιοδιάνυσμα του πίνακα Α = 1 3 2 και αντιστοιχεί στην ιδιοτιμή λ=4. 3 2 https://www.youtube.com/watch?v=g4n8vjpf7hm
Πως βρίσκουμε τις ιδιοτιμές/ιδιοδιανύσματα Άς υποθέσουμε ότι θέλουμε να βρούμε τις ιδιοτιμές/ιδιοδιανύσματα του πίνακα Α = 7 3 3 1 1) Βρίσκουμε τον πίνακα Α λι = 7 3 1 0 λ 3 1 0 1 = 7 λ 3 3 1 λ Για να βρούμε τις ιδιοτιμές η ορίζουσα του παραπάνω πίνακα πρέπει να είναι ίση με μηδέν: det 7 λ 3 3 1 λ = 0 7 λ 1 λ 3 3 = 0 https://www.youtube.com/watch?v=g4n8vjpf7hm
Πως βρίσκουμε τις ιδιοτιμές/ιδιοδιανύσματα λ 2 6λ 16 = 0 λ 1, 2 = ( 6) ± 36 4( 16) 2 1 λ1 = 8, λ2 = 2 Έχοντας βρεί τις ιδιοτιμές μπορούμε τώρα να υπολογίσουμε και τα ιδιοδιανύσματα ξεκινώντας από τον πίνακα Α λι και αντικαθιστώντας λ=8
Πως βρίσκουμε τις ιδιοτιμές/ιδιοδιανύσματα 7 8 Α λ 1 Ι = Α 8Ι = 3 3 1 8 Στη συνέχεια θέτουμε Α λ 1 Ι x = 0 1 3 = 3 9 1 3 3 9 x 1 x 2 = 0 x 1 + 3x 2 = 0 x 1 = 3x 2 Οπότε αν θέσουμε x 2 = 1 x 1 = 3 το 1 ο ιδιοδιάνυσμα είναι x = 3 (για έλεγχο μπορούμε πάντα να δούμε αν ισχύει το Α x=λ x) 1
Πως βρίσκουμε τις ιδιοτιμές/ιδιοδιανύσματα Με τον ίδιο τρόπο για την άλλη ιδιοτιμή λ2=-2 έχουμε: Α λ 2 Ι = Α + 2Ι = 9 3 Στη συνέχεια θέτουμε Α λ 2 Ι x = 0 3 1 9 3 3 1 x 1 x 2 = 0 3x 1 + x 2 = 0 x 2 = 3x 1 Οπότε αν θέσουμε x 1 = 1 x 2 = 3 το 2 ο ιδιοδιάνυσμα είναι x = 1 3 (για έλεγχο μπορούμε πάντα να δούμε αν ισχύει το Α x=λ x)
Το ίδιο παράδειγμα σε matlab Δηλώνουμε πρώτα τον πίνακα A=[7 3;3-1] Στη συνέχεια χρησιμοποιούμε την έτοιμη συνάρτηση [V,D] = eig(a) Η οποία μας δίνει V = 0.3162-0.9487-0.9487-0.3162 και D = -2 0 0 8 Π.χ. Για την ιδιοτιμή -2 x = 0.3162 -> Αν πολλαπλασιάσουμε x*(3.1624) παίρνουμε x = 1 3 0.9487 Αυτό γιατί όπως είπαμε στην εισαγωγή πολλαπλασιάζοντας το x με οποιοδήποτε μη μηδενικό αριθμό είναι επίσης ιδιοδιάνυσμα του Α!!!
Μεθοδολογία Ανάλυσης Κύριων Συνιστωσών 1 1 : Λήψη των Δεδομένων 2 : Αφαίρεση του μέσου όρου από τον πίνακα δεδομένων 3 : Υπολογισμός του πίνακα Συνδιακύμανσης 4 : Υπολογισμός των ιδιοδιανυσμάτων και των ιδιοτιμών ενός πίνακα συνδιακύμανσης 5 : Επιλογή όλων ή μερικών ιδιοδιανυσμάτων για να φτιάξουμε το feature vector (διάνυσμα χαρακτηριστικών) 6 : Μετασχηματισμός των δεδομένων μας 7 (προαιρετικό): Επιστροφή στα αρχικά δεδομένα
Μεθοδολογία Ανάλυσης Κύριων Συνιστωσών (Mε matlab) 1 Περνάμε σε ένα παράδειγμα για το οποίο έχουμε 2 μεταβλητές: x=[2.5 0.5 2.2 1.9 3.1 2.3 2 1 1.5 1.1]; y=[2.4 0.7 2.9 2.2 3.0 2.7 1.6 1.1 1.6 0.9]; 1)Για να κάνουμε ΑΚΣ πρέπει να αφαιρέσουμε το μέσο όρο από κάθε μεταβλητή: x2=x-mean(x) ; y2=y-mean(y) ; 2)Στη συνέχεια υπολογίζουμε τον πίνακα συνδιακύμανσης C=cov(x2,y2) Και παίρνουμε τον πίνακα C = 0.6166 0.6154 0.6154 0.7166 http://www.cs.otago.ac.nz/cosc453/student_tutorials/principal_components.pdf
Ανάλυση Κύριων Συνιστωσών (Mε matlab) 2 3) Το επόμενο βήμα είναι να βρούμε τις ιδιοτιμές και τα ιδιοδυανύσματα του C: [V,D] = eig(c) V = -0.7352 0.6779 0.6779 0.7352 D = 0.0491 0 0 1.2840 Οι ιδιοτιμές είναι 0.0491 και 1.2840 και τα αντίστοιχα ιδιοδιανύσματα είναι στον V Εδώ μπορούμε να τσεκάρουμε ότι τα ιδιοδιανύσματα είναι μοναδιαία δηλαδή έχουν μήκος 1: sqrt(v(1,1)^2+v(2,1)^2) sqrt(v(1,2)^2+v(2,2)^2)
Ανάλυση Κύριων Συνιστωσών 3 E=eig(C) [V,D] = eig(c) C = 0.6166 0.6154 0.6154 0.7166 V = -0.7352 0.6779 0.6779 0.7352 D = 0.0491 0 0 1.2840 plot(x2,y2,'ro') hold on plotv(v) 4)Παριστώντας γραφικά τα ιδιοδιανύσματα πάνω στα αρχικά δεδομένα βλέπουμε ότι α) είναι κάθετα μεταξύ τους, β) αυτό που αντιστοιχεί στην μεγαλύτερη ιδιοτιμή (πράσινο) μας δείχνει πως τα δεδομένα σχετίζονται στην ευθεία του ενώ το μπλέ μας δείχνει τη μικρή διακύμανση! Η υψηλότερη ιδιοτιμή/ιδιοδιάνυσμα, περιέχει τις περισσότερες πληροφορίες για τα δεδομένα μας!
Ανάλυση Κύριων Συνιστωσών 4 5)Για να προχωρήσουμε στο μετασχηματισμό των δεδομένων πρέπει να φτιάξουμε ένα διάνυσμα χαρακτηριστικών FV είτε με όλα τα ιδιοδιανύσματα (στην πρώτη γραμμή θα μπει το σημαντικότερο, αυτό που αντιστοιχεί στην υψηλότερη ιδιοτιμή) ή με μόνο το σημαντικότερο (αντιστοιχεί στην ψηλότερη πράσινο)! FV=[V(:,2) V(:,1)] FV = 0.6779-0.7352 0.7352 0.6779 E=eig(C) [V,D] = eig(c) V = -0.7352 0.6779 0.6779 0.7352 D = 0.0491 0 0 1.2840 Μπορούμε να ανακατασκευάσουμε τα δεδομένα μας με όλες ή τις σημαντικότερες ΚΣ πετυχαίνοντας π.χ. συμπίεση.
Ανάλυση Κύριων Συνιστωσών 5 Data = Για να μετασχηματίσουμε τα δεδομένα χρειαζόμαστε να μπουν τα ιδιοδιανύσματα σε γραμμές με το πιο σημαντικό στην πρώτη γραμμή. FV' 0.6779 0.7352-0.7352 0.6779 Ο αρχικός πίνακας με τα δεδομένα είναι: Data=[x2; y2] E=eig(C) [V,D] = eig(c) V = -0.7352 0.6779 0.6779 0.7352 D = 0.0491 0 0 1.2840 0.6900-1.3100 0.3900 0.0900 1.2900 0.4900 0.1900-0.8100-0.3100-0.7100 0.4900-1.2100 0.9900 0.2900 1.0900 0.7900-0.3100-0.8100-0.3100-1.0100 NewData = Τώρα μπορούμε να υπολογίσουμε τα μεσασχηματισμένα δεδομένα μας! NewData=FV'*Data 0.8280-1.7776 0.9922 0.2742 1.6758 0.9129-0.0991-1.1446-0.4380-1.2238-0.1751 0.1429 0.3844 0.1304-0.2095 0.1753-0.3498 0.0464 0.0178-0.1627 Τα δεδομένα μας τώρα έχουν προβληθεί στις κύριες συνιστώσες! Όπως θα δούμε στη συνέχεια (βήμα 7) μπορούμε να τα προβάλουμε και σε λιγότερες και με αυτόν τον τρόπο να κάνουμε και συμπίεση!
Ανάλυση Κύριων Συνιστωσών 5 Data = Ο αρχικός πίνακας με τα δεδομένα είναι: Data=[x2; y2] 0.6900-1.3100 0.3900 0.0900 1.2900 0.4900 0.1900-0.8100-0.3100-0.7100 0.4900-1.2100 0.9900 0.2900 1.0900 0.7900-0.3100-0.8100-0.3100-1.0100 NewData = Τώρα μπορούμε να υπολογίσουμε τα μεσασχηματισμένα δεδομένα μας! NewData=FV'*Data 0.8280-1.7776 0.9922 0.2742 1.6758 0.9129-0.0991-1.1446-0.4380-1.2238-0.1751 0.1429 0.3844 0.1304-0.2095 0.1753-0.3498 0.0464 0.0178-0.1627 Για να οπτικοποιήσουμε τα μετασχηματισμένα δεδομένα μας (με όλες τις ΚΣ) γράφουμε στη matlab: x22=newdata(1,:);y22=newdata(2,:); plot(x22,y22,'ro') E=eig(C) [V,D] = eig(c) V = -0.7352 0.6779 0.6779 0.7352 D = 0.0491 0 0 1.2840 Τα δεδομένα μας τώρα είναι στους άξονες των ΚΣ!
Ανάλυση Κύριων Συνιστωσών 6 6) Αφού χρησιμοποιήσαμε όλα τα ιδιοδιανύσματα μπορούμε να ανακτήσουμε τα αρχικά δεδομένα αν από τη σχέση: NewData=FV'*Data-> Data=inv(FV )*NewData. Ο αντίστροφος όμως του πίνακα χαρακτηριστικών είναι ο ανάστροφος του πίνακα. Επίσης για να ανακτήσουμε τα αρχικά δεδομένα θα πρέπει να προσθέσουμε και τους μέσους όρους του x,y που έιχαμε αφαιρέσει αρχικά. Οπότε στη matlab: M=[mean(x)*ones(1,10); mean(y)*ones(1,10)]; Datacheck=inv(FV')*NewData+M Με αυτό ξαναεπιστρέφουμε στα αρχικά δεδομένα στους αρχικούς άξονες! Datacheck = 2.5000 0.5000 2.2000 1.9000 3.1000 2.3000 2.0000 1.0000 1.5000 1.1000 2.4000 0.7000 2.9000 2.2000 3.0000 2.7000 1.6000 1.1000 1.6000 0.9000 Init_Data=[x;y] Init_Data = E=eig(C) [V,D] = eig(c) V = -0.7352 0.6779 D = 0.6779 0.7352 0.0491 0 0 1.2840 However, when we take all the eigenvectors in our feature vector, it turns out that the inverse of our feature vector is actually equal to the transpose of our feature vector. This is only true because the elements of the matrix are all the unit eigenvectors of our data set. inv(fv')=(fv') =FV 2.5000 0.5000 2.2000 1.9000 3.1000 2.3000 2.0000 1.0000 1.5000 1.1000 2.4000 0.7000 2.9000 2.2000 3.0000 2.7000 1.6000 1.1000 1.6000 0.9000 Χρησιμοποιώντας όλες τις ιδιοτιμές μπορούμε να ανακατασκευάσουμε τα δεδομένα μας 100% Τα δεδομένα μας τώρα είναι στους άξονες των ΚΣ!
Ανάλυση Κύριων Συνιστωσών 7 Data = 7)Αν τώρα θέλουμε να μετασχηματίσουμε τα δεδομένα μόνο με την ΚΣ πάλι την βάζουμε μόνη της πρώτη γραμμή του πίνακα χαρακτηριστικών: FV(:,1)' ans = 0.6779 0.7352 Ο αρχικός πίνακας με τα δεδομένα είναι: Data=[x2; y2] E=eig(C) [V,D] = eig(c) V = -0.7352 0.6779 0.6779 0.7352 D = 0.0491 0 0 1.2840 Βλέπουμε ότι με 1 ιδιοτιμή μόνο χάνουμε τη μια διάσταση από τα δεδομένα μας (την μπλε). Αν τώρα επιχειρήσουμε από τα δεδομένα αυτά να πάμε στα αρχικά με τις ίδιες εντολές όπως και πριν: M=[mean(x)*ones(1,10); mean(y)*ones(1,10)]; Datacheck=inv(FV(:,1)')*NewData+M Datacheck=FV(:,1)*NewData+M 0.6900-1.3100 0.3900 0.0900 1.2900 0.4900 0.1900-0.8100-0.3100-0.7100 0.4900-1.2100 0.9900 0.2900 1.0900 0.7900-0.3100-0.8100-0.3100-1.0100 NewData = Τώρα μπορούμε να υπολογίσουμε τα μεσασχηματισμένα δεδομένα μας! NewData= FV(:,1)'*Data Στην επόμενη διαφάνεια θα δούμε πως είναι τα δεδομένα που ανακτήσαμε με ΜΙΑ ΜΟΝΟ ΙΔΙΟΤΙΜΗ!!! 0.8280-1.7776 0.9922 0.2742 1.6758 0.9129-0.0991-1.1446-0.4380-1.2238
Init_Data Datacheck Ανάλυση Κύριων Συνιστωσών 8 Init_Data=[x;y] Init_Data = Datacheck = Datacheck=FV(:,1)*NewData+M 2.5000 0.5000 2.2000 1.9000 3.1000 2.3000 2.0000 1.0000 1.5000 1.1000 2.4000 0.7000 2.9000 2.2000 3.0000 2.7000 1.6000 1.1000 1.6000 0.9000 2.3713 0.6050 2.4826 1.9959 2.9460 2.4289 1.7428 1.0341 1.5131 0.9804 2.5187 0.6032 2.6394 2.1116 3.1420 2.5812 1.8371 1.0685 1.5880 1.0103 x22=datacheck(1,:);y22=datacheck(2,:); plot(x22,y22,'ro') E=eig(C) [V,D] = eig(c) V = -0.7352 0.6779 0.6779 0.7352 D = 0.0491 0 0 1.2840 Μ/Σ με 2 ιδιοτιμες Init_Data Μ/Σ με 1 ιδιοτιμή Datacheck Χρησιμοποιώντας λιγότερες ιδιοτιμές μπορούμε να ανακατασκευάσουμε τα αρχικά δεδομένα μας αλλά χάνοντας πληροφορία στον άξονα που παραλείψαμε!
Περίληψη κώδικα που φτιάξαμε για το παράδειγμα x=[2.5 0.5 2.2 1.9 3.1 2.3 2 1 1.5 1.1]; y=[2.4 0.7 2.9 2.2 3.0 2.7 1.6 1.1 1.6 0.9]; A=[x;y] [m, n]=size (A); % Show the size m=rows, n=columns mn = mean (A,2); %Mesos oros kathe grammhs dhl dianusma m grammwn %In a a matrix mean(a) returns a row of the mean of each column % For matrices mean(a,2) is a column vector containing the mean value of each row B=A-repmat(mn,1,n); C=B*B'/(n-1); [V,D] = eig(c); %και μετά θα συνεχίζαμε όπως στο παράδειγμα πριν
Αν είχαμε πιο πολλά από 2 πρότυπα? Πρέπει να δούμε αρχικά πως θα αφαιρέσουμε το μέσο όρο από κάθε στοιχείο της εικόνας π.χ. A=[1 2 3 4; 5 6 7 8;9 10 11 12] A = 1 2 3 4 5 6 7 8 9 10 11 12 [m, n]=size (A); % Show the size m= 3γραμμες, n=4 στήλεςcolumns mn = mean (A,2); %Mesos oros kathe grammhs dhl dianusma m grammwn mn = 2.5000 6.5000 10.5000 Τώρα πρέπει να φτιάξουμε ένα πίνακα που να επαναλαμ το μέσο όρο κάθε γραμμής: M=repmat(mn,1,n) M = 2.5000 2.5000 2.5000 2.5000 6.5000 6.5000 6.5000 6.5000 10.5000 10.5000 10.5000 10.5000 Και στη συνέχεια να τον αφαιρέσουμε από τον Α! B=A-repmat(mn,1,n) B = -1.5000-0.5000 0.5000 1.5000-1.5000-0.5000 0.5000 1.5000-1.5000-0.5000 0.5000 1.5000 Μετά θα συνεχίζαμε όπως στο παράδειγμα που αναλύσαμε Η μέθοδος αυτή μπορεί να χρησιμοποιηθεί και σε εικόνες! http://www.itl.nist.gov/div898/handbook/pmc/section5/pmc541.htm