برگشت به عقب خطی یادگیری ماشین

برگشت

هنگامی که شما تلاش می‌کنید تا روابط بین متغیرها را پیدا کنید، اصطلاحی به نام «برگشت» (regression) استفاده می‌شود.

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

روش خطی

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

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


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

روش کار

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

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

و همچنین مقدار r-squared؟

ابتدا نمودار گروه‌های اولیه را ترسیم کنید:

این مقادیر برای محورهای 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]
mymodel = list(map(myfunc, x))
plt.plot(x, mymodel)

plt.show()


print(r)

و همچنین مقدار r-squared؟

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

این مقادیر برای محورهای x و y باعث می‌شوند که تطابق رگرسیون خطی بسیار بد باشد:
import numpy
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]
y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]
import matplotlib.pyplot as plt
  def myfunc(x):
return slope * x + intercept
mymodel = list(map(myfunc, x))
plt.scatter(x, y)
plt.plot(x, mymodel)

plt.show()


print(r)

توضیح مثال

مدول‌های مورد نیاز را وارد کنید:

این مقادیر برای محورهای x و y باعث می‌شوند که تطابق رگرسیون خطی بسیار بد باشد:
import numpy

یک آرایه برای مقادیر محور 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]

یک روش را اجرا کنید که برخی از کلیدهای مهم روش خطی را برمی‌گرداند:

y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]

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

import matplotlib.pyplot as plt
  def myfunc(x):

از هر مقادیر در آرایه x با استفاده از تابع اجرا کنید. این باعث ایجاد یک آرایه جدید خواهد شد که مقادیر جدیدی در محور y دارد:

return slope * x + intercept

گروه‌های اولیه را ترسیم کنید:

mymodel = list(map(myfunc, x))

خط خطی را ترسیم کنید:

plt.scatter(x, y)

تصویر نمایش:

plt.plot(x, mymodel)

R-Squared

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

این رابطه با یک مقیاس به نام ریشه‌کره (r-squared) اندازه‌گیری می‌شود.

محدوده مقیاس r-squared از 0 تا 1 است، که 0 نشان‌دهنده عدم رابطه است و 1 نشان‌دهنده 100٪ رابطه است.

مدول Python و Scipy برای شما این مقدار را محاسبه خواهند کرد، کافی است که مقادیر x و y را به آن ارائه دهید:

و همچنین مقدار r-squared؟

چگونه داده‌های من در روش خطی مناسب هستند؟

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

پیش‌بینی ارزش‌های آینده

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

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

برای این منظور، ما نیاز به همان... myfunc() توابع:

import matplotlib.pyplot as plt
  def myfunc(x):

و همچنین مقدار r-squared؟

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

import numpy
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]
y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]
import matplotlib.pyplot as plt
  def myfunc(x):
speed = myfunc(10)
print(speed)

print(r)

سرعت پیش‌بینی شده 85.6 است، و همچنین می‌توانیم آن را از تصویر بخوانیم:


تعداد نمونه‌ها بد است؟

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

و همچنین مقدار r-squared؟

x 和 y 轴的这些值将导致线性回归的拟合度非常差:

این مقادیر برای محورهای x و y باعث می‌شوند که تطابق رگرسیون خطی بسیار بد باشد:
import numpy
از 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]
import matplotlib.pyplot as plt
  def myfunc(x):
return slope * x + intercept
mymodel = list(map(myfunc, x))
plt.scatter(x, y)
plt.plot(x, mymodel)

plt.show()


print(r)

نتیجه:

و همچنین مقدار r-squared؟

مثال

شما باید یک مقدار بسیار پایین r-squared دریافت کنید.
import numpy
از 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)

اجرای نمونه