קטגוריות
בינה מלאכותית למידת מכונה קורסים

קורס למידת מכונה – שבוע 2: רגרסיה ליניארית עם מספר משתנים, התאמת מאפיינים

רוצים להיות מעודכנים בכל מה שעולה ולא לפספס שום דבר? הרשמו למינוי למייל: (שימו לב - אם נרשמתם ל"הכל", לא צריך לסמן גם את השאר - אתם סתם תקבלו מיילים כפולים)

Lists*

Loading

שבוע 2

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

הערה – אם אתם גולשים מהנייד, חלק מהנוסחאות עלולות "להימרח" לצדדים. סובבו את המכשיר לרוחב אם זה קורה.

רגרסיה ליניארית עם משתנים מרובים

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

נסמן:

$n$ – מספר המאפיינים.

$x^{(i)}$ – שורה שלמה של מאפיינים. נסתכל עליהם כעל וקטור של מאפיינים. ובהתאמה, $x_j^{(i)}$ יהיה המשתנה המסוים j מתוך השורה $x^{(i)}$.

בהתאם, ההיפותזה שלנו תגדל לנוסחה הבאה:

$$h_\theta(x) = \theta_0+\theta_1x_1+\theta_2x_2+…+\theta_Nx_n$$

אם שמתם לב שהתחלנו מ$x_1$ ולא מ$x_0$ זו לא טעות, ועושים זאת מטעמי נוחות. כדי לכלול את כל הת'טות, נקבע ש$x_0$ = 1  ונצרף אותו ל$\theta_0$.

ובהמשך לכך, גם אלגוריתם מורד הגראדינט כעת יורחב למקרה הכללי של n משתנים, ויראה כך:

המשך עד להתכנסות:

$$\theta_j := \theta_j − \alpha \frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)}) – y^{(i)}) \cdot x_j^{(i)} \quad\quad for \quad j:= 0…n$$

התאמת מאפיינים (Feature scaling) ונרמול ע"פ ממוצע (Mean normalization)

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

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

בנוסף לכך, כדי לגרום לכל המשתנים לסוב סביב אותם מספרים, נחסיר מכל ערך את ממוצע הערכים, וזהו הנרמול ע"פ ממוצע. בסך הכל כל ערך שלנו ייראה כך:

$$ x_i =\frac{x_i – \mu_i}{s_i} $$

כש $\mu_i$  הוא הממוצע של ערכי מאפיין i, ו$s_i$ הוא השונות של הערכים של המאפיין i. למי שלא חזק בתחום השונות – נתייחס ל$s_i$ כטווח הערכים (הערך הכי גבוה מינוס הערך הכי נמוך).

(הערה: התשובות שונות לפי הדרך שבה התייחסנו ל$s_i$ , בשאלונים מסתכלים על הטווח, בתרגילי בית מוגדר כשונות).

ישנו טיפ שניתן לעשות כדי לגרום למורד הגרדיאנט לעבוד כמו שצריך, והוא להציג את $J_\theta$ כפונקציה של מספר החזרורים (איטרציות) של האלגוריתם – וכך, לפי גרף הפונקציה שיתקבל, נוכל להבין האם ומתי האלגוריתם מתכנס. אם הוא לא מתנהג כמו שצריך, נדע להקטין את קצב הלמידה ($\alpha$). מצד שני חשוב לזכור שאם נבחר קצב למידה קטן מידי, לאלגוריתם עלול לקחת זמן גבוה מאוד להתכנס.

בחירת מאפיינים נכונים ורגרסיה פולינומלית

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

בנוסף לכך, הרגרסיה אינה חייבת לשמש רק לשיטות ליניאריות. גם אם יש לנו מידע שנראה שיתאים לו גרף פונקציה לא-ליניאירי דווקא, נוכל לשנות את ההסתכלות על המשתנים עצמם כדי להתאים את הפונקציה. לדוגמה, אם יש לנו מאפיין אחד בלבד שהוא שטח הבית, נייצר ממנו שני משתנים – $x_1$ שיהיה שטח הבית, ו$x_2$ שיהיה שורש שטח הבית. ב"פיצול" הזה הרווחנו גם פונקציה שמוגדרת טוב יותר בגלל הצורה שהשורש נותן לפונקציה, וגם להמשיך להסתמך על המאפיין שלנו בלי עזרים נוספים.

פתרון דרך משוואה נורמלית (Normal Equation)

במקום לרוץ על אלגוריתם מורד הגרדיאנט שוב ושוב, לחלק מבעיות של רגרסיה ליניארית ניתן לחשב ישירות את הת'טות שלנו בעזרת שיטה שנקראת משוואה נורמלית, שכמו בחשבון בתיכון, מבוססת על הרעיון להשוואה של כל המשוואות שלנו ל0 כדי למצוא לכל $\theta$ את הערך המינימלי שלה.

הרעיון הוא לקחת את כל הרשימות מידע שיש לנו וליצור מהן מטריצה שנסמנה כX, בה כל שורה תהיה בדיוק שורה מהמידע שלנו, כמובן בתוספת של עמודה של אחדים שמציינים את הערך של המשתנה $x_0$ שאנו מגדירים כ1. מטריצה זו לפעמים נקראת גם "design matrix". נעשה כמה טריקים על המטריצה הזו והמשוואה שלנו תיראה כך:

$$ \theta = (X^T \cdot X)^{-1} X^T y $$

אין צורך להשתמש בfeature scaling  בשיטה זו.

אם זה כל מה שצריך כדי למצוא את הערכים שלנו, אז בשביל מה להתאמץ בכלל על מורד הגרדיאנט? טוב ששאלתם. אמנם בשיטה זו אין צורך לחשב שוב ושוב וגם אין צורך למצוא את קצב הלמידה המיטבי, אך הכפלת מטריצות היא לא עסק פשוט בכלל, ועבור n (מס' תצפיות) גדול מאוד, נקבל הכפלות של מטריצות בגודל nXn שהולכות לקחת המון זמן לחישוב (ביחד עם זמן חישוב של בערך $O(n^3)$ להפיכת מטריצה), מה שמורד הגרדיאנט דווקא כן יוכל להתמודד איתו בהצלחה. הוא לעומתו לוקח $O(kn^2)$  (כשכn זה מספר התצפיות כמו שאמרנו, וk זה מספר המאפיינים).

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

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

מסתבר שבמקרים שזה כן קורה לאלגוריתם שלנו, זה נובע לרוב מ2 סיבות מרכזיות: האחת, שקיימים אצלנו מאפיינים תלויים (לדוג' מאפיין אחד הוא גודל הבית באינץ' והשני בסנטימטרים), מה שהורס את ההפיכות של המטריצה, והשנייה, שאנו מכניסים יותר מידי מאפיינים על סט קטן מידי של מידע. בקיצור, מתי שאפשר – מומלץ למחוק ולצמצם מאפיינים.

סיימנו את השבוע השני, למעבר לשבוע השלישי, לחצו כאן!

שאלה\הערה? כתבו לנו בתגובות למטה

2 תגובות על “קורס למידת מכונה – שבוע 2: רגרסיה ליניארית עם מספר משתנים, התאמת מאפיינים”

יש לכם טעות בפסקה השלישית מהסוף שדנה בגודל הערך n.
כאשר n>10,000 ההמלצה היא להשתמש במורד גדריאנט ולא במשוואה הנורמלית.
כאשר n<10,000 כנראה שהמשוואה הנורמלית עדיפה על מורד גרדיאנט (לפי אנדרו).

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *