في الموضوع السابق، تعرفنا على الانحدار الخطي البسيط، حيث يتم استخدام متغير مستقل/متوقع (X) واحد لنمذجة متغير الاستجابة (Y). ولكن قد تكون هناك حالات مختلفة يتأثر فيها متغير الاستجابة بأكثر من متغير متنبئ؛ وفي مثل هذه الحالات، يتم استخدام خوارزمية الانحدار الخطي المتعدد.
علاوة على ذلك، يعد الانحدار الخطي المتعدد امتدادًا للانحدار الخطي البسيط حيث يتطلب الأمر أكثر من متغير توقع للتنبؤ بمتغير الاستجابة. يمكننا تعريفها على النحو التالي:
يعد الانحدار الخطي المتعدد إحدى خوارزميات الانحدار المهمة التي تصمم العلاقة الخطية بين متغير مستمر تابع واحد وأكثر من متغير مستقل.
مثال:
التنبؤ بـ CO2الانبعاثات تعتمد على حجم المحرك وعدد الأسطوانات في السيارة.
بعض النقاط الرئيسية حول MLR:
- بالنسبة إلى MLR، يجب أن يكون المتغير التابع أو المستهدف (Y) هو المستمر/الحقيقي، ولكن قد يكون المتغير المتنبئ أو المستقل ذو شكل مستمر أو قاطع.
- يجب أن يمثل كل متغير ميزة العلاقة الخطية مع المتغير التابع.
- يحاول MLR ملاءمة خط الانحدار من خلال مساحة متعددة الأبعاد لنقاط البيانات.
معادلة MLR:
في الانحدار الخطي المتعدد، المتغير المستهدف (Y) هو مزيج خطي من متغيرات التوقع المتعددة x1، س2، س3، ...،xن. نظرًا لأنه تحسين للانحدار الخطي البسيط، لذلك يتم تطبيق الشيء نفسه على معادلة الانحدار الخطي المتعدد، تصبح المعادلة:
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= متغير الإخراج/الاستجابة
كيف اخترعت المدرسة
ب0، ب1، ب2، ب3، بن....= معاملات النموذج.
س1، س2، س3، س4،...= متغيرات مستقلة/متعددة الميزات
افتراضات الانحدار الخطي المتعدد:
- أ علاقة خطية يجب أن تكون موجودة بين المتغيرات المستهدفة والمتوقعة.
- يجب أن تكون بقايا الانحدار موزع طبيعيا .
- يفترض MLR القليل أو لا يوجد تعدد الخطية (الارتباط بين المتغير المستقل) في البيانات.
تنفيذ نموذج الانحدار الخطي المتعدد باستخدام بايثون:
لتنفيذ MLR باستخدام بايثون، لدينا المشكلة أدناه:
وصف المشكلة:
لدينا مجموعة بيانات من 50 شركة ناشئة . تحتوي مجموعة البيانات هذه على خمس معلومات رئيسية: الإنفاق على البحث والتطوير، والإنفاق الإداري، والإنفاق على التسويق، والحالة، والأرباح للسنة المالية . هدفنا هو إنشاء نموذج يمكنه بسهولة تحديد الشركة التي لديها أقصى ربح، وما هو العامل الأكثر تأثيرًا على ربح الشركة.
وبما أننا بحاجة إلى إيجاد الربح، فهو المتغير التابع، والمتغيرات الأربعة الأخرى هي متغيرات مستقلة. فيما يلي الخطوات الرئيسية لنشر نموذج MLR:
الخطوة 1: خطوة المعالجة المسبقة للبيانات:
الفرق بين الشجرة الثنائية وشجرة البحث الثنائية
الخطوة الأولى هي
# importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
#importing datasets data_set= pd.read_csv('50_CompList.csv')
انتاج: سوف نحصل على مجموعة البيانات على النحو التالي:
في الناتج أعلاه، يمكننا أن نرى بوضوح أن هناك خمسة متغيرات، حيث أربعة متغيرات مستمرة وواحد متغير فئوي.
#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, 'New York'], [162597.7, 151377.59, 443898.53, 'California'], [153441.51, 101145.55, 407934.54, 'Florida'], [144372.41, 118671.85, 383199.62, 'New York'], [142107.34, 91391.77, 366168.42, 'Florida'], [131876.9, 99814.71, 362861.36, 'New York'], [134615.46, 147198.87, 127716.82, 'California'], [130298.13, 145530.06, 323876.68, 'Florida'], [120542.52, 148718.95, 311613.29, 'New York'], [123334.88, 108679.17, 304981.62, 'California'], [101913.08, 110594.11, 229160.95, 'Florida'], [100671.96, 91790.61, 249744.55, 'California'], [93863.75, 127320.38, 249839.44, 'Florida'], [91992.39, 135495.07, 252664.93, 'California'], [119943.24, 156547.42, 256512.92, 'Florida'], [114523.61, 122616.84, 261776.23, 'New York'], [78013.11, 121597.55, 264346.06, 'California'], [94657.16, 145077.58, 282574.31, 'New York'], [91749.16, 114175.79, 294919.57, 'Florida'], [86419.7, 153514.11, 0.0, 'New York'], [76253.86, 113867.3, 298664.47, 'California'], [78389.47, 153773.43, 299737.29, 'New York'], [73994.56, 122782.75, 303319.26, 'Florida'], [67532.53, 105751.03, 304768.73, 'Florida'], [77044.01, 99281.34, 140574.81, 'New York'], [64664.71, 139553.16, 137962.62, 'California'], [75328.87, 144135.98, 134050.07, 'Florida'], [72107.6, 127864.55, 353183.81, 'New York'], [66051.52, 182645.56, 118148.2, 'Florida'], [65605.48, 153032.06, 107138.38, 'New York'], [61994.48, 115641.28, 91131.24, 'Florida'], [61136.38, 152701.92, 88218.23, 'New York'], [63408.86, 129219.61, 46085.25, 'California'], [55493.95, 103057.49, 214634.81, 'Florida'], [46426.07, 157693.92, 210797.67, 'California'], [46014.02, 85047.44, 205517.64, 'New York'], [28663.76, 127056.21, 201126.82, 'Florida'], [44069.95, 51283.14, 197029.42, 'California'], [20229.59, 65947.93, 185265.1, 'New York'], [38558.51, 82982.09, 174999.3, 'California'], [28754.33, 118546.05, 172795.67, 'California'], [27892.92, 84710.77, 164470.71, 'Florida'], [23640.93, 96189.63, 148001.11, 'California'], [15505.73, 127382.3, 35534.17, 'New York'], [22177.74, 154806.14, 28334.72, 'California'], [1000.23, 124153.04, 1903.93, 'New York'], [1315.46, 115816.21, 297114.46, 'Florida'], [0.0, 135426.92, 0.0, 'California'], [542.05, 51743.15, 0.0, 'New York'], [0.0, 116983.8, 45173.06, 'California']], dtype=object)
كما نرى في المخرجات أعلاه، يحتوي العمود الأخير على متغيرات فئوية غير مناسبة للتطبيق مباشرة لتركيب النموذج. لذلك نحن بحاجة إلى تشفير هذا المتغير.
ترميز المتغيرات الوهمية:
نظرًا لأن لدينا متغيرًا تصنيفيًا واحدًا (الحالة)، والذي لا يمكن تطبيقه مباشرة على النموذج، فسوف نقوم بتشفيره. لتشفير المتغير الفئوي إلى أرقام، سوف نستخدم 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). هنا يتوافق كل عمود متغير وهمي مع الحالة الواحدة . يمكننا التحقق من خلال مقارنتها بمجموعة البيانات الأصلية. العمود الأول يتوافق مع ولاية كاليفورنيا ، العمود الثاني يتوافق مع ولاية فلوريدا ، والعمود الثالث يتوافق مع ولاية نيويورك .
ملحوظة:يجب ألا نستخدم جميع المتغيرات الوهمية في نفس الوقت، لذا يجب أن تكون أقل بواحد من العدد الإجمالي للمتغيرات الوهمية، وإلا فسيؤدي ذلك إلى إنشاء مصيدة متغير وهمي.
- الآن، نحن نكتب سطرًا واحدًا من التعليمات البرمجية فقط لتجنب مصيدة المتغير الوهمي:
#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('Train Score: ', regressor.score(x_train, y_train)) print('Test Score: ', regressor.score(x_test, y_test))
انتاج: النتيجة هي:
Train Score: 0.9501847627493607 Test Score: 0.9347068473282446
تشير النتيجة المذكورة أعلاه إلى أن نموذجنا دقيق بنسبة 95% مع مجموعة بيانات التدريب ودقيق بنسبة 93% مع مجموعة بيانات الاختبار.
ملحوظة:في الموضوع التالي سنرى كيف يمكننا تحسين أداء النموذج باستخدامالقضاء على الوراءعملية.
تطبيقات الانحدار الخطي المتعدد:
هناك تطبيقان أساسيان للانحدار الخطي المتعدد:
- فعالية المتغير المستقل في التنبؤ:
- التنبؤ بتأثير التغييرات: