مدل‌های چندگانه در یادگیری ماشین

رگرسیون چندگانه (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-Squared

مهم است که بدانیم رابطه بین مقادیر محور x و y چقدر خوب است، اگر هیچ رابطه‌ای نباشد، روش بازگشتی چندجمله‌ای نمی‌تواند برای پیش‌بینی هیچ چیز استفاده شود.

این رابطه با مقدار ر‌平方 (r-squared) اندازه‌گیری می‌شود.

محدوده ر‌平方 (r-squared) از 0 تا 1 است، که 0 نشان‌دهنده عدم رابطه است و 1 نشان‌دهنده 100% رابطه است.

Python و ماژول Sklearn این مقدار را برای شما محاسبه خواهند کرد، کافی است آرایه‌های x و y را وارد کنید:

مثال

تناسب داده‌های من در روش بازگشتی چندجمله‌ای چگونه است؟

import numpy
از 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 نشان‌دهنده وجود رابطه خوبی است و می‌توانیم از روش بازگشتی چندجمله‌ای در پیش‌بینی‌های آینده استفاده کنیم.

پیش‌بینی ارزش‌های آینده

حالا می‌توانیم از اطلاعاتی که جمع‌آوری کرده‌ایم برای پیش‌بینی ارزش‌های آینده استفاده کنیم.

مثلاً: بیایید سعی کنیم سرعت خودروهای عبوری در حدود ساعت 17 شب از پلکان را پیش‌بینی کنیم:

برای این منظور، ما نیاز به همان نمونه‌ای که در بالا ذکر شد داریم mymodel آرایه:

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

مثال

پیش‌بینی سرعت خودروهای عبوری در ساعت 17 بعد از ظهر:

import numpy
از 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 باعث می‌شوند که تطابق چندگانه بسیار بد باشد:

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
از 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 نشان‌دهنده ارتباط ضعیف است و به ما می‌گوید که این مجموعه داده‌ها برای برگشت به متعدد مناسب نیست.