רגרסיה לוגיסטית בפייתון Scikit-Learn

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp
Share on email
פרסומת
MAGNEZIX מגנזיקס


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

רקע רגרסיה לינארית

בואו נסקור לינארי נְסִיגָה. בהתחשב בנתוני האימון, אנו מחשבים קו המתאים לנתוני האימון הללו כך שהמרחק הריבוע המסוכם בין הקו לנתוני האימון יהיה מינימלי.

קו זה יכול לשמש להרבה דברים – למשל לחיזוי התוצאה עבור נתוני קלט שלא נראים x. באופן כללי, רגרסיה ליניארית מעולה לחיזוי ערך תפוקה רציף y, ניתן ערך קלט רציף x. ערך רציף יכול לקחת אינסוף ערכים. לדוגמה, נוכל לחזות את מחיר המניה (תפוקה y), בהתחשב במספר הפוסטים ברשתות החברתיות שמזכירות את החברה שמשתקף ממחיר המניות (קלט x). מחיר המניה הוא רציף מכיוון שהוא יכול לקבל על עצמו כל ערך של 123.45 דולר, 121.897 דולר או 10,198.87 דולר.

רגרסיה לוגיסטית ותפקוד סיגמואידי

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

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

חיזוי הסבירות לתוצאות קטגוריות הוא המניע העיקרי לרגרסיה לוגיסטית.

בעוד שרגרסיה לינארית מתאימה לקו לנתוני האימון, רגרסיה לוגיסטית מתאימה לעיקול בצורת S, הנקרא "פונקציית הסיגמואיד". למה? מכיוון שהקו עוזר לך ליצור ערך פלט חדש לכל קלט. מצד שני, העקומה בצורת S עוזרת לך לקבל החלטות בינאריות (למשל כן / לא). עבור מרבית ערכי הקלט, פונקציית ה- sigmoid תחזיר ערך שקרוב מאוד ל 0 או קרוב מאוד ל -1. יחסית לא סביר שערך הקלט הנתון שלך מייצר ערך שנמצא בין לבין.

הנה דוגמה גרפית לתרחיש כזה:

דוגמה לתפקוד Sigmoid

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

בדוק את הדוגמה הבאה:

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

אם ההסתברות הניתנת על ידי פונקציית הסיגמויד גבוהה מ- 50%, המודל מנבא "חיובי לסרטן הריאות"אחרת, זה מנבא "סרטן ריאות שלילי".

אז איך לבחור את פונקציית הסיגמואיד הנכונה המתאימה ביותר לנתוני האימון?

זו השאלה העיקרית לרגרסיה לוגיסטית. התשובה היא מַקסִימוּם סְבִירוּת. במילים אחרות, איזו פונקציה של סיגמויד תפיק את נתוני האימון שנצפו בסבירות הגבוהה ביותר?

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

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

רגרסיה לוגיסטית עם sklearn.linear_model

בואו לתכנת את הראשון שלכם אפליקציית doc וירטואלית באמצעות רגרסיה לוגיסטית – בא שורה בודדת של קוד פייתון!

from sklearn.linear_model import LogisticRegression
import numpy as np


## Data (#cigarettes, cancer)
X = np.array([[0, "No"],
              [10, "No"],
              [60, "Yes"],
              [90, "Yes"]])


## One-liner
model = LogisticRegression().fit(X[:,0].reshape(-1,1), X[:,1])


## Result & puzzle
print(model.predict([[2],[12],[13],[40],[90]]))

תרגיל: מה הפלט של קטע הקוד הזה? לנחש!

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

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

במקרה שלנו, יש לנו רק ערך תכונה יחיד ולכן אנו הופכים את הקלט שלנו לווקטור עמודות באמצעות ה- reshape() פעולה שמייצרת דו מימד NumPy מַעֲרָך. הארגומנט הראשון מציין את מספר השורות, והשני מציין את מספר העמודות. אכפת לנו רק ממספר העמודות שהיא אחת. NumPy קובע את מספר השורות באופן אוטומטי בעת שימוש בפרמטר "דמה" -1.

כך נראים נתוני אימון הקלט (ללא תוויות) לאחר המרתם באמצעות פעולת הצורה מחדש:

[[0],
 [10],
 [60],
 [90]]

לאחר מכן, אנו חוזים אם לחולה יש סרטן ריאות, בהתחשב במספר הסיגריות שהוא מעשן: 2, 12, 13, 40, 90 סיגריות.

הנה הפלט:

## Result & puzzle
print(model.predict([[2],[12],[13],[40],[90]]))
# ['No' 'No' 'Yes' 'Yes' 'Yes']

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

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

for i in range(20):
    print("x=" + str(i) + " --> " + str(model.predict_proba([[i]])))

    
'''
x=0 --> [[0.67240789 0.32759211]]
x=1 --> [[0.65961501 0.34038499]]
x=2 --> [[0.64658514 0.35341486]]
x=3 --> [[0.63333374 0.36666626]]
x=4 --> [[0.61987758 0.38012242]]
x=5 --> [[0.60623463 0.39376537]]
x=6 --> [[0.59242397 0.40757603]]
x=7 --> [[0.57846573 0.42153427]]
x=8 --> [[0.56438097 0.43561903]]
x=9 --> [[0.55019154 0.44980846]]
x=10 --> [[0.53591997 0.46408003]]
x=11 --> [[0.52158933 0.47841067]]
x=12 --> [[0.50722306 0.49277694]]
x=13 --> [[0.49284485 0.50715515]]
x=14 --> [[0.47847846 0.52152154]]
x=15 --> [[0.46414759 0.53585241]]
x=16 --> [[0.44987569 0.55012431]]
x=17 --> [[0.43568582 0.56431418]]
x=18 --> [[0.42160051 0.57839949]]
x=19 --> [[0.40764163 0.59235837]]
'''

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

לוגיסטיקה שיטות רגרסיה

בדוגמה הקודמת יצרת א LogisticRegression חפץ באמצעות הבנאי הבא:

sklearn.linear_model.LogisticRegression(penalty='l2', *, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver="lbfgs", max_iter=100, multi_class="auto", verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)

ברוב המקרים אינך צריך להגדיר את כל הטיעונים – או אפילו להבין אותם בעל פה. פשוט התחל מהשימוש בדוגמה הבסיסית ביותר והתאם אישית כפי שאתה LogisticRegression בכיתה יש הרבה יותר שיטות עוזרות. תוכלו לבדוק אותם כאן (מָקוֹר):

שֵׁם תיאור
decision_function(X) חיזו ציוני ביטחון לדגימות.
densify() המרת מטריצת מקדם לפורמט מערך צפוף.
fit(X, y[, sample_weight]) התאם את המודל על פי נתוני האימון הנתונים.
get_params([deep]) קבל פרמטרים עבור אומדן זה.
predict(X) לחזות תוויות מחלקה לדוגמאות ב X.
predict_log_proba(X) ניבא לוגריתם של אומדני הסתברות.
predict_proba(X) אומדני הסתברות.
score(X, y[, sample_weight]) החזר את הדיוק הממוצע על נתוני הבדיקה והתוויות הנתונות.
set_params(**params) הגדר את הפרמטרים של אומדן זה.
sparsify() המרת מטריצת מקדם לפורמט דליל.

סיכום

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

אם אתה מרגיש תקוע בפייתון ואתה צריך להיכנס לשלב הבא בקידוד פייתון, אל תהסס להיכנס לקורס הדוא"ל שלי בפיתון בחינם ב 100% עם הרבה גליונות צ'יט, שיעורי פיתון, תחרויות קוד, וכיף!

הדרכה זו מבוססת באופן רופף על שלי פייתון One-Liners פרק ספר. תבדוק את זה!

ספר פייתון One-Liners: שלט ראשון בשורה היחידה!

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

פייתון One-Liners

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

חמשת הפרקים של הספר מכסים (1) טיפים וטריקים, (2) ביטויים רגולריים, (3) למידת מכונה, (4) נושאים מרכזיים למדעי נתונים ו- (5) אלגוריתמים שימושיים.

הסברים מפורטים על …

.



קישור לכתבת המקור – 2021-07-17 15:22:00

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn
Share on telegram
Telegram
Share on whatsapp
WhatsApp
Share on email
Email
פרסומת
X-ray_Promo1

עוד מתחומי האתר