logo

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

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

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

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

דוגמא:

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

כמה נקודות מפתח לגבי MLR:

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

משוואת MLR:

ברגרסיה לינארית מרובה, משתנה היעד (Y) הוא שילוב ליניארי של משתני מנבא מרובים x1, איקס2, איקס3, ...,איקסנ. מכיוון שזהו שיפור של רגרסיה ליניארית פשוטה, אז אותו הדבר מיושם עבור משוואת הרגרסיה הליניארית המרובה, המשוואה הופכת:

 Y= b<sub>0</sub>+b<sub>1</sub>x<sub>1</sub>+ b<sub>2</sub>x<sub>2</sub>+ b<sub>3</sub>x<sub>3</sub>+...... bnxn ............... (a) 

איפה,

Y= משתנה פלט/תגובה

git להוסיף הכל

ב0, ב1, ב2, ב3, בנ....= מקדמים של המודל.

איקס1, איקס2, איקס3, איקס4,...= משתנה עצמאי/תכונה שונים

הנחות עבור רגרסיה לינארית מרובה:

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

יישום מודל רגרסיה ליניארית מרובה באמצעות Python:

כדי ליישם MLR באמצעות Python, יש לנו את הבעיה הבאה:

תיאור הבעיה:

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

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

    שלבי עיבוד מוקדם של נתונים התאמת דגם ה-MLR לסט האימונים חיזוי תוצאת מערך הבדיקה

שלב 1: שלב עיבוד נתונים מראש:

הצעד הראשון הואייבוא ​​ספריות:ראשית, נייבא את הספרייה שתעזור בבניית המודל. להלן הקוד עבורו:

 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 
    מייבא מערך נתונים:כעת נייבא את מערך הנתונים (50_CompList), המכיל את כל המשתנים. להלן הקוד עבורו:
 #importing datasets data_set= pd.read_csv(&apos;50_CompList.csv&apos;) 

תְפוּקָה: נקבל את מערך הנתונים כ:

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

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

    חילוץ משתנים תלויים ובלתי תלויים:
 #Extracting Independent and dependent Variable x= data_set.iloc[:, :-1].values y= data_set.iloc[:, 4].values 

תְפוּקָה:

בחוץ[5]:

 array([[165349.2, 136897.8, 471784.1, &apos;New York&apos;], [162597.7, 151377.59, 443898.53, &apos;California&apos;], [153441.51, 101145.55, 407934.54, &apos;Florida&apos;], [144372.41, 118671.85, 383199.62, &apos;New York&apos;], [142107.34, 91391.77, 366168.42, &apos;Florida&apos;], [131876.9, 99814.71, 362861.36, &apos;New York&apos;], [134615.46, 147198.87, 127716.82, &apos;California&apos;], [130298.13, 145530.06, 323876.68, &apos;Florida&apos;], [120542.52, 148718.95, 311613.29, &apos;New York&apos;], [123334.88, 108679.17, 304981.62, &apos;California&apos;], [101913.08, 110594.11, 229160.95, &apos;Florida&apos;], [100671.96, 91790.61, 249744.55, &apos;California&apos;], [93863.75, 127320.38, 249839.44, &apos;Florida&apos;], [91992.39, 135495.07, 252664.93, &apos;California&apos;], [119943.24, 156547.42, 256512.92, &apos;Florida&apos;], [114523.61, 122616.84, 261776.23, &apos;New York&apos;], [78013.11, 121597.55, 264346.06, &apos;California&apos;], [94657.16, 145077.58, 282574.31, &apos;New York&apos;], [91749.16, 114175.79, 294919.57, &apos;Florida&apos;], [86419.7, 153514.11, 0.0, &apos;New York&apos;], [76253.86, 113867.3, 298664.47, &apos;California&apos;], [78389.47, 153773.43, 299737.29, &apos;New York&apos;], [73994.56, 122782.75, 303319.26, &apos;Florida&apos;], [67532.53, 105751.03, 304768.73, &apos;Florida&apos;], [77044.01, 99281.34, 140574.81, &apos;New York&apos;], [64664.71, 139553.16, 137962.62, &apos;California&apos;], [75328.87, 144135.98, 134050.07, &apos;Florida&apos;], [72107.6, 127864.55, 353183.81, &apos;New York&apos;], [66051.52, 182645.56, 118148.2, &apos;Florida&apos;], [65605.48, 153032.06, 107138.38, &apos;New York&apos;], [61994.48, 115641.28, 91131.24, &apos;Florida&apos;], [61136.38, 152701.92, 88218.23, &apos;New York&apos;], [63408.86, 129219.61, 46085.25, &apos;California&apos;], [55493.95, 103057.49, 214634.81, &apos;Florida&apos;], [46426.07, 157693.92, 210797.67, &apos;California&apos;], [46014.02, 85047.44, 205517.64, &apos;New York&apos;], [28663.76, 127056.21, 201126.82, &apos;Florida&apos;], [44069.95, 51283.14, 197029.42, &apos;California&apos;], [20229.59, 65947.93, 185265.1, &apos;New York&apos;], [38558.51, 82982.09, 174999.3, &apos;California&apos;], [28754.33, 118546.05, 172795.67, &apos;California&apos;], [27892.92, 84710.77, 164470.71, &apos;Florida&apos;], [23640.93, 96189.63, 148001.11, &apos;California&apos;], [15505.73, 127382.3, 35534.17, &apos;New York&apos;], [22177.74, 154806.14, 28334.72, &apos;California&apos;], [1000.23, 124153.04, 1903.93, &apos;New York&apos;], [1315.46, 115816.21, 297114.46, &apos;Florida&apos;], [0.0, 135426.92, 0.0, &apos;California&apos;], [542.05, 51743.15, 0.0, &apos;New York&apos;], [0.0, 116983.8, 45173.06, &apos;California&apos;]], dtype=object) 

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

