שְׁאֵלָה:
כיצד להפוך את ה- PCA ולבנות מחדש משתנים מקוריים ממספר מרכיבים עיקריים?
amoeba
2016-08-10 04:52:47 UTC
view on stackexchange narkive permalink

ניתוח רכיבים עיקריים (PCA) יכול לשמש להפחתת מימדיות. לאחר ביצוע הפחתת מימדיות כזו, כיצד ניתן לשחזר בערך את המשתנים / מאפיינים המקוריים ממספר קטן של רכיבים עיקריים?

לחלופין, כיצד ניתן להסיר או להשליך כמה מרכיבים עיקריים מהנתונים?

במילים אחרות, כיצד להפוך את ה- PCA?


בהתחשב בכך ש- PCA קשור קשר רב לפירוק ערך יחיד (SVD), ניתן לשאול את אותה השאלה באופן הבא: כיצד להפוך SVD ?

אני מפרסם את שרשור השאלות והתשובות הזה, כי נמאס לי לראות עשרות שאלות ששואלות את הדבר הזה ולא מצליחים לסגור אותן ככפולות מכיוון שאין לנו חוט קנוני בנושא זה.ישנם כמה שרשורים דומים עם תשובות הגונות, אך נראה שלכולם יש מגבלות רציניות, כמו למשלמתמקד אך ורק ב- R.
אני מעריך את המאמץ - אני חושב שיש צורך קשה לאסוף מידע על PCA, מה הוא עושה, מה הוא לא עושה, לכדי אחד או כמה שרשורים איכותיים.אני שמח שלקחת על עצמך לעשות את זה!
אני לא משוכנע שהתשובה הקנונית הזו "ניקוי" משרתת את מטרתה.מה שיש לנו כאן הוא שאלה ותשובה מעולה * גנרית *, אך לכל אחת מהשאלות היו כמה דקויות לגבי PCA בפועל שאבדו כאן.בעיקרון לקחת את כל השאלות, ביצעת עליהן PCA וזרקת את הרכיבים העיקריים הנמוכים יותר, שם לפעמים מוסתר פרט עשיר וחשוב.יתר על כן, חזרת לספר הלימוד סימון אלגברה לינארית שזה בדיוק מה שהופך את ה- PCA לאטום עבור אנשים רבים, במקום להשתמש בלשון פרנקה של סטטיסטיקאים מזדמנים, שהוא R.
@Thomas תודה.אני חושב שיש לנו אי הסכמה, שמחים לדון בזה [בצ'אט] (http://chat.stackexchange.com/rooms/18/ten-fold) או ב- Meta.בקצרה רבה: (1) אולי עדיף לענות על כל שאלה בנפרד, אך המציאות הקשה היא שזה לא קורה.שאלות רבות פשוט נותרות ללא מענה, כפי שהיה כנראה לשלך.(2) הקהילה כאן מעדיפה מאוד תשובות כלליות שימושיות עבור אנשים רבים;אתה יכול לבדוק איזה סוג של תשובות מצטיינים ביותר.(3) מסכים לגבי מתמטיקה, אבל בגלל זה נתתי כאן קוד R!(4) לא מסכים לגבי לשון פרנקה;באופן אישי, אני לא מכיר את ר.
@amoeba אני חושש שאינני יודע למצוא צ'ט אמר כי מעולם לא השתתפתי בדיוני מטא לפני כן.
@ThomasBrowne ובכן, אתה פשוט לוחץ על הקישור שנתתי למעלה: http://chat.stackexchange.com/rooms/18/ten-fold - וזה לוקח אותך לשוחח.עד עכשיו השיחה על התגובה שלך הלכה ומאחור, אז הנה קישור להיסטוריית הצ'אט הרלוונטית: http://chat.stackexchange.com/transcript/message/31659626#31659626
אחד תשובה:
amoeba
2016-08-10 04:52:47 UTC
view on stackexchange narkive permalink

PCA מחשבת את הווקטורים העצמיים של מטריצת המשתנות ("הצירים העיקריים") וממיינת אותם לפי הערכים העצמיים שלהם (כמות השונות המוסברת). לאחר מכן ניתן להקרין את הנתונים המרוכזים על צירים עיקריים אלה כדי להניב רכיבים עיקריים ("ציונים"). לצורך הפחתת מימדיות, ניתן לשמור רק קבוצת משנה של מרכיבים עיקריים ולזרוק את השאר. (עיין כאן ב מבוא הדיוט ל- PCA.)

תן ל- $ \ mathbf X_ \ text {raw} $ להיות $ n \ פעמים p מטריצת $ $ עם $ n $ שורות (נקודות נתונים) ו- $ p $ עמודות (משתנים או תכונות). לאחר חיסור הווקטור הממוצע $ \ boldsymbol \ mu $ מכל שורה, נקבל את מטריצת הנתונים מרוכזת $ \ mathbf X $. תן ל- $ \ mathbf V $ להיות מטריצת $ p \ times k $ של כמה $ k $ ווקטורים עצמיים שבהם אנו רוצים להשתמש; לרוב אלה הם הווקטורים העצמיים $ k $ עם הערכים העצמיים הגדולים ביותר. ואז המטריצה ​​$ n \ times k $ של תחזיות PCA ("ציונים") תינתן בפשטות על ידי $ \ mathbf Z = \ mathbf {XV} $.

זה מודגם באיור שלמטה: עלילת המשנה הראשונה מציגה נתונים מרוכזים (אותם נתונים בהם אני משתמש ב האנימציות שלי בשרשור המקושר) ואת התחזיות שלה על הציר הראשי הראשון. עלילת המשנה השנייה מציגה רק את ערכי ההקרנה הזו; המימד הצטמצם משניים לאחד:

enter image description here

על מנת להיות מסוגל לשחזר את שני המשתנים המקוריים ממרכיב עיקרי אחד זה , אנו יכולים למפות אותו בחזרה למידות $ p $ עם $ \ mathbf V ^ \ top $. ואכן, יש למקם את הערכים של כל מחשב על אותו וקטור שבו שימש להקרנה; השווה את עלילות המשנה 1 ו- 3. התוצאה ניתנת על ידי $ \ hat {\ mathbf X} = \ mathbf {ZV} ^ \ top = \ mathbf {XVV} ^ \ top $. אני מציג אותו בעלילת המשנה השלישית לעיל. כדי לקבל את השחזור הסופי $ \ hat {\ mathbf X} _ \ text {raw} $, עלינו להוסיף את הווקטור הממוצע $ \ boldsymbol \ mu $ לזה:

$$ \ boxed {\ טקסט {שחזור PCA} = \ טקסט {ציוני מחשב} \ cdot \ text {Eigenvectors} ^ \ top + \ text {Mean}} $$

שים לב שאפשר לעבור ישירות מעלילת המשנה הראשונה לשלישית על ידי הכפלת $ \ mathbf X $ עם מטריצת $ \ mathbf {VV} ^ \ top $; זה נקרא מטריקס הקרנה . אם משתמשים בכל הווקטורים העצמיים $ p $, אז $ \ mathbf {VV} ^ \ top $ היא מטריצת הזהות (לא מבוצעת הפחתת מימדיות, ומכאן ש"שחזור "מושלם). אם משתמשים רק בקבוצת משנה של ווקטורים עצמיים, זה אינו זהות.

זה עובד עבור נקודה שרירותית $ \ mathbf z $ במרחב המחשב; ניתן למפות אותו למרחב המקורי באמצעות $ \ hat {\ mathbf x} = \ mathbf {zV} ^ \ top $.

השלכת (הסרה) של מחשבים מובילים

לפעמים רוצים להשליך (להסיר) אחד או כמה מהמחשבים המובילים ולשמור על השאר, במקום לשמור על המחשבים המובילים ולזרוק את השאר (כמו לעיל). במקרה זה כל הנוסחאות נשארות בדיוק אותו דבר , אך $ \ mathbf V $ צריך להיות מורכב מכל הצירים העיקריים למעט עבור אלה שרוצים להשליך. במילים אחרות, $ \ mathbf V $ צריך לכלול תמיד את כל המחשבים האישיים שרוצים לשמור.

אזהרה לגבי PCA בקורלציה

כאשר ה- PCA נעשה על מטריצת המתאם (ולא על מטריצת המשתנות), הנתונים הגולמיים $ \ mathbf X_ \ mathrm {raw} $ אינם מרוכזים רק על ידי חיסור $ \ boldsymbol \ mu $ אלא גם מוגדלים על ידי חלוקת כל עמודה לפי סטיית התקן $ \ sigma_i $. במקרה זה, כדי לשחזר את הנתונים המקוריים, צריך לשנות את קנה המידה של העמודות $ \ hat {\ mathbf X} $ עם $ \ sigma_i $ ורק אז להוסיף חזרה את הווקטור הממוצע $ \ boldsymbol \ mu $.


דוגמה לעיבוד תמונה

נושא זה עולה לעיתים קרובות בהקשר של עיבוד תמונה. שקול את Lenna - אחת התמונות הסטנדרטיות בספרות עיבוד תמונה (עקוב אחר הקישורים כדי למצוא מאיפה זה בא). למטה משמאל, אני מציג את הגרסה בגווני אפור לתמונה $ 512 \ פעמים 512 $ (קובץ זמין כאן).

Two grayscale versions of the Lenna image. The one on the right is grainy but definitely recognizable.

נוכל להתייחס לתמונה בגווני אפור זו כ- $ 512 \ פעמים 512 $ מטריצת נתונים $ \ mathbf X_ \ text {raw} $. אני מבצע עליו PCA ומחשב $ \ hat {\ mathbf X} _ \ text {raw} $ באמצעות 50 המרכיבים העיקריים הראשונים. התוצאה מוצגת בצד ימין.


החזרת SVD

PCA קשור מאוד לפירוק ערך יחיד (SVD), ראה קשר בין SVD ו- PCA. כיצד להשתמש ב- SVD לביצוע PCA? לפרטים נוספים. אם $ n \ פעמים p $ מטריצה ​​$ \ mathbf X $ הוא SVD-ed כ- $ \ mathbf X = \ mathbf {USV} ^ \ top $ ואחד בוחר $ k $ - וקטור ממדי $ \ mathbf z $ המייצג הנקודה במרחב "U" המופחת "של ממדי $ k $, ואז כדי למפות אותה חזרה ל- $ p $ ממדים צריך להכפיל אותה עם $ \ mathbf S ^ \ phantom \ top_ {1: k, 1: k} \ mathbf V ^ \ top _ {:, 1: k} $.


דוגמאות ב- R, Matlab, Python ו- Stata

אני אנהל PCA על נתוני פישר איריס ואז בנה אותם מחדש באמצעות שני המרכיבים העיקריים הראשונים. אני עושה PCA על מטריצת השונות, ולא על מטריצת המתאם, כלומר אני לא משנה את המשתנים כאן. אבל אני עדיין צריך להוסיף את הממוצע בחזרה. חלק מהחבילות, כמו סטטה, דואגות לכך באמצעות התחביר הסטנדרטי. תודה ל- @StasK ו- @ Kodiologist על עזרתם בקוד.

נבדוק את השחזור של נקודת הנתונים הראשונה, שהיא:

  5.1 3.5 1.4 0.2  קוד> 

Matlab

  load fisheririsX = measure; mu = mean (X); [ ווקטורים עצמיים, ציונים] = pca (X); nComp = 2; Xhat = ציונים (:, 1: nComp) * וקטורים עצמיים (:, 1: nComp) '; Xhat = bsxfun (@plus, Xhat, mu); Xhat (1 , :)  

פלט:

  5.083 3.5174 1.4032 0.21353  

R

  X = iris [, 1: 4] mu = colMeans (X) Xpca = prcomp (X) nComp = 2Xhat = Xpca $ x [, 1 : nComp]% *% t (Xpca $ סיבוב [, 1: nComp]) Xhat = סולם (Xhat, center = -mu, scale = FALSE) Xhat [1,]  

פלט :

  Sepal.Length Sepal.Width Petal.Length Petal.Width 5.0830390 3.5174139 1.4032137 0.2135317  

לדוגמא R מעובדת לשחזור PCA של תמונות ראה גם תשובה זו.

פייתון

  ייבא מטומטם כ npimport sklearn.datasets, sklearn. decompositionX = sklearn.datasets.load_iris (). datamu = np.mean (X, axis = 0) pca = sklearn.decomposition.PCA () pca.fit (X) nComp = 2Xhat = np.dot (pca.transform (X ) [:,: nComp], pca.components _ [: nComp,:]) Xhat + = muprint (Xhat [0,])  

פלט:

  [5.08718247 3.51315614 1.4020428 0.21105556]  

שים לב שזה שונה מעט מהתוצאות בשפות אחרות. הסיבה לכך היא שגרסת פיתון למערך הנתונים של איריס מכילה טעויות.

סטאטה

  קשתית האינטרנט, clearpca sep * pet *, רכיבים (2) covariancepredict _seplen _sepwid _petlen _petwid, fitlist in 1 iris seplen sepwid petlen petwid _seplen _sepwid _petlen _petwid setosa 5.1 3.5 1.4 0.2 5.08303 3.5214. / code> 
ב- MATLAB ניתן לאחזר mu מהפלטים הסטנדרטיים של ה- PCA, וגם לספק את מספר הרכיבים בכניסות.
@Aksakal ניסיתי להפוך את כל שלושת קטעי הקוד לדומים (וברורים ככל האפשר) ככל האפשר;בפרט, רציתי לחשב $ \ mu $ ביד לפני שקראתי ל- pca (), וגם להפעיל PCA עם כל הרכיבים ולהשתמש רק ברכיבי 'nComp' בעת ביצוע מוצר נקודה בין ציונים לווקטורים עצמיים.עכשיו שיניתי את קוד הפייתון כך שיתאים לאותו דפוס.
התייתרתי להוסיף קוד סטטה.@amoeba, אתה יכול בבקשה להוסיף את כותרות כל התחזיות בחבילות אחרות, כדי לראות אם כולנו מקבלים את אותן התשובות?(אם כי לאחר שבחנתי את הקטעים האחרים שלך, אצטרך להדגים כיצד לעשות זאת מהעקרונות הראשונים).
הייתי מסיר מהתשובה את כל מה שלא קשור לתשובה הישירה לשאלה, כמו התמונה ועיבוד התמונה של אותה ילדה חמודה.אם מישהו לא מעוניין בתמונות זה מקשה על הצריכה.זכרו שמי ששואל את השאלה כבר מבולבל עמוקות.
לנה היא מערכת סטנדרטית בערך כמו איריס.
@StasK למרבה הצער, ישנן שינויים קלים בגרסאות שונות של תמונת לנה
@LaurentDuval אני חושב שגרסת הצבע די סטנדרטית (לפחות ויקיפדיה הצביעה על משהו שנראה סטנדרטי), אך הגרסה בגווני אפור לא.את גרסת הצבע המרה בעצמי באמצעות גימפ והגדרות ברירת המחדל שלה.
@amoeba דיברתי על גודל, עומק סיביות, אפילו פיקסלים שחורים בגבול.אין לי גרסה סופית [http://www.ece.rice.edu/~wakin/images/ ](http://www.ece.rice.edu/~wakin/images/): "נראה שישגרסאות רבות של תמונת המבחן של לנה (המכונה "לנה") זמינות. בעיה זו ציין על ידי שפירא במאמר האפסים שלו מ -1993, והיא נותרה נכון באופן מפתיע כיום ".
@LaurentDuval כן, אבל למטה באותו דף הם אומרים (על קובץ הצבעים שהם מספקים) ש"נראה שזה סטנדרט די מקובל ".אני לא יודע יותר מזה.פשוט הורדת אותו משם.
@amoeba רק אזהרה, אני מעבד אות / תמונה בלבד
תודה.- @amoeba.זה יעיל אם תוכל גם להראות כיצד ניתן ליישם את zscoring לפני ולהקרין לבסוף על מערך הנתונים המקורי.
אני יודע שאלה טיפשית, אבל לפעמים אנשים מתבלבלים יש מאין ... אתה מתחיל עם $ Z = XV $, עכשיו $ V $ זה לא מטריצה מרובעת (הורדנו כמה עמודות) אז זה כבר לא אורתוגונלי, אז $VV ^ T \ ne I $ (אבל $ V ^ TV = I $ כי הווקטורים העצמיים הם אורתוגונליים), לכן מכפילים את שני הצדדים של $ Z = XV $ ב- $ V ^ T $ כדי לקבל $ ZV ^ T = XVV ^ T$.אבל עכשיו אתה יכול להכפיל את שני הצדדים בהפוך של $ VV ^ T $ ולקבל $ X = ZV ^ T (VV ^ T) ^ {- 1} $ לא זהה ל- $ ZV ^ T $ שנחשב לשחזור ב- PCA.מה אני מפספס?
@Kochede בכלל לא שאלה מטופשת.עם זאת, חסר לך ש- $ VV ^ \ top $ אין הפוך (זו מטריצה בדרגה נמוכה).
@amoeba, מה שם ה"עומסים "בעת ביטול ה- PCA?כְּלוֹמַר.אם יש לנו $ k $ משתנים $ x_1, \ dots, x_k $ ואנחנו מבטאים $ x_1 = a_1 PC_1 + \ dots + a_k PC_k $ (משתמשים בכל המחשבים, ולא זורקים אף אחד מהם), מה השם של $ a_1 $ עד $ a_k$?(בטח פספסתי את זה בטקסט למעלה אם זה היה שם).
@RichardHardy לא בטוח שאני מבין את שאלתך היטב.האם $ $ $ שלך אינם האלמנטים של ווקטורי העצמיים המתאימים?אם כל הווקטורים העצמיים נערמים כעמודות במטריצה $ V $, אז $ a $ שלך ניתנים על ידי השורה הראשונה של $ V $, כלומר האלמנט הראשון של כל ווקטור עצמי.אבל אני בטוח שאתה יודע את כל זה ... אני לא חושב שיש שם אחר.
תודה @amoeba,.אני יודע משהו על PCA אבל לא מספיק עמוק, אז אני מתבלבל בקלות.פשוט חשבתי שזה יהיה מוזר אם למקדמי הטרנספורמציה ההפוכה (להקרין x על מחשבים אישיים ולא על מחשבים אישיים על x) לא יהיה שם.אבל השאלה האמיתית שלי מגיעה מניתוח גורמים שבו אני רוצה להקרין משתנים מקוריים על גורמים.האם יש שם מונח ל"עומסים "אלה?
@RichardHardy בניתוח גורמים, זה מה שהם "עומסים".אבל הייתי אומר ש- FA איננו נושא כאן, אז שקול לשאול שאלה אחרת שבה תוכל לספק הסבר מפורט יותר על מה שאתה עושה.
@amoeba מדוע שברצונך להשליך מחשבים מובילים עם זוג ראשון?מה היתרון?


שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...