رگرسیون خطی ساده، به زبان ساده!

به نام خدا

سلام

امیدوارم حالتون خوب باشه
شاید باورتون نشه اما من درباره ی این مطلبی که میخوام بزارم سه روز مطالعه کردم که یه وقت چیز اشتباهی قرار ندم توی مطلب.



معنی واژه ی رگرسیون چیه:

واژه «رگرسیون» واژه‌ ای از زبان فرانسوی است و به معنی «برگشت» یا «پس‌گرایی» است؛ این واژه اولین بار توسط فرانسیس گالتون برای توصیف رابطه خطی بین قد فرزندان و والدین‌شان مورد استفاده قرار گرفت. به‌طور دقیق‌تر او از اصطلاح «برگشت (رگرسیون) به میانگین» برای توصیف این رابطه استفاده کرد.



هدف ما از استفاده از رگرسیون چیست؟

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

linear regression
linear regression

شاید بد توضیح داده باشم، الان برات یه مثال میزنم:

مثلا شما یه دسته دیتا هایی به برنامه دادید ، ولی دیتا هایی که بهش دادید کامل نیست، یادگیری ماشین میاد بر اساس همون دیتا های کمی که شما دادید و با استفاده از الگوریتم های مختلف(از جمله رگرسیون خطی) ازش نتیجه گیری میکنه، و با استفاده از همین تجربه دیتا هایی که شما بهش ندادید رو میابه.

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

راستی بگم که این رگرسیون خطی نسبت به بقیه الگوریتم ها خیلی سادست.




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

رگرسیون یا ضریب همبستگی یه تکنیک آماریه که میتونیم با استفاده از اون یه متغیر رو از روی یک یا چند متغیر پیش بینی کنیم.

توی رگرسیون خطی متغیری که از روی اون یکی متغیر پیش بینی میشه، متغیر وابسته یا Dependent نامیده میشه و متغیری که از روی اون پیش بینی انجام میگیره متغیر مستقل یا Independent نام داره

که معمولا به ترتیب به صورت y و x نشون داده میشن(منظورم اینه که y یعنی متغیر وابسته و x متغیر مستقل هستش)

اگر فقط یه متغیر مستقل وجود داشته باشه به این میگیم رگرسیون ساده(simple linear regression) و در غیر این صورت بهش میگیم رگرسیون چند گانه یا multiple linear regression.

همینطور اگه به جای داشتن یه متغیر وابسته ،چند تا متغیر وابسته داشتیم بهش میگیم چند متغیره.

یکم دقیق تر:

بزار با یه مثال برات توضیح بدم:

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

اینجا متغیر مستقلمون کدوم میشه؟، قیمت کتاب یا تعداد صفحات؟، خب معلومه که تعداد صفحات، چرا؟ چون اون کتابی که تو میخوای بخری بر اساس تعداد صفحات، قیمتش تغییر میکنه.

و کتاب هم میشه متغیر وابسته، چرا؟ چون اینجا x(تعداد صفحات) روی قیمت کتاب(y) تاثیر میزاره.

و اینکه نوع رگرسیون ما رگرسیون ساده هتسش،چون یه متغیر مستقل و یه متغیر وابسته داریم.

حالا یه نمودار براش رسم میکنیم(با استفاده از پایتون):

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

page = [50,70,30,100,60]

price = [20,40,15,50,25]

خب همینطور که میبینید، این داده ها با هم به صورت ستونی قرار داده شدند، منظورم اینه که مثلا هر کتاب ۵۰ صفحه ای ۲۰ تومان می ارزه.

ما در این مثال با این داده ها کار میکنیم، شما میتونید تغییرش بدید(اما پیشنهادم اینه که بعد از مطلب دستکاریش کنید).

مرحله ۱ ، جای گذاری دیتا ها:

کدی که برای جاگذاری دیتا ها استفاده کردم:

