Python – رگرسیون چندجمله‌ای (Polynomial Regression)

رگرسیون چندجمله‌ای

اگر نقاط داده شما به وضوح نمی‌توانند با رگرسیون خطی (یک خط مستقیم) مناسب شوند، ممکن است رگرسیون چندجمله‌ای گزینه مناسبی باشد.

رگرسیون چندجمله‌ای، مشابه رگرسیون خطی، از رابطه بین متغیرهای xx و yy برای یافتن بهترین روش برای رسم یک خط (در واقع یک منحنی) از طریق نقاط داده استفاده می‌کند.

چگونه کار می‌کند؟

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

در مثال زیر، سرعت و ساعت روز (ساعت) 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% رابطه است.

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

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

پیش‌بینی مقادیر آینده

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

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

برای این کار، نیاز به همان مدل mymodel از مثال بالا داریم:

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

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

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 باید منجر به تطابق بسیار بدی برای رگرسیون چندجمله‌ای شوند:

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

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
JavaScript - رویدادها (Events)

JavaScript – رویدادها (Events)

رویدادهای HTML رویدادها در HTML، “اتفاقاتی” هستند که برای عناصر HTML رخ می‌دهند. این اتفاقات می‌توانند ناشی از کار...

بیشتر بخوانید
JavaScript - سازنده‌های شیء (Object Constructors)

JavaScript – سازنده‌های شیء (Object Constructors)

ساخت آبجکت با تابع سازنده (Object Constructor Function) برای ساخت چندین آبجکت مشابه، از تابع سازنده استفاده می‌شود. این...

بیشتر بخوانید
JavaScript - نمایش شیء (Object Display)

JavaScript – نمایش شیء (Object Display)

نحوه نمایش آبجکت‌ها در جاوااسکریپت هنگام نمایش یک آبجکت جاوااسکریپت به صورت مستقیم، خروجی معمولاً به شکل [object Object]...

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.