ما یکی از متغیرهای بسیار مهم که مصرف کالری را تحت تاثیر قرار می‌دهد، از قلم انداخته‌ایم. این متغیر همان طول تمرین (Duration) می‌باشد. طول تمرین همراه با متوسط ضربان قلب با یکدیگر، مصرف کالری را بخوبی توضیح خواهند داد.

رگرسیون خطی

اصطلاح رگرسیون (regression) هنگامی مورد استفاده قرار می‌گیرد که قصد داشته باشیم رابطه‌ی بین دو متغیر را بیابیم. در یادگیری ماشین (Machine Learning) و در مدل‌سازی آماری این رابطه برای پیش‌بینی رخ‌داد یک واقعه بکار گرفته خواهد شد. در این درس موارد و سؤالات ذیل را پوشش خواهیم داد:

  • آیا می‌توان نتیجه گرفت که متوسط ضربان قلب و طول تمرین به مصرف کالری مربوط هستند؟
  • آیا می‌توان از متوسط ضربان قلب و طول تمرین به منظور پیش‌بینی مصرف کالری استفاده کرد؟

روش حداقل مربعات

رگرسیون خطی از روش حداقل مربعات (Least Square Method) استفاده می‌کند. این مفهوم اینگونه عمل می‌کند؛ یک خط مستقیم از بین تمام نقاط ترسیم شده در صفحه رد (رسم) می‌کنیم. این خط باید در موقعیتی قرار بگیرد که فاصله‌ی آن تا تمامی نقاط کمترین مقدار ممکن باشد. این فاصله را خطا (error) یا باقی‌مانده (residual) می‌نامند.

خطوط خط‌چین و قرمز رنگ، نمایش دهنده‌ی فاصله‌ی نقاط تا خط ترسیم شده‌ی آبی رنگ می‌باشند.

رگرسیون خطی با یک متغیر توصیفی

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

مثال:

import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats

full_health_data = pd.read_csv("data.csv", header=0, sep=",")

x = full_health_data["Average_Pulse"]
y = full_health_data ["Calorie_Burnage"]

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, slope * x + intercept)
plt.ylim(ymin=0, ymax=2000)
plt.xlim(xmin=0, xmax=200)
plt.xlabel("Average_Pulse")
plt.ylabel ("Calorie_Burnage")
plt.show()

خروجی کد فوق شکل زیر است:

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

توضیح مثال:

  • ماژول‌های مورد نیاز را وارد کردیم: پانداس؛ مت‌پلات‌لیب؛ سای‌پای
  • متوسط ضربان قلب را داخل متغیر x کپی نمودیم. همین کار را برای مصرف کالری و با نام y انجام دادیم
  • مقادیر کلیدی را بدست آوردیم؛ شیب، عرض از مبدا، انحراف معیار، r نشان دهنده‌ی ضریب همبستگی و p نشان دهنده‌ی p-مقدار دوجهته برای یک آزمون فرض می‌باشد که در آن شیب صفر است (در خصوص این دو متغیر اخیر می‌توانید به صفحه‌ی مستندات سای‌پای به این آدرس مراجعه نمایید) در خصوص p-مقدار اگر کمی صبر نمائید در ادامه‌ی دوره و در درس p-مقدار راجع به آن صحبت خواهیم نمود
  • تابعی می‌سازیم که از شیب و عرض از مبداء استفاده می‌کند. در واقع این تابع خط رگرسیون مد نظر را برای ما ایجاد می‌کند
  • هر مقدار از متغیر x را به تابع تعریف شده ارجاع می‌دهیم. اینکار باعث تولید یک آرایه‌ی جدید برای محور y می‌شود؛ در واقع همان mymodel = list(map(myfunc, x)) است
  • اسکترپلات (scatter plot) را بکار می‌گیریم؛ دستور plt.scatter(x, y)
  • خط رگرسیون خطی را با کمک دستور plt.plot(x, mymodel) ترسیم می‌کنیم
  • مقادیر ماکسیمم و مینیمم محورها را مشخص می‌کنیم
  • به محورها اسامی مناسب “Average_Pulse” و “Calorie_Burnage” تخصیص می‌دهیم