קידוד משתני דמה:

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

 #Catgorical data from sklearn.preprocessing import LabelEncoder, OneHotEncoder labelencoder_x= LabelEncoder() x[:, 3]= labelencoder_x.fit_transform(x[:,3]) onehotencoder= OneHotEncoder(categorical_features= [3]) x= onehotencoder.fit_transform(x).toarray() 

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

תְפוּקָה:

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

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

verilog תמיד

הערה:אל לנו להשתמש בכל משתני הדמה בו-זמנית, אז זה חייב להיות 1 פחות מהמספר הכולל של משתני הדמה, אחרת זה יצור מלכודת משתני דמה.

  • כעת, אנו כותבים שורת קוד אחת רק כדי להימנע ממלכודת משתנה הדמה:
 #avoiding the dummy variable trap: x = x[:, 1:] 

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

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

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

  • כעת נחלק את מערך הנתונים למערך הדרכה ובדיקות. הקוד לכך ניתן להלן:
 # Splitting the dataset into training and test set. from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test= train_test_split(x, y, test_size= 0.2, random_state=0) 

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

תְפוּקָה: הקוד לעיל יפצל את מערך הנתונים לסט הדרכה ולסט מבחן. אתה יכול לבדוק את הפלט על ידי לחיצה על אפשרות סייר המשתנה שניתנה ב-Spyder IDE. ערכת המבחנים וערכת האימונים ייראו כמו התמונה הבאה:

סט מבחן:

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

ערכת אימונים:

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

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

שלב: 2- התאמת דגם ה-MLR שלנו לסט האימון:

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

 #Fitting the MLR model to the training set: from sklearn.linear_model import LinearRegression regressor= LinearRegression() regressor.fit(x_train, y_train) 

תְפוּקָה:

 Out[9]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False) 

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

שלב: 3- חיזוי של תוצאות מערך הבדיקות:

השלב האחרון עבור המודל שלנו הוא בדיקת ביצועי הדגם. אנו נעשה זאת על ידי חיזוי תוצאת הבדיקה. לצורך חיזוי, ניצור א y_pred וֶקטוֹר. להלן הקוד עבורו:

 #Predicting the Test set result; y_pred= regressor.predict(x_test) 

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

תְפוּקָה:

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

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

  • אנחנו יכולים גם לבדוק את הציון עבור מערך הנתונים של אימון ומערך הנתונים של הבדיקה. להלן הקוד עבורו:
 print(&apos;Train Score: &apos;, regressor.score(x_train, y_train)) print(&apos;Test Score: &apos;, regressor.score(x_test, y_test)) 

תְפוּקָה: הציון הוא:

 Train Score: 0.9501847627493607 Test Score: 0.9347068473282446 

הציון לעיל אומר שהמודל שלנו מדויק ב-95% עם מערך ההדרכה ו-93% מדויק במערך הבדיקה.

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

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

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

  • האפקטיביות של משתנה בלתי תלוי בחיזוי:
  • חיזוי ההשפעה של שינויים:

הצהרת bash if