הרצאה 12 - PCA and K-Means

מה נלמד היום

למידה לא מודרכת (Unsupervised Learning)

Unsupervised learning הינה שם כולל למגוון של בעיות בהם אנו מנסים בהינתן מדגם, ללמוד את התכונות של הדגימות או של המדגם כולו. בניגוד ל supervised learning, ב unsupervised learning המדגם יכיל רק אוסף של דגימות (x\boldsymbol{x}), ללא תווית (yy). להלן דוגמאות לכמה בעיות ב unsupervised learning:

  • אשכול (חלוקה לקבוצות).
  • מציאת ייצוג "נוח" יותר של הדגימות.
  • דחיסה.
  • זיהוי אנומליות.
  • למידת הפילוג של הדגימות.

כפי שציינו בעבר, בקורס זה לא נציג את הנושא של unsupervised learning באופן מקיף אלא רק נלמד על שני אלגוריתמים פופולריים מתחום זה, PCA ו K-Means.

מערכת Encoder-Decoder

תצורה נפוצה של מערכות שמטפלות במידע הינה:

במערכת מסוג זה נרצה להשתמש בפונקציית ה encoder על מנת למפות את הוקטור x\boldsymbol{x} לייצוג אלטרנטיבי z\boldsymbol{z} אשר יהיה מתאים יותר לשימושים כל שהם. בכדי לנסות שחזר את x\boldsymbol{x} נוכל להעביר את z\boldsymbol{z} דרך ה decoder.

דוגמאות לשימושים במערכת encoder-decoder הינם:

  • דחיסה: כאן נרצה ש z\boldsymbol{z} יהיה קטן ככל האפשר (במובן של כמות הביט שנדרשים בכדי לייצג אותו).
  • תקשורת: כאן נרצה ש z\boldsymbol{z} יהיה כמה שפחות רגיש לרעשים של התווך.
  • הצפנה: כאן נרצה שפעולת השחזור של x\boldsymbol{x} תהיה כמה שיותר קשה ללא ה decoder המתאים.

הוקטור x~\tilde{\boldsymbol{x}} המתקבל מהפעלה של ה decoder על הוקטור z\boldsymbol{z} נקרא השחזור של x\boldsymbol{x}. בחלק מהמערכות ניתן להגיע לשיחזור מושלם, x~=x\tilde{\boldsymbol{x}}=\boldsymbol{x}, ובחלק מהמערכות לא.

Principle Component Analysis (PCA)

ב PCA ננסה לבנות מערכת encoder-decoder שבה:

  1. אנו מגבילים את האורך של הוקטור z\boldsymbol{z}.
  2. אנו דורשים שה encoder וה decoder יהיו פונקציות אפיניות (affine = linear + offset).
  3. התוחלת של שגיאת השחזור הריבועית E[x~x22]\mathbb{E}\left[\lVert\tilde{\mathbf{x}}-\mathbf{x}\rVert_2^2\right] היא מינימאלית.

מכיוון שהפילוג של x\mathbf{x} לרוב לא יהיה ידוע נשתמש במדגם ונחליף את התוחלת בתוחלת אמפירית על המדגם.

נסמן את האורך של הוקטור z\boldsymbol{z} שאותו אנו מעוניינים לייצר ב KK ואת האורך של x\boldsymbol{x} ב DD ונגדיר את הבעיה באופן יותר פורמאלי. אנו מעוניינים למצוא encoder מהצורה:

z=T1x+b1\boldsymbol{z}=T_1\boldsymbol{x}+\boldsymbol{b}_1

ו decoder מהצורה של:

x~=T2z+b2\tilde{\boldsymbol{x}}=T_2\boldsymbol{z}+\boldsymbol{b}_2

כאשר:

  • T1T_1 הינה מטריצה בגודל K×DK\times D.
  • T2T_2 הינה מטריצה בגודל D×KD\times K.
  • b1\boldsymbol{b}_1 הינה וקטור באורך KK.
  • b2\boldsymbol{b}_2 הינה וקטור באורך DD.

אשר ממזערים את התוחלת האמפירית של שגיאת השחזור הריבועית:

