3 مهر 1402
تهران، خیابان آزادی، تقاطع قریب
یادگیری ماشین

رگرسیون خطی در یادگیری ماشین چیست؟ | آموزش عملی و تمرین

رگرسیون خطی در یادگیری ماشین چیست؟ | آموزش عملی و تمرین

رگرسیون چیست؟

اصطلاح رگرسیون زمانی استفاده می‌شود که شما سعی دارید رابطه بین متغیرها را پیدا کنید.

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

رگرسیون خطی چیست؟

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

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

رگرسیون خطی چیست؟

در یادگیری ماشین، پیش‌بینی آینده بسیار مهم است.

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

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

در مثال زیر، محور x نشان‌دهنده سن و محور y نشان‌دهنده سرعت است. ما سن و سرعت 13 خودرو را در هنگام عبور از باجه عوارضی ثبت کرده‌ایم. بیایید ببینیم که آیا داده‌هایی که جمع آوری کرده‌ایم می توانند در رگرسیون خطی استفاده شوند یا خیر:

مثال:

با رسم نمودار پراکندگی (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()

				
			

نتیجه:

مثال:

Scipy را وارد کنید و خط رگرسیون خطی را رسم کنید:

				
					import matplotlib.pyplot as plt
from scipy import stats

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)
plt.show()

				
			

نتیجه:

مثال توضیح داده شده

ماژول‌های (modules) مورد نیاز خود را وارد کنید.

شما می‌توانید در مورد ماژول Matplotlib در این لینک (انگلیسی) بیاموزید. (بعداً در سایت نیکان دانش هارون ترجمه خواهد شد).

شما می‌توانید در مورد ماژول SciPy در این لینک (انگلیسی) بیاموزید. (بعداً در سایت نیکان دانش هارون ترجمه خواهد شد).

				
					import matplotlib.pyplot as plt
from scipy import stats

				
			

آرایه‌هایی (arrays) ایجاد کنید که مقادیر محور x و y را نشان می‌دهند:

				
					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)
				
			

تابعی ایجاد کنید که از مقادیر slope و intercept برای برگرداندن یک مقدار جدید استفاده کند. این مقدار جدید نشان‌دهنده جای است که در محور y ، مقدار x مربوطه قرار می‌گیرد:

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

				
			

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

				
					mymodel = list(map(myfunc, x))
				
			

نمودار پراکندگی (Scatter Plot) اصلی را رسم کنید:

				
					plt.scatter(x, y)
				
			

خط رگرسیون خطی را رسم کنید:

				
					plt.plot(x, mymodel)
				
			

نمایش نمودار (diagram):

				
					plt.show()
				
			

ر مثل رابطه

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

این رابطه – ضریب همبستگی – r نامیده می‌شود.

مقدار r از 1- تا 1 است که 0 به معنای عدم وجود رابطه است و 1 (و 1-) به معنای 100% مرتبط است.

پایتون و ماژول Scipy این مقدار را برای شما محاسبه می‌کنند. تنها کاری که باید انجام دهید این است که آن را با مقادیر x و y تغذیه کنید.

مثال:

داده‌های من چقدر در یک رگرسیون خطی قرار می‌گیرند؟

				
					from scipy import stats

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)

print(r)

				
			

توجه: نتیجه 0.76- نشان می‌دهد که رابطه‌ای وجود دارد، اما رابطه کاملی نیست. با این حال این را هم نشان می‌دهد که می‌توانیم از این نوع رگرسیون در پیش‌بینی‌های آینده استفاده کنیم.

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

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

مثال: اجازه دهید سعی کنیم که سرعت یک ماشین 10 ساله را پیش‌بینی کنیم.

برای این کار، به همان تابع myfunc() از مثال بالا نیاز داریم:

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

				
			

مثال:

سرعت یک ماشین 10 ساله را پیش‌بینی کنید:

				
					from scipy import stats

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

speed = myfunc(10)

print(speed)

				
			

این مثال سرعت 85.6 کیلومتر بر ساعت را پیش‌بینی می‌کرد که می‌توانستیم آن را از نمودار هم بخوانیم:

آیا در رگرسیون خطی تناسب بد (Bad Fit) هم وجود دارد؟

آیا در رگرسیون خطی تناسب بد (Bad Fit) هم وجود دارد؟

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

مثال

این مقادیر برای محور x و y باید به تناسب بسیار بدی برای رگرسیون منجر شود:

				
					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)
plt.show()

				
			

نتیجه:

روابط در رگرسیون خطی

و r مثل رابطه (Relationship) است؟

مثال:

شما باید یک مقدار بسیار پایین r را دریافت کنید.

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

print(r)

				
			

نتیجه: 0.013 یک رابطه بسیار بد را نشان می‌دهد و به ما می‌گوید که این مجموعه داده (data set) برای رگرسیون خطی مناسب نیست.

منبع: w3schools

Leave feedback about this

  • کیفیت
  • قیمت
  • خدمات

PROS

+
Add Field

CONS

+
Add Field
Choose Image
Choose Video
X