در این درس یک مورد (case) کامل‌تر و بهتر از رگرسیون خطی را می‌بینیم. در واقع در اینجا قصد داریم که از دو متغیر ورودی برای تابع رگرسیون خود استفاده نمائیم.

استفاده از طول تمرین و متوسط ضربان قلب برای پیش‌بینی مصرف کالری

در ادامه جدول رگرسیونی خواهیم ساخت که دارای دو متغیر توصیفی، طول تمرین و متوسط ضربان قلب خواهد بود.

مثال:

import pandas as pd
import statsmodels.formula.api as smf

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

model = smf.ols('Calorie_Burnage ~ Average_Pulse + Duration', data = full_health_data)
results = model.fit()
print(results.summary())

خروجی کد فوق بصورت زیر است. در مورد بخش پررنگ شده در ادامه بحث خواهیم نمود.

قبل از هر چیز، ابتدا در خصوص مثال فوق اندکی توضیح می‌دهیم:

  • ابتدا کتابخانه‌های مورد نظر و مناسب کار را وارد می‌کنیم. توجه کنید که استتزمادل (statsmodels) یک کتابخانه‌ی آماری در پایتون است
  • از دیتاست کامل سلامت استفاده می‌کنیم
  • یک مدل بر مبنای روش OLS و با توجه به دستور ()smf.ols می‌سازیم. توجه بفرمائید که ابتدامتغیر وابسته باید داخل پرانتز نوشته شود و سپس متغیرهای توصیف کننده
  • با فراخوانی دستور ()fit نتایج فیت شدن مدل روی دیتاست را بدست خواهیم آورد. این فرایند اطلاعات بسیار زیادی از رگرسیون را ذخیره می‌کند
  • با فراخوانی ()summary جدول اطلاعاتی در خصوص رگرسیون را بدست خواهیم آورد

تابع رگرسیون خطی بطور ریاضی بصورت زیر نوشته خواهد شد:

Calorie_Burnage = Average_Pulse × 3.1695 + Duration × 5.8424 – 334.5194

با گرد کردن اعداد اعشاری تا دو رقم، داریم:

Calorie_Burnage = Average_Pulse × 3.17 + Duration × 5.84 – 334.52

تعریف تابع رگرسیون خطی در پایتون

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

مصرف کالری چقدر خواهد بود اگر:

  • متوسط ضربان قلب ۱۱۰ و طول تمرین ۶۰ دقیقه باشد؟
  • متوسط ضربان قلب ۱۴۰ و طول تمرین ۴۵ دقیقه باشد؟
  • متوسط ضربان قلب ۱۷۵ و طول تمرین ۲۰ دقیقه باشد؟

مثال:

def Predict_Calorie_Burnage(Average_Pulse, Duration):
 return(3.1695*Average_Pulse + 5.8434 * Duration - 334.5194)

print(Predict_Calorie_Burnage(110,60))
print(Predict_Calorie_Burnage(140,45))
print(Predict_Calorie_Burnage(175,20))

خروجی اجرای کد فوق برابر است با:

364.7296
372.1636
337.01110000000006

پس داریم:

  • اگر متوسط ضربان قلب ۱۱۰ و طول تمرین ۶۰ دقیقه باشد، مصرف کالری ۳۶۵ کالری است
  • اگر متوسط ضربان قلب ۱۴۰ و طول تمرین ۴۵ دقیقه باشد، مصرف کالری ۳۷۲ کالری است
  • اگر متوسط ضربان قلب ۱۷۵ و طول تمرین ۲۰ دقیقه باشد، مصرف کالری ۳۳۷ کالری است

ارزیابی ضرایب

به ضرایب در جدول فوق توجه بفرمائید:

  • اگر متوسط ضربان قلب ۱ واحد بالا رود، مصرف کالری با ضریب 3.17 افزایش خواهد یافت
  • اگر طول تمرین ۱ واحد بیشتر شود، مصرف کالری با ضریب 5.84 افزایش خواهد یافت
  • قطعن اگر ضرایب منفی بودند، بجای افزایش، با کاهش مواجه می‌شدیم

ارزیابی p-مقدار

به p-مقدار هر یک از ضرایب در جدول نگاه کنید.

  • p-مقدار متوسط ضربان قلب، طول تمرین و عرض از مبداء برابر هستند با 0.00
  • p-مقدار بطور آماری برای تمامی متغیرها قابل توجه می‌باشند، چون از 0.05کمتر هستند

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

ضریب تعیین تعدل شده

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

اگر ما یک متغیر کاملن تصادفی که هیچ ارتباطی با مصرف کالری ندارد را به مدل اضافه کنیم، دچار خطا خواهیم شد. چون ضریب تعیین افزایش خواهد یافت در حالی که متغیر تازه اضافه شده هیچ ارتباطی با متغیر وابسته ندارد.

اما این مشکل را ضریب تعیین تعدیل شده، مرتفع می‌کند. پس در حالتی که بیش از یک متغیر توصیفی داریم، بهتر است که از ضریب تعیین تعدیل شده استفاده کنیم. در اینجا ضریب تعیین تعدیل شده‌ی مدل ما برابر است با 0.814. ملاحظه می‌کنیم، نسبت به حالتی که تنها یک متغیر توصیفی داشتیم (در حالتی که یک متغیر توصیفی داشتیم، ضریب تعیین صفر بود) ضریب تعیین نیز افزایش یافته است. پس این بما می‌گوید که متغیر توصیفی جدید (طول تمرین) نقش بسزایی در پیش‌بینی مصرف کالری دارد.

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