آموزش رایگان صفر تا صد یادگیری ماشین (Machine Learning) به زبان ساده
-
خوش آمدید به یادگیری ماشین!
-
میانگین، میانه و مد در یادگیری ماشین
-
انحراف معیار (Standard Deviation) در یادگیری ماشین
-
صدک (Percentile) در یادگیری ماشین
-
توزیع دادهها در یادگیری ماشین
-
توزیع نرمال دادهها در یادگیری ماشین
-
نمودار پراکندگی (Scatter Plot) در یادگیری ماشین
-
رگرسیون خطی در یادگیری ماشینی
-
رگرسیون چندجملهای در یادگیری ماشین
-
رگرسیون چندگانه در یادگیری ماشین
-
روش Train/Test در یادگیری ماشین
-
درخت تصمیمگیری در یادگیری ماشین
-
ماتریس سردرگمی (Confusion Matrix) در یادگیری ماشین
-
خوشهبندی سلسلهمراتبی (Hierarchical Clustering) در یادگیری ماشین
-
رگرسیون لجستیک در یادگیری ماشین
-
Grid Search در یادگیری ماشین
-
پردازش دادههای دستهای (Categorical Data) در یادگیری ماشین
-
خوشهبندی K-Means در یادگیری ماشین
-
یادگیری Bootstrap Aggregation (Bagging) در یادگیری ماشین
-
کراس والیدیشن (Cross Validation) در یادگیری ماشین
-
منحنی AUC - ROC در یادگیری ماشین
-
الگوریتم K-Nearest Neighbors (KNN) در یادگیری ماشین
رگرسیون چندجملهای در یادگیری ماشین
رگرسیون چندجملهای (Polynomial Regression) یکی از روشهای یادگیری ماشین است که برای مدلسازی روابط غیرخطی بین متغیرها استفاده میشود. اگر دادههای شما بهخوبی روی یک خط راست (رگرسیون خطی) قرار نگیرند، ممکن است رگرسیون چندجملهای گزینه مناسبی باشد.
🔹 این روش، مشابه رگرسیون خطی، به دنبال یافتن بهترین خط یا منحنی برای نمایش رابطه بین متغیرهای مستقل (X) و وابسته (Y) است. اما بهجای یک خط ساده، از منحنی چندجملهای برای این کار استفاده میکند.
📌 فهرست مطالب
🎯 چگونه کار میکند؟
در پایتون، ما میتوانیم رگرسیون چندجملهای را بدون نیاز به حل فرمولهای پیچیده ریاضی اجرا کنیم. این کار با استفاده از کتابخانههای 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 نشان میدهد که مدل چقدر دقیق است.
🔹 این روش همیشه مناسب نیست! اگر دادهها الگوی خاصی نداشته باشند، مدل عملکرد ضعیفی خواهد داشت.
📌 پیشنهاد: همیشه ابتدا دادهها را روی نمودار بررسی کنید تا ببینید آیا واقعاً به یک مدل چندجملهای نیاز دارید یا خیر! 😊