ntua-cvsp-lab / DSP_LabSupport

Here the students of the 2019-2020 DSP course can submit questions regarding the course to the teaching assistants.
7 stars 3 forks source link

LAB2 3.2 #79

Open giorgoskallitsis opened 4 years ago

giorgoskallitsis commented 4 years ago

Καλησπερα, θα ηθελα να ρωτησω μια μικρη λεπτομερεια σχετικα με την εφαρμογη των SVD,PCA. Ειχε ειπωθει στο εργαστηριο πως πριν πραγματοποιησουμε τον SVD , θα πρεπει να κανουμε center τα δεδομενα μας (αν και δεν αναφερεται στη ασκηση αν δεν κανω λαθος). Το ερωτημα μου είναι πως θα γινει αυτο το centering? Θα βρουμε το μέσο όρο των 4056 στοιχειων και θα αφαιρεσουμε απο κάθε στοιχειο του πινακα 4056 αυτο το μέσο ορο ή μηπως θα κανουμε κατι αλλο? Εχυαριστω πολυ

odychlapanis commented 4 years ago

Γεια, όπως είχε ειπωθεί στο εργαστήριο, θα πρέπει να πάρεις τη μέση τιμή ως προς τον άξονα τον παρατηρήσεων και να αφαιρέσεις αυτή τη μέση τιμή από κάθε γραμμή του πίνακα. Μπορείς και να τσεκάρεις ότι η μέση τιμή του νέου πίνακα είναι πολύ κοντά στο μηδέν. Η εντολή που έδειξαν στο εργαστήριο ήταν αυτή: X=X-np.mean(X,axis=0) η οποία εκμεταλλεύεται το Broadcasting, αφού αφαιρείς μία γραμμή από έναν πίνακα 40 γραμμών, οπότε υπονοείται ότι θέλεις η αφαίρεση να γίνει σε κάθε γραμμή, δηλαδή 40 φορές. Ελπίζω να απάντησα σωστά.

giorgoskallitsis commented 4 years ago

Καλως, ευχαριστω πολυ! Πρακτικα αυτη η εντολη τι ακριβως κανει? βρισκει το μεσο ορο των τιμων της i γραμμης και τον αφαιρει απο καθε στοιχειο της i γραμμης και επαναλαμβανει το παραπανω για ολες τις 40 γραμμες?

odychlapanis commented 4 years ago

Πραγματικά κι εγώ δεν ειμαι 100% σίγουρος. Νομίζω ότι βρίσκει τη μέση τιμή για κάθε στήλη. Δηλαδή βρίσκει τη μέση τιμή του np.mean(ste) για όλες τις μετρήσεις (40) και μετά το ίδιο και για τα υπόλοιπα στατιστικά και ότι βρει το αφαιρεί από κάθε στατιστική ποσότητα. Άρα, αν έχουμε μόνο δύο μετρήσεις και μόνο mean και min για την ste: np.mean(ste[0])=5 και np.mean(ste[1])=15, ενώ np.min(ste[0])=1 και np.min(ste[1])=-5 τότε θα τις κάνει: -5, 5 και 3, 3 αφαιρώντας 10 και -2 αντίστοιχα.

DimLiak commented 4 years ago

Να κανω και εχω μια ερωτηση πανω σε αυτό.. Για ποιο λογο κάνουμε αυτήν την αλλαγή στον πίνακα Χ πριν πάμε να εκτελέσουμε τις μεθόδους SVD kai PCA? Δεν μπορούμε να τις εκτελέσουμε κατευθείαν στον αρχικο?

giorgoskallitsis commented 4 years ago

Δημητρη, απ οσο εχω καταλαβει εγω, ειναι μερος του αλγοριθμου, ο α΄λγοριθμος λειτουργει για δεδομενα με μηδενικη μεση τιμη.

DimLiak commented 4 years ago

Ναι απλα εμενα οταν εκτελω τον αλγοριθμο χωρις την κανονικοποιηση που βγαινει αυτο:

Screenshot 2020-06-09 at 3 50 33 PM

Ενω όταν το κανονικοποιώ βαγίνει αυτο:

Screenshot 2020-06-09 at 3 57 09 PM

Που εκτός από την μετατόπιση στον y αξονα έχω και περιστροφη 180 μοιρών που δεν καταλαβαινω γιατι γινεται αυτο

filby89 commented 4 years ago

Καλησπέρα, όσον αφορά την κανονικοποίηση, αυτή είναι απαραίτητη όταν η PCA υλοποιείται με SVD στον πίνακα X, επειδή αυτός πρέπει να είναι κεντραρισμένος για να υπάρχει η αντιστοιχία με τις ιδιοτιμές του πίνακα αυτοσυσχέτισης (δηλαδή με τον "κλασικό" τρόπο που υλοποιείται η PCA). Νομίζω ότι η απάντηση σε αυτό το stackoverflow https://stats.stackexchange.com/questions/189822/how-does-centering-make-a-difference-in-pca-for-svd-and-eigen-decomposition είναι εξαιρετικά κατανοητή και με περισσότερες λεπτομέρειες.

Η κανονικοποίηση αφορά κάθε "feature" από τα 56 ξεχωριστά, δηλαδή θέλουμε οι 40 τιμές κάθε ξεχωριστού feature να έχουν μέση τιμή 0. Άρα ουσιαστικά πρέπει να βρούμε 56 means (όσα και τα feature) και να τα αφαιρέσουμε από τα αντίστοιχα feature για να τα κάνουμε να έχουν μέση τιμή 0 (across all observations).

Αυτό μπορεί να γίνει με την εντολή:

X=X-np.mean(X,axis=0)

όπου με το np.mean(X,axis=0) υπολογίζεται η μέση τιμή για κάθε στήλη του πίνακα X (across all observations-rows δηλαδή) και παίρνουμε ένα διάνυσμα 56 τιμών. Στη συνέχεια, όταν το αφαιρέσουμε από τον X, το numpy καταλαβαίνει ότι πρέπει να αφαιρέσει από κάθε γραμμή του X (διάστασης επίσης 56 τιμών) το διάνυσμα αυτό (αυτό ονομάζεται broadcasting - https://numpy.org/doc/1.18/user/basics.broadcasting.html).