مدلهای چندگانه در یادگیری ماشین
- صفحه قبل برگردش خطی
- صفحه بعدی برگردش چندگانه
رگرسیون چندگانه (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 نشاندهنده ارتباط ضعیف است و به ما میگوید که این مجموعه دادهها برای برگشت به متعدد مناسب نیست.
- صفحه قبل برگردش خطی
- صفحه بعدی برگردش چندگانه