argminT1,T2,b1,b21Ni=1Nx~(i)x(i)22\underset{T_1,T_2,\boldsymbol{b}_1,\boldsymbol{b}_2}{\arg\min} \frac{1}{N}\sum_{i=1}^N\lVert\tilde{\boldsymbol{x}}^{(i)}-\boldsymbol{x}^{(i)}\rVert_2^2

שימושים

ישנם מקרים רבים בהם נרצה למצוא לוקטורים יצוג ממימד נמוך. פעולה זו מכונה הורדת מימד (dimensionality reduction) ודוגמאות למקומות שבהם נרצה להשתמש בפעולה זו הינם:

  1. בחירת מאפיינים לבעיות supervised learning - בהם נרצה להשתמש בוקטורים ממימד נמוך יותר על מנת להקטין את ה overfitting.
  2. ויזואליזציה - בהם נרצה להפוץ וקטורים ממימד גבוה למימד 2 או 3 שאותם אנו יודעים לשרטט.
  3. דחיסה.

הפתרון לבעיית האופטימיזציה

נתחיל בלהציג את הפתרון לבעיה.

הפשטת הבעיה תוך ביטול היתירות

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

b1=T1μb2=μT1=T2=TTT=I\begin{aligned} \boldsymbol{b}_1&=-T_1\boldsymbol{\mu}\\ \boldsymbol{b}_2&=\boldsymbol{\mu}\\ T_1&=T_2^{\top}=T^{\top}\\ T^{\top}T&=I \end{aligned}

לדוגמה, עבור המיפוי הבא

z=T1x+b1x~=T2z+b2T1RK×D,T2RD×K\boldsymbol{z}=T_{1}\boldsymbol{x}+\boldsymbol{b}_{1}\quad\tilde{\boldsymbol{x}}=T_{2}z+\boldsymbol{b}_{2}\quad T_{1}\in\mathbb{R}^{K\times D},\,T_{2}\in\mathbb{R}^{D\times K}

איברי ההטיה b1\boldsymbol{b}_1 ו-b2\boldsymbol{b}_2 יכולים להיקבע ע"י הדרישות

E[z]=0b1=T1μE[\boldsymbol{z}]=0\quad\Rightarrow\quad b_{1}=-T_{1}\boldsymbol{\mu}

ו-

E[x~]=E[x]b2=E[x]=μE\left[\tilde{\boldsymbol{x}}\right]=E\left[\boldsymbol{x}\right]\quad\Rightarrow\quad b_{2}=E\left[x\right]=\boldsymbol{\mu}

כאשר μ=1Ni=1Nx(i)\boldsymbol{\mu}=\frac{1}{N}\sum_{i=1}^N\boldsymbol{x}^{(i)}. הטרנספורמציות במקרה זה הופכות להיות:

z=T(xμ)x~=Tz+μ\begin{aligned} \boldsymbol{z}&=T^{\top}(\boldsymbol{x}-\boldsymbol{\mu})\\ \tilde{\boldsymbol{x}}&=T\boldsymbol{z}+\boldsymbol{\mu} \end{aligned}

ובעיית האופטימיזציה הינה:

T=argminT1Ni=1Nx~(i)x(i)22s.t.TT=IT=argminT1Ni=1N(TTI)(x(i)μ)22s.t.TT=I\begin{aligned} T^*=\underset{T}{\arg\min}\quad&\frac{1}{N}\sum_{i=1}^N\lVert\tilde{\boldsymbol{x}}^{(i)}-\boldsymbol{x}^{(i)}\rVert_2^2\\ \text{s.t.}\quad& T^{\top}T=I\\ T^*=\underset{T}{\arg\min}\quad&\frac{1}{N}\sum_{i=1}^N\lVert(TT^{\top}-I)(\boldsymbol{x}^{(i)}-\boldsymbol{\mu})\rVert_2^2\\ \text{s.t.}\quad& T^{\top}T=I \end{aligned}

שימו לב: TRD×KT\in\mathbb{R}^{D\times K} כך שמתקיים כי TTRK×K=IKT^\top T \in \mathbb{R}^{K\times K}=I_K כאשר IKI_K היא מטריצת היחידה. בנוסף, מתקיים TTRD×DT T^\top \in \mathbb{R}^{D\times D} והיא לא שווה בהכרח ל-IDI_D.

פרשנות גיאומטרית

ראשית נשים לב שה encoder מתחיל בלחסר את הממוצע של x\boldsymbol{x} וה decoder מסיים בלהוסיף אותו בחזרה. נניח מעתה שהנתונים ממורכזים סביב האפס.

נדגים זאת עבור המקרה של D=2D=2 ו K=1K=1:

הטרנספורמציות המתקבלות הינן:

z=Txx~=Tz=TTx\begin{aligned} \boldsymbol{z}&=T^{\top}\boldsymbol{x}\\ \tilde{\boldsymbol{x}}&=T\boldsymbol{z}=TT^{\top}\boldsymbol{x} \end{aligned}

נתייחס כעת לאילוץ של TT=IT^{\top}T=I. נציין רק שאילוץ זה הוא לא הכרחי בשביל שהפתרון יהיה אופטימאלי אך הוא לא מפשט מאד את הבעיה ומקיים ולא פוגע באופטימאליות של הפתרון. אילוץ זה אומר שהעמודות של TT צריכות להיות אורתונורמאליות (אורתוגונאליות ומנורמלות). נסמן את העמודות של TT ב uj\boldsymbol{u}_j:

T=(u1u2uK)T=\begin{pmatrix} | & | & & | \\ \boldsymbol{u}_1 & \boldsymbol{u}_2 & \dots & \boldsymbol{u}_K \\ | & | & & | \end{pmatrix}

הפעולה של x~=TTx\tilde{\boldsymbol{x}}=TT^{\top}\boldsymbol{x}' מטילה את הוקטור x\boldsymbol{x} על תת-המרחב הלינארי הנפרס על ידי הוקטורים uj\boldsymbol{u}_j. נדגים זאת על המקרה הקודם:

הפעולה של z=Tx\boldsymbol{z}=T^{\top}\boldsymbol{x} למעשה גם כן מטילה את x\boldsymbol{x} על אותו תת-מרחב, היא רק משאירה אותו במערכת הצירים אשר מוגדרת על ידי הוקטורים uj\boldsymbol{u}_j:

נסתכל כעת על המשמעות הגיאומטרית של שגיאת השחזור x~x22\lVert\tilde{\boldsymbol{x}}-\boldsymbol{x}\rVert_2^2:

הוקטור x~x\tilde{\boldsymbol{x}}-\boldsymbol{x} הוא וקטור המחבר את x\boldsymbol{x} ל x~\tilde{\boldsymbol{x}}. שגיאת השחזור הריבועית הינה האורך של וקטור זה בריבוע. בעיית האופטימיזציה היא אם כן הבעיה של מציאת תת-המרחב ממימד KK אשר ההטלה של נקודות המדגם עליו הם הקרובות ביותר לנקודות המקוריות.

הבעיה השקולה

מתוך העובדה ש TT=IT^{\top}T=I ניתן להראות ש:

x~x22=x22x~22=x22z22\lVert\tilde{\boldsymbol{x}}-\boldsymbol{x}\rVert_2^2 =\lVert\boldsymbol{x}\rVert_2^2-\lVert\tilde{\boldsymbol{x}}\rVert_2^2 =\lVert\boldsymbol{x}\rVert_2^2-\lVert\boldsymbol{z}\rVert_2^2

שכן, עבור TT=IT^{\top}T=I מתקיים כי (ITT)2=(ITT)\left(I-TT^{\top}\right)^{2}=\left(I-TT^{\top}\right) לכן,

xx~22=xTTx22=(ITT)x22=x(ITT)x=x22z22\begin{aligned} \left\Vert \boldsymbol{x}-\tilde{\boldsymbol{x}}\right\Vert _{2}^{2} & =\left\Vert \boldsymbol{x}-TT^{\top}x\right\Vert _{2}^{2}\\ & =\left\Vert \left(I-TT^{\top}\right)x\right\Vert _{2}^{2}\\ & =\boldsymbol{x}^{\top}\left(I-TT^{\top}\right)\boldsymbol{x}\\ & =\left\Vert \boldsymbol{x}\right\Vert _{2}^{2}-\left\Vert \boldsymbol{z}\right\Vert _{2}^{2} \end{aligned}