#import the libreries
import matplotlib.pyplot as plt
import numpy as np
#Data
page = [50,70,30,100,60]
price = [20,40,15,50,25]
#plot the data
plt.scatter(page, price, color='blue',marker = '+',lw = 3)
plt.xlabel('Page')
plt.ylabel('Price')
b, a = np.polyfit(page,price,1)
#grid the chart
plt.grid(True)

خروجی:

جای گذاری داده ها بر روی نمودار
جای گذاری داده ها بر روی نمودار


توضیح نمودار:

همینطور که میبینید اطلاعاتی که ما به برنامه داده بودیم رو با استفاده از کد بالا روی نمودار نمایش دادیم.

که x ما همون تعداد صفحات و y همون قیمت کتاب هست.

مرحله ۲ ،رسم خط رگرسیون:

کد هایی که برای رسم خط رگرسیون استفاده شده(به علاوه کد های قبلی):

import matplotlib.pyplot as plt
import numpy as np

page = [50,70,30,100,60]
price = [20,40,15,50,25]

plt.scatter(page, price, color='blue',marker = '+',lw = 3)
plt.xlabel('Page')
plt.ylabel('Price')
b, a = np.polyfit(page,price,1)
line = np.linspace(0,max(page) or max(price))
plt.plot(line,a+b*line,color = 'red',lw = 3)
plt.grid(True)

خروجی:

رسم خط رگرسیون
رسم خط رگرسیون




نتیجه گیری از کد ها و نمودار ها:

الان شما میتونید اثراتی از یادگیری ماشین رو از روی نمودار مرحله ی دوم ببینید

همینطور که میبیند خط رگرسیون میاد و خطی رسم میکنه که نقاط کمترین فاصله رو نسبت به خط داشته باشن

این فاصله هایی که میبینید که بین نقاط و خط رگرسیون هست واریانس یا انحراف معیار نام داره.

خب الان این نموداری که کشیدیم به چه دردی میخوره؟

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

مثلا، من دیتایی برای کتاب ۸۰ صفحه ای به برنامه ندادم، اما شما میتونید این رو با استفاده از رگرسیون خطی پیش بینی کنید. چطوری؟ :

اول باید روی محور x یا همون Page نقطه ی مورد نظر خودت رو پیدا کنی، مثلا من 80 رو در نظر میگیرم.

حالا به صورت عمودی میای بالا تا به خط رگرسیون برسی، وقتی که به خط رسیدی همون رو به صورت افقی و از روی همون درجاتی که برای برنامه در نظر گرفتم به سمت چپ میای تا به محور y یا همون Price میرسی، حالا عددی رو که بهش رسیدی رو بخون.

حالا فهمیدی رگرسیون خطی چی کار میکنه!؟

رگرسیون خطی یه الگوریتم یادگیری ماشینه، که میتونیم با استفاده از اون و دیتا هایی که بهش دادیم ، داده هایی رو که بهش ندادیم رو پیش بینی کنیم.
مثلا الان من توی داده هایی که به برنامه ام داده بودم ، داده ای به کتاب ۸۰ صفحه ای اختصاص نداده بودم.
ولی تونستم با استفاده از داده های قبلی ای که داده بودم ، خط رگرسیون رو رسم کنم و بتونم با استفاده از اون قیمت یه کتاب ۸۰ صفحه ای رو پیدا کنم.

شما میتونید هر داده ای رو که بهش نداده بودید(البته توی بازه ای که بهش دادید) رو پیدا کنید.



نتیجه گیری مطلب:

امروز با هم توی این مطلب یه الگوریتم باحال و کاربردی ماشین لرنینگ رو یاد گرفتیم

البته زیاد وارد بخش فرمولش نشدم ، که به نظرم برای کسانی که میخوان برای هوش مصنوعی این الگوریتم رو یاد بگیرن مناسب باشه.

اولی معنی واژه ی رگرسیون رو متوجه شدیم
بعدش کاربرد رگرسیون رو فهمیدیم
بعد خود رگرسیون رو درک کردیم و یه مثال ازش زدیم

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



امیدوارم از این مطلب خوشتون اومده باشه و مفهوم رگرسیون خطی رو متوجه شده باشید.
تا مطلب بعدی خدانگهدار