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

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

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

 رگرسیون خطی (Linear Regression) یکی از مهم‌ترین الگوریتم‌های یادگیری ماشین برای پیش‌بینی داده‌ها است. در این مقاله، نحوه کار، مثال‌های عملی و کاربردهای آن را به زبان ساده بررسی می‌کنیم.
رگرسیون خطی

📖 فهرست مطالب

  1. رگرسیون چیست؟ 🤔
  2. رگرسیون خطی چیست و چگونه کار می‌کند؟ 📈
  3. پیاده‌سازی رگرسیون خطی در پایتون 🐍
  4. بررسی دقت مدل با مقدار r 🔍
  5. آیا رگرسیون خطی همیشه بهترین انتخاب است؟ ⚠️

1️⃣ رگرسیون چیست؟ 🤔

رگرسیون (Regression) یک روش آماری است که برای بررسی رابطه بین متغیرها استفاده می‌شود. به زبان ساده، وقتی بخواهیم بفهمیم که یک متغیر چطور بر متغیر دیگر تأثیر می‌گذارد، از رگرسیون استفاده می‌کنیم.

🔹 مثال: فرض کنید می‌خواهیم بدانیم که سن یک ماشین چگونه بر سرعت آن تأثیر دارد. در اینجا، سن ماشین متغیر مستقل و سرعت آن متغیر وابسته است.

2️⃣ رگرسیون خطی چیست و چگونه کار می‌کند؟ 📈

رگرسیون خطی (Linear Regression) یکی از ساده‌ترین روش‌های رگرسیون است که یک خط مستقیم را از میان داده‌ها عبور می‌دهد تا رابطه بین آن‌ها را مدل‌سازی کند.

💡 فرمول کلی این خط به شکل زیر است:

y=mx+b

🔹 m: شیب خط (Slope)
🔹 b: عرض از مبدأ (Intercept)
🔹 x: مقدار متغیر مستقل (مثلاً سن ماشین)
🔹 y: مقدار پیش‌بینی‌شده متغیر وابسته (مثلاً سرعت ماشین)

📌 نکته: اگر نقاط داده‌ای شما الگوی خطی داشته باشند، این مدل می‌تواند پیش‌بینی‌های خوبی ارائه دهد.

3️⃣ پیاده‌سازی رگرسیون خطی در پایتون 🐍

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

📊 1. رسم نمودار پراکندگی (Scatter Plot)

ابتدا یک نمودار پراکندگی از داده‌ها رسم می‌کنیم تا ببینیم آیا رابطه خطی بین آن‌ها وجود دارد یا نه.

import matplotlib.pyplot as plt

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

plt.scatter(x, y)
plt.show()

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


📈 2. رسم خط رگرسیون در پایتون

اکنون از ماژول SciPy برای پیدا کردن معادله خط رگرسیون استفاده می‌کنیم:

from scipy import stats
import matplotlib.pyplot as plt

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

slope, intercept, r, p, std_err = stats.linregress(x, y)

def myfunc(x):
  return slope * x + intercept

mymodel = list(map(myfunc, x))

plt.scatter(x, y)
plt.plot(x, mymodel, color='red')  # خط رگرسیون را رسم می‌کند
plt.show()

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

4️⃣ بررسی دقت مدل با مقدار r 🔍

اگر بخواهیم بدانیم که این مدل چقدر دقیق است، مقدار r را بررسی می‌کنیم. مقدار r نشان‌دهنده میزان ارتباط بین متغیرها است و مقدار آن بین -1 تا 1 متغیر است.

print(r)

🔹 اگر r نزدیک به 1 یا -1 باشد یعنی رابطه قوی‌ای بین داده‌ها وجود دارد.
🔹 اگر r نزدیک به 0 باشد یعنی رابطه خاصی بین متغیرها وجود ندارد و این مدل خوب کار نمی‌کند.

مثال: فرض کنید مقدار r = -0.76 باشد. این مقدار نشان می‌دهد که بین سن و سرعت ماشین یک رابطه منفی وجود دارد (یعنی با افزایش سن، سرعت کاهش پیدا می‌کند).

5️⃣ آیا رگرسیون خطی همیشه بهترین انتخاب است؟ ⚠️

گاهی اوقات، رگرسیون خطی برای پیش‌بینی مناسب نیست! بیایید یک مثال ببینیم:

import matplotlib.pyplot as plt
from scipy import stats

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]

slope, intercept, r, p, std_err = stats.linregress(x, y)

def myfunc(x):
  return slope * x + intercept

mymodel = list(map(myfunc, x))

plt.scatter(x, y)
plt.plot(x, mymodel, color='red')
plt.show()

print(r)  # بررسی مقدار r

نتیجه: مقدار r ≈ 0.013 نشان می‌دهد که هیچ رابطه‌ای بین این داده‌ها وجود ندارد و استفاده از رگرسیون خطی اشتباه است.


🎯 جمع‌بندی و نکات کلیدی

✔️ رگرسیون خطی یک روش ساده و قدرتمند برای پیش‌بینی داده‌ها بر اساس یک رابطه خطی است.
✔️ می‌توان از پایتون و کتابخانه SciPy برای اجرای رگرسیون خطی استفاده کرد.
✔️ مقدار r نشان‌دهنده میزان ارتباط بین داده‌هاست و اگر خیلی پایین باشد، رگرسیون خطی گزینه مناسبی نیست.
✔️ همیشه قبل از استفاده از این روش، نمودار پراکندگی را بررسی کنید تا ببینید آیا داده‌ها الگوی خطی دارند یا خیر.


🔥 حالا نوبت شماست!
✅ آیا تا به حال از رگرسیون خطی در پروژه‌های خود استفاده کرده‌اید؟
✅ نظرتان درباره این روش چیست؟