ובנוסף

x~22=Tz22=zTTz=z22\left\Vert \tilde{\boldsymbol{x}}\right\Vert _{2}^{2}=\left\Vert T\boldsymbol{z}\right\Vert _{2}^{2}=\boldsymbol{z}^{\top}T^{\top}T\boldsymbol{z}=\left\Vert \boldsymbol{z}\right\Vert _{2}^{2}

כעת נוכל לרשום את בעיית האופטימיזציה באופן הבא:

T=argminT1Ni=1N(x(i)22z(i)22)s.t.TT=I\begin{aligned} T^*=\underset{T}{\arg\min}\quad&\frac{1}{N}\sum_{i=1}^N\left( \lVert\boldsymbol{x}^{(i)}\rVert_2^2 -\lVert\boldsymbol{z}^{(i)}\rVert_2^2 \right)\\ \text{s.t.}\quad& T^{\top}T=I \end{aligned}

נזכור ש x22\lVert\boldsymbol{x}\rVert_2^2 והוא תכונה של הוקטורים במדגם; הם אינם תלויים ב TT ולכן:

T=argminT1Ni=1Nz(i)22s.t.TT=I\begin{aligned} T^*=\underset{T}{\arg\min}\quad&-\frac{1}{N}\sum_{i=1}^N\lVert\boldsymbol{z}^{(i)}\rVert_2^2\\ \text{s.t.}\quad& T^{\top}T=I \end{aligned}

לכן הבעיה של מזעור שגיאת השחזור הריבועית שקולה לבעיה של מקסום הגודל i=1Nz(i)22\sum_{i=1}^N\lVert\boldsymbol{z}^{(i)}\rVert_2^2 אשר מכונה לרוב ה variance של אוסף הוקטורים {z(i)}i=1N\{\boldsymbol{z}^{(i)}\}_{i=1}^N (בפועל זה ה trace של מטריצת ה covariance האמפירית של z\mathbf{z})

הפתרון

בכדי לתאר את הפתרון של בעיות האופטימיזציות האלה (מזעור שגיאת השחזור או מקסום ה variance של z\boldsymbol{z}) נגדיר את המטריצות הבאות:

מטריצת המדידות XX:

X=(x(1)x(2)x(N))=((x(1)μ)(x(2)μ)(x(N)μ))X =\begin{pmatrix} - & \boldsymbol{x}'^{(1)} & -\\ - & \boldsymbol{x}'^{(2)} & -\\ & \vdots & \\ - & \boldsymbol{x}'^{(N)} & -\\ \end{pmatrix} =\begin{pmatrix} - & (\boldsymbol{x}^{(1)}-\boldsymbol{\mu})^{\top} & -\\ - & (\boldsymbol{x}^{(2)}-\boldsymbol{\mu})^{\top} & -\\ & \vdots & \\ - & (\boldsymbol{x}^{(N)}-\boldsymbol{\mu})^{\top} & -\\ \end{pmatrix}

מטריצת ה covariance האמפירית של x\mathbf{x} תהיה: P=XXP=X^{\top}X.

מכיוון ש המטריצה PP היא ממשית וסימטרית מובטח כי ניתן לפרק אותה באופן הבא (ליכסון של המטריצה) P=UΛUP=U\Lambda U^{\top} כאשר UU היא מטריצה אורתונורמלית אשר העמודות שלה הם וקטורים עצמיים של PP:

U=(u1u2uD)U=\begin{pmatrix} | & | & & | \\ \boldsymbol{u}_1 & \boldsymbol{u}_2 & \dots & \boldsymbol{u}_D \\ | & | & & | \end{pmatrix}

ו Λ\Lambda היא מטריצה אלכסונית אשר מכילה את הערכים העצמיים של PP:

Λ=(λ1000λ2000λD)\Lambda=\begin{pmatrix} \lambda_1 & 0 & \dots & 0 \\ 0 & \lambda_2 & & 0 \\ \vdots & & \ddots & \vdots \\ 0 & 0 & \dots & \lambda_D \\ \end{pmatrix}

כך שהערך העצמי λj\lambda_j מתאים לוקטור העצמי uj\boldsymbol{u}_j והערכים העצמיים מסודרים מהגדול לקטן: λ1λ2λD\lambda_1\geq\lambda_2\geq\dots\geq\lambda_D.

בעזרת מטריצות אלו ניתן כעת לרשום את הפתרון למטריצה TT האופטימאלית. מטריצה זו תהיה מטריצה אשר העמודות שלה הם KK העמודות הראשונות במטריצה UU:

T=(u1u2uK)T=\begin{pmatrix} | & | & & | \\ \boldsymbol{u}_1 & \boldsymbol{u}_2 & \dots & \boldsymbol{u}_K \\ | & | & & | \end{pmatrix}

הכיוונים u(j)\boldsymbol{u}^{(j)} מכונים הכיוונים העיקריים והרכיבים של הוקטור z\boldsymbol{z} מכונים הרכיבים העיקריים (principal components).

קווים כלליים לפתרון

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

חישוב ה offsets

ראשית ניתן למצוא תנאי על b1\boldsymbol{b}_1 ו b2\boldsymbol{b}_2 על יד גזירה והשוואה ל-0. תנאי זה הינו:

T2b1+b2=T2T1μ+μT_2\boldsymbol{b}_1+\boldsymbol{b}_2=-T_2T_1\boldsymbol{\mu}+\boldsymbol{\mu}

כאשר μ=1Ni=1Nx(i)\boldsymbol{\mu}=\frac{1}{N}\sum_{i=1}^N\boldsymbol{x}^{(i)}. כאשר כל בחירה של b1\boldsymbol{b}_1 ו b2\boldsymbol{b}_2 שמקיימת את התנאי תהיה אופטימאלית. בפרט נוכל לבחור:

b1=T1μ,b2=μ\boldsymbol{b}_1=-T_1\boldsymbol{\mu} ,\qquad \boldsymbol{b}_2=\boldsymbol{\mu}

ומכאן אנו מקבלית את הטרנספורמציות של:

z=T1(xμ)x~=T2z+μ\begin{aligned} \boldsymbol{z}=T_1(\boldsymbol{x}-\boldsymbol{\mu})\\ \tilde{\boldsymbol{x}}=T_2\boldsymbol{z}+\boldsymbol{\mu} \end{aligned}

הקשר בין T1T_1 ו T2T_2

על ידי קיבוע T2T_2 וחיפוש ה z\boldsymbol{z} אשר ממזער את בעיית האופטימיזציה מקבלים ש:

T1=(T2T2)1T2T_1=(T_2^{\top}T_2)^{-1}T_2^{\top}

בפרט ניתן להראות שניתן לבחור את T2T_2 כך ש T2T2=IT_2^{\top}T_2=I. נסמן את T2=TT_2=T ונקבל ש:

z=Txx~=Tz=TTx\begin{aligned} \boldsymbol{z}=T^{\top}\boldsymbol{x}'\\ \tilde{\boldsymbol{x}}'=T\boldsymbol{z}=TT^{\top}\boldsymbol{x}' \end{aligned}

הפירוק של שגיאת החיזוי

את שגיאת החיזוי הריבועית ניתן לפרק באופן הבא:

x~x22=TTxx22=(TTI)x22=x(TTI)(TTI)x=xTTT=ITx2xTTx+xx=xxxTTx=xxzz=x22z22\begin{aligned} \lVert\tilde{\boldsymbol{x}}-\boldsymbol{x}\rVert_2^2 &=\lVert TT^{\top}\boldsymbol{x}-\boldsymbol{x}\rVert_2^2\\ &=\lVert(TT^{\top}-I)\boldsymbol{x}\rVert_2^2\\ &=\boldsymbol{x}^{\top}(TT^{\top}-I)^{\top}(TT^{\top}-I)\boldsymbol{x}\\ &= \boldsymbol{x}^{\top}T\underbrace{ T^{\top}T }_{=I}T^{\top}\boldsymbol{x} -2\boldsymbol{x}^{\top}TT^{\top}\boldsymbol{x} +\boldsymbol{x}^{\top}\boldsymbol{x}\\ &= \boldsymbol{x}^{\top}\boldsymbol{x} -\boldsymbol{x}^{\top}TT^{\top}\boldsymbol{x}\\ &= \boldsymbol{x}^{\top}\boldsymbol{x} -\boldsymbol{z}^{\top}\boldsymbol{z}\\ &= \lVert\boldsymbol{x}\rVert_2^2 -\lVert\boldsymbol{z}\rVert_2^2 \end{aligned}

מציאת ה TT האופטימאלי

נסתכל על בעיית האופטימיזציה השקולה:

T=argminT1Ni=1Nz(i)22s.t.TT=I=argminT1Ni=1NTx(i)22s.t.TT=I=argminT1Ni=1Nx(i)TTx(i)s.t.TT=I=argminT1Ni=1Ntr(x(i)TTx(i))s.t.TT=I=argminTtr((1Ni=1Nx(i)x(i))TT)s.t.TT=I=argminTtr(XXTT)s.t.TT=I=argminTtr(TPT)s.t.TT=I\begin{aligned} T^*=\underset{T}{\arg\min}\quad&-\frac{1}{N}\sum_{i=1}^N\lVert\boldsymbol{z}^{(i)}\rVert_2^2\\ \text{s.t.}\quad& T^{\top}T=I\\ =\underset{T}{\arg\min}\quad&-\frac{1}{N}\sum_{i=1}^N\lVert T^{\top}\boldsymbol{x}'^{(i)}\rVert_2^2\\ \text{s.t.}\quad& T^{\top}T=I\\ =\underset{T}{\arg\min}\quad&-\frac{1}{N}\sum_{i=1}^N\boldsymbol{x}'^{(i)\top}TT^{\top}\boldsymbol{x}'^{(i)}\\ \text{s.t.}\quad& T^{\top}T=I\\ =\underset{T}{\arg\min}\quad&-\frac{1}{N}\sum_{i=1}^N\text{tr}\left(\boldsymbol{x}'^{(i)\top}TT^{\top}\boldsymbol{x}'^{(i)}\right)\\ \text{s.t.}\quad& T^{\top}T=I\\ =\underset{T}{\arg\min}\quad&-\text{tr}\left(\left(\frac{1}{N}\sum_{i=1}^N\boldsymbol{x}'^{(i)}\boldsymbol{x}'^{(i)\top}\right)TT^{\top}\right)\\ \text{s.t.}\quad& T^{\top}T=I\\ =\underset{T}{\arg\min}\quad&-\text{tr}\left(X^{\top}XTT^{\top}\right)\\ \text{s.t.}\quad& T^{\top}T=I\\ =\underset{T}{\arg\min}\quad&-\text{tr}\left(T^{\top}PT\right)\\ \text{s.t.}\quad& T^{\top}T=I\\ \end{aligned}

ניתן להראות שהפתרון לבעיה זו הינה המטריצה TT שתוארה בפתרון על ידי שימוש באינדוקציה, כאשר מתחילים מ K=1K=1 ומגדילים אותו כל פעם ב 1.

דוגמא

נציג דוגמא לפירוק PCA של תמונות. נתייחס לתמונות בעל וקטור ארוך של פיקסלים. בדומא הבאה נסתכל על תמונות של 381 פיקסלים. 20 הכיוונים העיקריים (הוקטורים העצמיים המתאימים לערכים העצמיים הכי גדולים) הינם:

נציג כעת את התמונה המשוחזרת בעבור ערכים שונים של KK:

אשכול

באלגוריתמי אשכול ננסה לחלק אוסף של פרטים לקבוצות המכונים אשכולות (clusters), כאשר לכל קבוצה איזשהן תכונות דומות.

2 דוגמאות למקרים שבהם נרצה לאשכל אוסף נתונים:

  1. על מנת לבצע הנחות על אחד מהפרטים באשכול על סמך פרטים אחרים באשכול. לדוגמא: להציע ללקוח מסויים בחנות אינטרנט מוצרים על סמך מוצרים שקנו לקוחות אחרים באשכול שלו.
  2. לתת טיפול שונה לכל אשכול. לדוגמא משרד ממשלתי שרוצה להפנות קבוצות שונות באוכלוסיה לערוצי מתן שירות שונים: אפליקציה, אתר אינטרנט, נציג טלפוני או הפניה פיסית למוקד שירות.

אלגוריתמי אשכול שונים

קיימות דרכים רבות לבצע אישכול לאוסף של נתונים. בהתאם לכך קיימים גם מספר רב של אלגוריתמים לעשות כן. בתיעוד של החבילה הפייתונית scikit-learn, בה נעשה שימוש רב בתרגילים הרטובים בקורס, ישנה השוואה בין האשכולות המתקבלים מאלגוריתמים האישכול השונים בחבילה, בעבור שישה toy models דו מימדיים:

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

בקורס זה נלמד על האלגוריתם K-means (העמודה השמאלית ביותר).

K-Means

K-Means הוא אלגוריתם אשכול אשר מנסה לחלק את הדגימות במדגם ל KK קבוצות על סמך המרחק בין הדגימות.

סימונים

  • KK - מספר האשכולות (גודל אשר נקבע מראש).
  • Ik\mathcal{I}_k - אוסף האינדקסים של האשכול ה-kk. לדוגמא: I5={3,6,9,13}\mathcal{I}_5=\left\lbrace3, 6, 9, 13\right\rbrace
  • Ik|\mathcal{I}_k| - גודל האשכול ה-kk (מספר הפרטים בקבוצה)
  • {Ik}k=1K\{\mathcal{I}_k\}_{k=1}^K - חלוקה מסויימת לאשכולות

בעיית האופטימיזציה

בהינתן מדגם D={x(i)}i=1N\mathcal{D}=\{\boldsymbol{x}^{(i)}\}_{i=1}^N, K-Means מנסה למצוא את החלוקה לאשכולות אשר תמזער את המרחק הריבועי הממוצע בין כל דגימה לכל שאר הדגימות שאיתו באותו האשכול. זאת אומרת, K-means מנסה לפתור את בעיית האופטימיזציה הבאה:

argmin{Ij}k=1K1Nk=1K12Iki,jIkx(j)x(i)22\underset{\{\mathcal{I}_j\}_{k=1}^K}{\arg\min}\frac{1}{N}\sum_{k=1}^K\frac{1}{2|\mathcal{I}_k|}\sum_{i,j\in\mathcal{I}_k}\lVert\boldsymbol{x}^{(j)}-\boldsymbol{x}^{(i)}\rVert_2^2

הבעיה השקולה

נגדיר את מרכז המסה של כל אשכול כממוצע של כל הוקטורים באשכול:

μk=1IkiIkx(i)\boldsymbol{\mu}_k=\frac{1}{|\mathcal{I}_k|}\sum_{i\in\mathcal{I}_k}\boldsymbol{x}^{(i)}

ניתן להראות כי בעיית האופטימיזציה המקורית, שקולה לבעיה של מיזעור המרחק הממוצע של הדגימות ממרכז המסה של האשכול:

argmin{Ij}k=1K1Nk=1KiIkx(i)μk22\underset{\{\mathcal{I}_j\}_{k=1}^K}{\arg\min}\frac{1}{N}\sum_{k=1}^K\sum_{i\in\mathcal{I}_k}\lVert\boldsymbol{x}^{(i)}-\boldsymbol{\mu}_k\rVert_2^2

כלומר,

