بازگشت به دوره

آموزش رایگان صفر تا صد یادگیری ماشین (Machine Learning) به زبان ساده

0% تکمیل‌شده
0/0 مرحله

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

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

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

📌 فهرست مطالب

  1. چگونه کار می‌کند؟
  2. مثال: نمایش داده‌ها روی نمودار
  3. رسم خط رگرسیون چندجمله‌ای
  4. ارزیابی مدل با مقدار R-Squared
  5. پیش‌بینی مقادیر جدید
  6. آیا رگرسیون چندجمله‌ای همیشه مناسب است؟
  7. نتیجه‌گیری

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

در پایتون، ما می‌توانیم رگرسیون چندجمله‌ای را بدون نیاز به حل فرمول‌های پیچیده ریاضی اجرا کنیم. این کار با استفاده از کتابخانه‌های NumPy و Matplotlib انجام می‌شود. در ادامه با یک مثال عملی یاد می‌گیریم که چطور این مدل را پیاده‌سازی کنیم.

📊 مثال: نمایش داده‌ها روی نمودار

فرض کنید سرعت ۱۸ خودرو را هنگام عبور از یک ایستگاه ثبت کرده‌ایم. متغیر X نشان‌دهنده ساعت عبور و متغیر Y سرعت خودروها است. ابتدا داده‌ها را روی نمودار پراکندگی (Scatter Plot) رسم می‌کنیم:

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()

نتیجه: نمودار نشان می‌دهد که داده‌ها روی یک خط مستقیم قرار ندارند، بنابراین رگرسیون خطی گزینه مناسبی نیست.

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

اکنون یک مدل چندجمله‌ای درجه ۳ (Polynomial of Degree 3) ایجاد کرده و آن را روی نمودار رسم می‌کنیم:

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), color='red')
plt.show()

نتیجه: حالا یک منحنی نرم و دقیق‌تر از رفتار داده‌ها ترسیم شده است.

📊 ارزیابی مدل با R-Squared

برای بررسی دقت مدل، از مقدار R-Squared استفاده می‌کنیم که میزان تطابق داده‌ها را نشان می‌دهد. مقدار R-Squared بین ۰ تا ۱ است:
🔹 اگر مقدار آن ۱ باشد، یعنی مدل کاملاً دقیق است.
🔹 اگر مقدار آن ۰ باشد، یعنی هیچ رابطه‌ای بین داده‌ها وجود ندارد.

بیایید مقدار R-Squared را محاسبه کنیم:

from sklearn.metrics import r2_score
import numpy

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)))

نتیجه: مقدار R-Squared = 0.94 است که نشان می‌دهد مدل ما دقت بالایی دارد.

🔮 پیش‌بینی مقادیر جدید

حالا که مدل ما آماده است، می‌توانیم از آن برای پیش‌بینی سرعت خودروها در ساعات دیگر استفاده کنیم. مثلاً اگر بخواهیم سرعت یک خودرو را که ساعت ۱۷ از ایستگاه عبور کرده، پیش‌بینی کنیم:

speed = mymodel(17)
print(speed)

نتیجه: مدل پیش‌بینی می‌کند که سرعت خودرو ۸۸.۸۷ کیلومتر در ساعت خواهد بود.

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

خیر! گاهی اوقات این روش نتایج ضعیفی می‌دهد. مثلا اگر داده‌های ورودی تصادفی و نامرتبط باشند، مقدار R-Squared خیلی کم خواهد شد.

🔻 مثال از یک مدل نامناسب:

import numpy
import matplotlib.pyplot as plt
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)))

plt.scatter(x, y)
plt.plot(numpy.linspace(2, 95, 100), mymodel(numpy.linspace(2, 95, 100)), color='red')
plt.show()

نتیجه: مقدار R-Squared خیلی کم خواهد بود و نشان می‌دهد که رگرسیون چندجمله‌ای برای این داده‌ها مناسب نیست.


🎯 نتیجه‌گیری

🔹 رگرسیون چندجمله‌ای برای مدل‌سازی داده‌های غیرخطی استفاده می‌شود.
🔹 مقدار R-Squared نشان می‌دهد که مدل چقدر دقیق است.
🔹 این روش همیشه مناسب نیست! اگر داده‌ها الگوی خاصی نداشته باشند، مدل عملکرد ضعیفی خواهد داشت.

📌 پیشنهاد: همیشه ابتدا داده‌ها را روی نمودار بررسی کنید تا ببینید آیا واقعاً به یک مدل چندجمله‌ای نیاز دارید یا خیر! 😊