رگرسیون لاسو (Lasso Regression) — به زبان ساده

۳۵۲۸ بازدید
آخرین به‌روزرسانی: ۰۲ خرداد ۱۴۰۲
زمان مطالعه: ۶ دقیقه
رگرسیون لاسو (Lasso Regression) — به زبان ساده

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

فهرست مطالب این نوشته

با استفاده از رگرسیون لاسو سعی می‌کنیم، روش مناسب برای مدل‌سازی متغیر پاسخ براساس کمترین و البته مناسب‌ترین تعداد متغیرهای مستقل را ارائه دهیم. از آنجایی که کلمه «لاسو» (Lasso) به معنی طناب و کمند انداختن است، این روش رگرسیونی نیز سعی دارد تقریبا با استفاده از کمنداندازی متغیرهای مناسب‌تر را از بقیه متغیرها جدا کرده و مدل ساده‌تری ارائه دهد.

lasso and regression

رگرسیون لاسو

در مدل رگرسیون خطی فرض بر این است که N مشاهده از نتایج (متغیر پاسخ y) و p‌ متغیر پیشگو (یا ویژگی) در اختیار ما قرار گرفته است. پیش‌بینی متغیر پاسخ براساس داده‌های مشاهده شده (از متغیرهای پیشگو)، هدف اصلی در رگرسیون خطی است.

همچنین عمل پیش‌بینی ممکن است برای داده‌هایی که در هنگام مدل‌سازی حضور نداشته‌اند (داده‌های تست- test data) به کار گرفته شود.

در مبحث رگرسیون خطی، مدلی که برای نمایش ارتباط بین متغیرهای پاسخ و پیشگو در نظر گرفته می‌شود به صورت زیر است:

$$y_i=\beta_0+\sum_{j=1}^px_{ij}\beta_j+e_i$$

که در آن $$\beta_0$$ تا $$\beta_p$$ پارامترهای نامعلوم و نامشخص مدل خطی هستند. به این پارامترها گاهی ضرایب مدل رگرسیونی نیز می‌گویند. در روش کمترین مربعات خطا تابع هدف برای برآورد پارامترها به صورت زیر معرفی می‌شود:

$$\min_{\beta_0,\beta}\sum_{i=1}^N(y_i-\beta_0-\sum_{j=1}^px_{ij}\beta_j)^2$$

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

در نتیجه پارامترها که با $$\widehat{\beta}$$ نشان داده می‌شوند، مطابق با رابطه زیر حاصل خواهند شد:

$$\widehat{\beta}=(X\prime X)^{-1}X\prime y$$

توجه داشته باشید که ماتریس X دارای ابعاد $$N \times p$$ است. حال تصور کنید که تعداد متغیرها (p) بزرگتر از N باشد. در اینجا مقدارها را به صورت p=5 و N=3 تصور کرده و سعی می‌کنیم محاسبات مربوط به رابطه بالا را انجام دهیم. اگر سطرهای ماتریس X را مشاهدات و ستون‌ها را متغیرها در نظر بگیریم، می‌توان برای مثال X را به صورت زیر نوشت:

$$\begin{bmatrix}
1 & 2 & 3 & 4&5 \\
10 & 9& 8&7 &6\\
12 & 13 & 11&15&14 \\
\end{bmatrix} $$

در نتیجه «ترانهاده» (Transpose) ماتریس X که با $$X\prime$$ نشان داده می‌شود، با تغییر سطرها و ستون‌های آن محاسبه شده و سپس عبارت $$(X\prime X)$$ را بدست می‌آوریم.

$$X\prime X=\begin{bmatrix}
1 & 10 & 12  \\
2 &9&13\\
3 &8  & 13\\
4 &7  & 11\\
5 &6  & 14\\
\end{bmatrix} \times
\begin{bmatrix}
1 & 2 & 3 & 4&5 \\
10 & 9& 8&7 &6\\
12 &  13 & 11&15&14 \\
\end{bmatrix}=$$

$$\begin{bmatrix}
254 & 248 & 215 & 254&233 \\
248 &254& 221&266 &246\\
215 & 221 & 194&233&217 \\254 &266& 233&290 &272\\
233 &246 & 217&272&257 \\
\end{bmatrix}$$

اما با توجه به دترمینان ماتریس حاصلضرب ($$|X\prime X|\approx 0$$) متوجه می‌شویم که این ماتریس معکوس پذیر نیست و امکان برآورد پارامترها برای چنین مدلی وجود ندارد. پس باید با استفاده از روش‌هایی خاص، تعداد متغیرها را کاهش داده یا از شیوه کمینه‌سازی مربعات خطا صرف نظر کنیم.

ولی در رگرسیون لاسو (عمل‌گر گزینش و انقباض کمترین قدرمطلق - Least Absolute Shrinkage and Selection Operator) که توسط رابرت تیب‌شیرانی (Robert Tibshirani) در سال 1996 معرفی شد، روش اول یعنی کاهش بعد متغیرها به کار رفته و از کمینه‌سازی مجموع مربعات تغییر یافته استفاده می‌شود. به این ترتیب با استفاده از یک تابع جریمه (Penalty) روی جمع قدرمطلق ضرایب مدل رگرسیونی، تعداد پارامترها کنترل می‌شود.

Robert_tibshirani
رابرت تیب‌شیرانی

در این حالت، مجموع مربعات خطای رگرسیونی لاسو به صورت زیر نوشته می‌شود:

$$\sum_{i=1}^N(y_i-\beta_0-\sum_{j=1}^px_{ij}\beta_j)^2+\lambda \sum_j|\beta_j|$$

در این رابطه $$\lambda$$ پارامتر تنظیم کننده است، به این معنی که اگر مقدارش برابر با صفر باشد، مدل به رگرسیون عادی تبدیل شده و همه متغیرها در آن حضور خواهند داشت و اگر مقدار آن افزایش یابد تعداد متغیرهای مستقل در مدل کاهش خواهند یافت. بنابراین با انتخاب $$\infty$$ برای $$\lambda$$ عملاً هیچی متغیری در مدل وجود ندارد. تعیین مقدار برای این پارامتر معمولا توسط روش‌ «اعتبارسنجی متقابل» (Cross Validation) انجام می‌شود.

نکته: ممکن است به جای استفاده از پارامتر $$\lambda$$، شرطی که باعث کنترل تعداد متغیرهای مستقل می‌شود را به صورت زیر نوشت که در آن t پارامتر تنظیم کننده مدل است. ولی به هر حال باید توجه داشت که تعداد پارامترها براساس مجموع قدرمطلق ضرایب کنترل می‌شوند.

$$\sum_{j} |\beta_j|<t$$

برای اجرای رگرسیون لاسو، بسته‌هایی در زبان‌های R و Python وجود دارند که در این نوشتار فقط به بررسی و اجرای یکی از آن‌ها در زبان برنامه‌نویسی R می‌پردازیم. «بسته» (Package) محاسباتی lars برای اجرای رگرسیون Lasso در محیط R به کار گرفته می‌شود. کافی است این بسته را بارگذاری کنید تا به توابع مربوط به رگرسیون Lasso دسترسی داشته باشید. در این بسته «مجموعه داده‌های دیابت» (Diabetes Dataset) نیز قرار دارد که از آن برای ایجاد مدل رگرسیونی کمک می‌گیریم.

مثال

ابتدا مجموعه داده دیابت را بارگذاری می‌کنیم. این کار به کمک دستورات زیر امکان پذیر است.

1library(lars)
2data(diabetes)
3attach(diabetes)
4            <div class="faradars-courses faradars-courses-single">
5                <a href="https://faradars.org/courses/simple-linear-regression-fvst9904s01?utm_source=blog.faradars&utm_medium=referral-post&utm_campaign=related-courses-inline-5&utm_term=a.reybod&utm_content=statistics_data-mining_artificial-intelligence" target="_blank">
6                    <div class="card card-course">
7                        <div class="card-image">
8                            <img class="pop-img" src="https://faradars.org/wp-content/uploads/2022/02/13/fvst9904s01-svg.svg" alt="آموزش رگرسیون خطی ساده (رایگان)">
9                        </div>
10                        <div class="card-body">
11                            <div class="card-title">
12                                فیلم آموزش رگرسیون خطی ساده (رایگان) در فرادرس
13                            </div>
14                        </div>
15                        <div class="card-action ml-3">
16                            <div class="fdb-btn">کلیک کنید</div>
17                        </div>
18                    </div>
19                </a>
20            </div>
21        

با استفاده از دستور $$head(diabetes,10)$$ ده سطر اول از این داده‌ها مطابق با تصویر زیر نمایش داده می‌شود.

data heading in lasso
(<a href="https://blog.faradars.org/wp-content/uploads/2018/09/data-heading-in-lasso.png">مشاهد تصویر در ابعاد اصلی</a>)

همانطور که در تصویر مشخص است، متغیرهای مستقل با پیشوند x و متغیر پاسخ نیز با y نام‌گذاری شده‌اند. در این مثال از متغیرهای دیگر مانند گروه x2 و ... در ایجاد مدل استفاده نشده است. مشخص است که متغیرهای مستقل، استاندارد شده‌اند یعنی دارای میانگین صفر و واریانس ۱ هستند تا محاسبات به راحتی صورت پذیرند. حال به بررسی کد مربوط به رگرسیون لاسو می‌پردازیم. کدهای زیر به منظور تهیه یک مدل رگرسیونی برای داده‌های دیابت با روش رگرسیون لاسو نوشته شده‌اند.

1object <- lars(x,y,type = 'lasso')
2object
3plot(object)
4lassocoef=coef(object)
5lassocoef

در خط اول کد، بارگذاری بسته lars صورت گرفته است. دستور lars با توجه به متغیرهای x و y، مدل رگرسیونی لاسو را با پارامتر $$type='lasso'$$ اجرا کرده و خروجی را در object قرار می‌دهد. فرمان plot‌ نیز خروجی تولید شده را به صورت نمودار ظاهر می‌سازد. برآورد پارامترهای مدل در هر مرحله نیز با دستور coef برای متغیر object تولید می‌شود.

خروجی که در متغیر object قرار گرفته را می‌توانید با وارد کردن نام این متغیر (همانطور که در سطر دوم کد دیده می‌شود) مانند تصویر زیر ظاهر کنید.

lasso steps
خروجی رگرسیون لاسو

در خروجی مشخص است که متغیرها، به ترتیبی که در سطر Step دیده می‌شوند به مدل وارد شده‌اند. برآورد پارامترهای مدل در رگرسیون لاسو از طریق الگوریتم‌های بهینه‌سازی، مرحله به مرحله تا رسیدن به کمترین مربعات خطا انجام می‌شود. مقدار «ضریب تعیین» (R-squared) برای مدل ایجاد شده نیز برابر با 0.518 است.

برای مثال در مرحله صفر همه ضرایب (پارامترهای مدل) صفر هستند. در مرحله اول متغیر bmi با شماره ۳ و سپس متغیر ltg‌ با شماره ۹ وارد مدل می‌شوند. همچنین متغیر age با شماره ۱ در مرحله ۱۰ یعنی آخرین مرحله به مدل وارد شده است. متغیر hdl در مرحله ۱۱ خارج سپس وارد مدل شده‌ است. به نظر می‌رسد که این متغیر نباید در مدل در نظر گرفته شود.

برای مشاهده مقدار دقیق پارامترهای مدل از دستور ceof از بسته LARS استفاده می‌‌شود. ولی از آنجایی که مقدار این پارامترها در هر مرحله متفاوت است جدولی از برآورد پارامترها ارائه می‌شود که به صورت زیر خواهد بود.

lasso coefficients
جدول ضرایب مربوط به رگرسیون لاسو

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

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

lasso plot
نمودار ضرایب مدل رگرسیون لاسو

ترتیب ورود ضرایب در محور افقی که در بالای نمودار مشخص شده، قابل تشخیص است. همچنین مقدار هر یک از پارامترها با توجه به مراحل مختلف روی محور عمودی سمت چپ دیده می‌شود. محور عمودی سمت راست نیز شماره پارامتر را نشان می‌دهد. در پایین نمودار در قسمت محور افقی نیز نسبت مقدار قدرمطلق هر یک از ضرایب به حداکثر قدرمطلق آن یعنی $$\frac{|\beta|}{\max{|\beta|}}$$ دیده می‌شود.

اگر علاقه‌مند به یادگیری مباحث مشابه مطلب بالا هستید، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۲۱ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
۷ دیدگاه برای «رگرسیون لاسو (Lasso Regression) — به زبان ساده»

زمانیکه تعداد مشاهدات کمتر از تعداد متغیرهای مستقل است میشود از PLSهم میشود استفاده کرد؟ فرقش با رگرسیون لاسو چیست

سلام و عرض ادب
ببخشید لطفا امکانش هست منبع مطالب رو بفرمایید
از لطف شما سپاسگزارم

با سلام؛

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

با تشکر از همراهی شما با مجله فرادرس

عالی بود ممنون از زحمات شما

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

سلام و عرض ادب
بسیار سپاس از اینکه دید کلی در مورد این موضوع به ما می دهید.

با سلام. کارتون فوق العادس، برای افرادی که میخواهند به موضوع وارد بشن این توضیحات فوق العادس.

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *