הערה: בפרק זה נעסוק בסיווג בינארי ונסמן את התוויות של שתי המחלקות ב 1 ו −1.
מסווג לינארי הוא מסווג מהצורה של
h(x)=sign(w⊤x+b)={1−1w⊤x+b>0elseעם w ו- b כל שהם.
המסווג מחלק את המרחב לשני צידיו של המישור:
נסתכל על בעיית סיווג בינארית עם תוויות y=±1.
בעיית אופטימיזציה זו מכונה הבעיה הפרימאלית.
מתוך המשתנים {αi}i=1N ניתן לשחזר את w אופן הבא:
w=i∑αiy(i)x(i). | . | . |
---|---|---|
נקודות רחוקות מה margin | y(i)(w⊤x(i)+b)>1 | αi=0 |
נקודות על ה margin (שהם support vectors) | y(i)(w⊤x(i)+b)=1 | αi≥0 |
תכונות:
. | . | . |
---|---|---|
נקודות שמסווגות נכון ורחוקות מה margin | y(i)(w⊤x(i)+b)>1 | αi=0 |
נקודות על ה margin (שהם support vectors) | y(i)(w⊤x(i)+b)=1 | 0≤αi≤C |
נקודות שחורגות מה margin (גם support vectors) | y(i)(w⊤x(i)+b)=1−ξi | αi=C |
לעיתים, קיימת דרך לחשב בצורה יעילה את הפונקציה K(x1,x2)=Φ(x1)⊤Φ(x2) אשר נקראת פונקציית גרעין
נציג שתי פונקציות גרעין נפוצות:
גרעין פולינומיאלי: K(x1,x2)=(1+x1⊤x2)p
פונקציית המאפיינים שמתאימות לגרעינים אלו מסורבלות לכתיבה ולא נציג אותן כאן.
בשאלה זו נראה שבעבור מדגם המכיל 2 נקודות, אחת מכל מחלקה, הפתרון של בעיית hard SVM יהיה מישור הפרדה שיעבור בדיוק במרכז בין 2 הנקודות, ויהיה ניצב לוקטור המחבר את הנקודות
w=∥x(1)−x(2)∥222(x(1)−x(2)),b=−21(x(1)+x(2))⊤w1) הראו זאת על ידי פתרון הבעיה הדואלית.
הבעיה הדואלית הינה:
{αi}∗={αi}argmaxs.t.i∑αi−21i,j∑y(i)y(j)αiαjx(i)⊤x(j)αi≥0∀ii∑αiy(i)=0נסתכל על האילוץ בשורה האחרונה:
i=1∑2αiy(i)=0⇔α1−α2=0⇔α1=α2=αניתן לפתור את הבעיה על ידי גזירה והשוואה ל0:
⇔⇔dαd2α−2α2∥x(1)−x(2)∥22=02=α∥x(1)−x(2)∥22α=∥x(1)−x(2)∥222את w נמצא על ידי:
w=i∑αiy(i)x(i)=α(x(1)−x(2))=∥x(1)−x(2)∥222(x(1)−x(2))את b מוצאים על ידי בחירת support vector אחד מתוך המשוואה y(i)(w⊤x(i)+b)=1.
הבעיה הפרימלית הינה:
w∗,b∗=w,bargmins.t.21∥w∥2y(i)(w⊤x(i)+b)≥1∀iשני האילוצים שהנקודות אלו מגדירות הם:
⇔⇔⇔{y(1)(w⊤x(1)+b)=1y(2)(w⊤x(2)+b)=1{(w⊤x(1)+b)=1−(w⊤x(2)+b)=1{w⊤x(1)+b=1w⊤x(2)+b=−1{b=−21(x(1)+x(2))⊤ww⊤(x(1)−x(2))=2נוכל להשתמש באילוץ השני ולכתוב בעזרתו את בעיית האופטימיזציה רק על w:
w∗=wargmins.t.21∥w∥2w⊤(x(1)−x(2))=2נתון המדגם הבא:
. | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
y | -1 | -1 | -1 | 1 | 1 | 1 |
x1 | 1 | 1 | 4 | 6 | 7 | 10 |
x2 | 6 | 10 | 11 | 1 | 6 | 4 |
באופן כללי פתרון בעיות מסוג זה באופן ידני הוא קשה, אך בעבור מקרים פשוטים נוכל לפתור זאת תוך שימוש בעיקרון הבא:
ננסה לנחש מהם ה support vectors. נתחיל ב 0 ונגדיל בהדרגה את כמות ה support vectors.
ישנן שתי שלשות שיתכן שיהיו ה support vectors של הפתרון:
מתוך האילוצים נקבל 3 משוואות ב3 נעלמים. בעבור הנקודות {1,3,5} משוואות אלו יהיו:
⎩⎪⎪⎨⎪⎪⎧−((1,6)w+b)=1−((4,11)w+b)=1((7,6)w+b)=1⇔⎩⎪⎪⎨⎪⎪⎧w1+6w2+b=−14w1+11w2+b=−17w1+6w2+b=1הפתרון של מערכת המשוואות הזו הינה w=151(5,−3)⊤ ו b=−152
2) מבלי לפתור את הבעיה הדואלית. אלו ערכים של {αi} בהכרח יתאפסו?
3) מהו הרוחב של ה margin של הפתרון?
ה margin תלוי בגודל של הוקטור w והוא שווה ל:
∥w∥2=52+322⋅15=5.145נתון מדגם המכיל 2 נקודות אחת מכל מחלקה:
x(1)=(1,1)⊤,x(2)=(−1,−1)⊤,y(1)=+1y(2)=−1חשבו את המסווג המתקבל מ hard SVM עם גרעין גאוסי מהצורה K(x1,x2)=exp(−∥x1−x2∥2).
הבעיה הדואלית עם הגרעין הגאוסי הינה:
{αi}∗={αi}argmaxs.t.i∑αi−21i,j∑y(i)y(j)αiαjK(x(i),x(j))αi≥0∀ii∑αiy(i)=0בדומה לתרגיל הראשון נקבל ש:
α1=α2=αנחשב את הערכים של K(x(i),x(j)):
K(x(1),x(1))=exp(0)=1K(x(2),x(2))=exp(0)=1K(x(1),x(2))=exp(−(22+22))=e−8בעיית האופטימיזציה הינה:
α∗=αargmaxs.t.=αargmaxs.t.2α−2α2(K(x(1),x(1))−2K(x(1),x(2))+K(x(2),x(2)))α≥02α−α2(1−e−8)α≥0נגזור ונשווה ל-0:
⇔⇔dαd2α−α2(1−e−8)=01=α(1−e−8)α=1−e−82הוקטור w נתון על ידי: w=∑iαiy(i)Φ(x(i)). נכתוב את הביטוי w⊤Φ(x) בעבור נקודה כל שהיא x:
w⊤Φ(x)=i∑αiy(i)Φ(x(i))⊤Φ(x)=i∑αiy(i)K(x(i),x)=1−e−81(K(x(1),x)−K(x(2),x))נחשב את b על ידי שימוש בנקודה הראשונה:
1⇔b⇔b⇔b=y(1)(w⊤Φ(x(1))+b)=1−w⊤Φ(x(1))=1−1−e−81(K(x(1),x(1))−K(x(2),x(1)))=1−1−e−81(1−e−8)=0המסווג הינו:
h(x)=sign(w⊤Φ(x)+b)=sign(1−e−81(K(x(1),x)−K(x(2),x)))=sign(K(x(1),x)−K(x(2),x))=sign(exp(−∥x(1)−x∥2)−exp(−∥x(2)−x∥2))=sign(∥x(2)−x∥2−∥x(1)−x∥2)=sign((x1+1)2+(x2+1)2−(x1−1)2−(x2−1)2)=sign(2x1+2x2)=sign(x1+x2)בחלק זה, ננסה להשתמש ב- SVM כדי לזהות את מינו של הדובר באמצעות קולו. מוטיבציה למערכת כזאת יכולה להיות עוזר וירטואלי שרוצה לפנות לדובר לפי מינו. הרחבה לניסיון זה יכולה להיות זיהוי דובר על סמך קולו וכו'.
הרעיון וה- DATA נלקחו מ- Dataset והערכת ביצועים של קורי בקר, אשר נמצאים באתר הבא. בפרוייקט זה נאספו 3168 דגימות קול מתוייגות מהמקורות הבאים:
כל רצועת קול עברה עיבוד באמצעות כלי בשם WarbleR בכדי לייצר 20 Features לכל דגימה:
נציג מספר עמודות ושורות מן המדגם:
label | meanfreq | sd | median | Q25 | Q75 | IQR | skew | kurt | |
---|---|---|---|---|---|---|---|---|---|
0 | male | 0.059781 | 0.0642413 | 0.0320269 | 0.0150715 | 0.0901934 | 0.075122 | 12.8635 | 274.403 |
1 | male | 0.0660087 | 0.06731 | 0.0402287 | 0.0194139 | 0.0926662 | 0.0732523 | 22.4233 | 634.614 |
2 | male | 0.0773155 | 0.0838294 | 0.0367185 | 0.00870106 | 0.131908 | 0.123207 | 30.7572 | 1024.93 |
3 | male | 0.151228 | 0.0721106 | 0.158011 | 0.0965817 | 0.207955 | 0.111374 | 1.23283 | 4.1773 |
4 | male | 0.13512 | 0.0791461 | 0.124656 | 0.0787202 | 0.206045 | 0.127325 | 1.10117 | 4.33371 |
5 | male | 0.132786 | 0.0795569 | 0.11909 | 0.067958 | 0.209592 | 0.141634 | 1.93256 | 8.3089 |
6 | male | 0.150762 | 0.0744632 | 0.160106 | 0.0928989 | 0.205718 | 0.112819 | 1.53064 | 5.9875 |
7 | male | 0.160514 | 0.0767669 | 0.144337 | 0.110532 | 0.231962 | 0.12143 | 1.39716 | 4.76661 |
8 | male | 0.142239 | 0.0780185 | 0.138587 | 0.0882063 | 0.208587 | 0.120381 | 1.09975 | 4.07028 |
9 | male | 0.134329 | 0.08035 | 0.121451 | 0.07558 | 0.201957 | 0.126377 | 1.19037 | 4.78731 |
הפילוג של התוויות (גברים נשים) במדגם הינו:
נציג את ההיסטוגרמה של כל אחד מהמאפיינים בעבור כל אחד מתוויות:
ננסה לפתור את בעיית הסיווג של מין הדובר בעזרת soft SVM. נרצה לשם כך לפתור את בעיית האופטימיזציה הבאה (הבעיה הדואלית):
{αi}∗={αi}argmaxs.t.i∑αi−21i,j∑y(i)y(j)αiαjx(i)⊤x(j)0≤αi≤C∀ii∑αiy(i)=0כרגיל נחלק את המדגם ל 60%-20%-20% שהם train-validation-test.
חשוב לנרמל את העמודות של המדגם לפני הרצת האלגוריתם משתי סיבות עיקריות:
נשתמש באופטימיזציה נומרית על מנת למצוא את הפרמטרים של משטח ההפרדה. לשם המחשה נשרטט את הפילוג של ה signed distance של הנקודות בכל אחת מהמחלקות
ניתן לראות כי המשטח באמת מצליח לחלק את המדגם, עד כדי כמה נקודות שחורגות.
ה miscalssification rate שמתקבל על ה test set הינו 0.028.
נבחן סדרה של ערכי C בתחום 10−3 עד 103. כרגיל, בעבור כל ערך נבנה מסווג ונבחן אותו על ה validation set. נקבל את התוצאה הבאה:
קיבלנו כי הערך שאיתו התחלנו של C=1 הוא האופטימאלי מבין הערכים שבחרנו.