i,jIkKx(i)x(j)22=i,jIkx(i)μk+μkx(j)22=i,jIkx(i)μk22+i,jIkx(j)μk222i,jIk(x(i)μk)(x(j)μk)=2IkiIkx(i)μk222iIk(x(i)μk)jIk(x(j)μk)=2IkiIkx(i)μk22\begin{aligned} \sum_{i,j\in\mathcal{I}_{k}}^{K} & \left\Vert \boldsymbol{x}^{(i)}-\boldsymbol{x}^{(j)}\right\Vert _{2}^{2}=\sum_{i,j\in\mathcal{I}_{k}}\left\Vert \boldsymbol{x}^{(i)}-\boldsymbol{\mu}_{k}+\boldsymbol{\mu}_{k}-\boldsymbol{x}^{(j)}\right\Vert _{2}^{2}\\ = & \sum_{i,j\in\mathcal{I}_{k}}\left\Vert \boldsymbol{x}^{(i)}-\boldsymbol{\mu}_{k}\right\Vert _{2}^{2}+\sum_{i,j\in\mathcal{I}_{k}}\left\Vert \boldsymbol{x}^{(j)}-\boldsymbol{\mu}_{k}\right\Vert _{2}^{2}-2\sum_{i,j\in\mathcal{I}_{k}}\left(\boldsymbol{x}^{(i)}-\boldsymbol{\mu}_{k}\right)^{\top}\left(\boldsymbol{x}^{(j)}-\boldsymbol{\mu}_{k}\right)\\ = & 2\left|\mathcal{I}_{k}\right|\sum_{i\in\mathcal{I}_{k}}\left\Vert \boldsymbol{x}^{(i)}-\boldsymbol{\mu}_{k}\right\Vert _{2}^{2}-2\sum_{i\in\mathcal{I}_{k}}\left(\boldsymbol{x}^{(i)}-\boldsymbol{\mu}_{k}\right)^{\top}\sum_{j\in\mathcal{I}_{k}}\left(\boldsymbol{x}^{(j)}-\boldsymbol{\mu}_{k}\right)\\ = & 2\left|\mathcal{I}_{k}\right|\sum_{i\in I_{k}}\left\Vert \boldsymbol{x}^{(i)}-\boldsymbol{\mu}_{k}\right\Vert _{2}^{2} \end{aligned}

שכן:

iIk(x(i)μk)=Ik1IkiIkx(i)Ikμk=0\sum_{i\in I_{k}}\left( \boldsymbol{x}^{(i)}-\boldsymbol{\mu}_{k}\right) = \left|\mathcal{I}_{k}\right| \cdot \frac{1}{\left|\mathcal{I}_{k}\right|}\sum_{i\in I_{k}}\boldsymbol{x}^{(i)}-\left|\mathcal{I}_{k}\right|\boldsymbol{\mu}_{k} = 0

האלגוריתם

K-mean הוא אלגוריתם חמדן אשר בכל פעם משייך מחדש את הדגימות ומעדכן את המרכזים.

האלגוריתם מאותחל בצעד t=0t=0 על ידי בחירה אקראית של KK מרכזי מסה: {μk}k=1K\{\mu_k\}_{k=1}^K.

בכל צעד tt מבצעים את שתי הפעולות הבאות:

  1. עדכון מחדש של החלוקה לאשכולות {Ik}k=1K\{\mathcal{I}_k\}_{k=1}^K כך שכל דגימה משוייכת למרכז המסה הקרוב עליה ביותר. כלומר אנו נשייך את כל דגימה x\boldsymbol{x} לפי:

    k=argmink[1,K]xμk22k=\underset{k\in[1,K]}{\arg\min} \lVert\boldsymbol{x}-\boldsymbol{\mu}_k\rVert_2^2

    (במקרה של שני מרכזים במרחק זהה נבחר בזה בעל האינדקס הנמוך יותר).

  2. עדכון של מרכזי המסה המסה על פי:

    μk=1IkiIkx(i)\boldsymbol{\mu}_k=\frac{1}{|\mathcal{I}_k|}\sum_{i\in\mathcal{I}_k}\boldsymbol{x}^{(i)}

    (אם Ik=0|\mathcal{I}_k|=0 אז משאירים אותו ללא שינוי)

תנאי העצירה של האלגוריתם הינו כשהאשכולות מפסיקות להשתנות.

אחת הדרכים הנפוצות לאיתחול של {μk}k=1K\{\mu_k\}_{k=1}^K היא לבחור kk נקודות מתוך המדגם.

תכונות

  • מובטח כי פונקציית המטרה (סכום המרחקים מהממוצעים) תקטן בכל צעד.
  • מובטח כי האלגוריתם יעצר לאחר מספר סופי של צעדים.
  • לא מובטח כי האלגוריתם יתכנס לפתרון האופטימאלי, אם כי בפועל במרבית המקרים האלגוריתם מתכנס לפתרון אשר קרוב מאד לאופטימאלי.
  • אתחולים שונים יכולים להוביל לתוצאות שונות.

דוגמא

אתחול (וחלוקה ראשונית לאשכולות):

עדכון המרכזים:

עדכון האשכולות:

עדכון המרכזים:

וחוזר חלילה (הסדר הוא מימין לשמאל):