تعلم الآلة - الترجيح البولي
- الصفحة السابقة التقارب الخطي
- الصفحة التالية التقارب المتعدد
الترجيح المتعدد (Polynomial Regression)
إذا كانت نقاط بياناتك غير مناسبة بشكل واضح للعكس الضربي (الخط الذي يمر عبر نقاط البيانات)، فإن الترجيح المتعدد هو الخيار المثالي.
مثل العلاج الخطي، يستخدم العلاج التوليدي علاقة المتغيرات x و y ليجد أفضل طريقة لرسم خط النقاط.

مبدأ العمل
يوجد بعض الطرق في Python لمعرفة علاقة النقاط في البيانات ورسم خط العلاج التوليدي. سنوضح لك كيفية استخدام هذه الطرق بدلاً من المعادلات الرياضية.
في هذا المثال، سجلنا 18 سيارة مرت عبر معبر معين.
لقد سجلنا سرعة السيارات ووقت مرورها (بالساعات).
المحور x يمثل الساعة في اليوم، والمحور y يمثل السرعة:
مثال
أولاً، نرسم الرسم البياني للنقاط:
import matplotlib.pyplot as plt x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] plt.scatter(x, y) plt.show()
النتيجة:

مثال
استيراد numpy
و matplotlib
، ثم رسم خط العلاج التوليدي:
import numpy import matplotlib.pyplot as plt x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) myline = numpy.linspace(1, 22, 100) plt.scatter(x, y) plt.plot(myline, mymodel(myline)) plt.show()
النتيجة:

توضيح المثال
استيراد المكتبات المطلوبة:
import numpy import matplotlib.pyplot as plt
إنشاء مجموعات البيانات لقيم المحاور x و y:
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
يوجد طريقة في NumPy يمكننا من بناء نموذج متعدد الحدود:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
ثم نقوم بتحديد طريقة عرض الصفوف، من الموقع 1 إلى الموقع 22:
myline = numpy.linspace(1, 22, 100)
رسم الرسم البياني للنقاط الأصلية:
plt.scatter(x, y)
رسم خط العلاج التوليدي:
plt.plot(myline, mymodel(myline))
عرض الرسم البياني:
plt.show()
مربع r
من المهم معرفة جودة علاقة القيم على المحور x والمحور y، لأن إذا لم يكن هناك علاقة، لا يمكن استخدام العلاج التوليدي لتنبؤ بأي شيء.
يتم قياس هذه العلاقة بمقياس يُدعى r^2 (مربع r).
مجال قيمة r^2 هو بين 0 و 1، حيث يمثل 0 عدم الترابط بين البيانات، بينما يمثل 1 100% من الترابط.
Python و مكتبة Sklearn ستقوم بحساب هذه القيمة، كل ما تحتاجه هو إدخال مجموعات البيانات x و y:
مثال
كيف تكون مطابقة بياناتي في العلاج التوليدي؟
import numpy from sklearn.metrics import r2_score x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) print(r2_score(y, mymodel(x)))
ملاحظة:النتيجة 0.94 تدل على وجود علاقة جيدة، يمكننا استخدام العلاج التوليدي في التنبؤات المستقبلية.
تنبؤ القيم المستقبلية
الآن، يمكننا استخدام المعلومات التي جمعناها لتنبؤ بالقيم المستقبلية.
على سبيل المثال: لنحاول التنبؤ بسرعة السيارات التي تمر عبر المعبر في حوالي الساعة 5:00 مساءً
لذلك، نحتاج إلى نفس المثال كما في الأعلى mymodel مجموعة:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
مثال
تنبؤ سرعة السيارة بعد الظهر 5:00
import numpy from sklearn.metrics import r2_score x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) speed = mymodel(17) print(speed)
سرعة التنبؤ هي 88.87، ويمكننا أيضًا رؤيتها في الرسم البياني:

مطابقة سيئة؟
لنقم بإنشاء مثال حيث لا يكون التنبؤ بالقيم المستقبلية أفضل طريقة للعلاج التوليدي.
مثال
هذه القيم للأسس x و y تؤدي إلى تفاعل سيء جدًا للتراجع البولينomial:
import numpy import matplotlib.pyplot as plt x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40] y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) myline = numpy.linspace(2, 95, 100) plt.scatter(x, y) plt.plot(myline, mymodel(myline)) plt.show()
النتيجة:

ما هو قيمة r-squared؟
مثال
من المتوقع أن تحصل على قيمة r-squared منخفضة جدًا.
import numpy from sklearn.metrics import r2_score x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40] y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) print(r2_score(y, mymodel(x)))
النتيجة: 0.00995 تعني علاقة سيئة للغاية، وتخبرنا أن هذه البيانات غير مناسبة للتراجع البولينomial.
- الصفحة السابقة التقارب الخطي
- الصفحة التالية التقارب المتعدد