اعتبار سنجی متقابل (Cross Validation) — به زبان ساده

۶۷۳۲ بازدید
آخرین به‌روزرسانی: ۰۳ خرداد ۱۴۰۲
زمان مطالعه: ۹ دقیقه
اعتبار سنجی متقابل (Cross Validation) — به زبان ساده

اغلب در مدل‌سازی، بخصوص در مبحث «آموزش ماشین» (Machine Learning)، احتیاج به برآورد پارامترهای مدل داریم. در صورتی که تعداد پارامترها زیاد باشد، پیچیدگی مدل زیاد شده و ممکن است محاسبات به سادگی قابل انجام نباشند. اعتبارسنجی متقابل یکی از راه‌هایی است که می‌توان تعداد پارامترها (متغیرهای) مدل را بصورت بهینه تعیین کرد.

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

با افزایش پارامترهای مدل (افزایش متغیرها مستقل)، کارایی مدل افزایش خواهد یافت، زیرا میانگین مربعات برای نمونه جمع‌آوری شده به هر حال با افزایش متغیرها کاهش خواهد یافت. بنابراین مناسب‌ترین مدل برای نمونه با حداکثر تعداد پارامتر بدست آمده است. برآورد پارامترهای حاصل از این نمونه را به اصطلاح «برآوردهای درون-نمونه‌ای» (In-sample Estimation) می‌نامند.

ولی اگر این مدل، برای نمونه دیگری از همان جامعه به کار رود، شاید مناسب محسوب نشود. به نظر می‌رسد افزایش متغیرها، ممکن است به کارایی مدل آسیب برساند. چنین مشکلی را با نام «بیش‌برازش» (Overfitting) می‌شناسیم. راه حل برای چنین مسئله‌ای می‌تواند استفاده از «اعتبارسنجی متقابل» یا «اعتبارسنجی متقاطع» (Cross Validation) باشد که هدف در آن تعیین تعداد متغیرها (پارامترهای) مناسب مدل است. گاهی به این روش، «برآورد گردشی» (Rotation Estimation) یا «آزمایش خارج از نمونه» (Out-of-sample testing) نیز می‌گویند.

در چنین حالتی، به پارامترهایی که توسط اعتبارسنجی متقابل برآورد می‌شوند، «برآوردهای بیرون-نمونه‌ای» (Out-of-sample Estimation) می‌گویند.

برای آشنایی بیشتر با مفهوم بیش‌برازش بهتر است مطلب بیش برازش (Overfitting)، کم برازش (Underfitting) و برازش مناسب --- مفهوم و شناسایی را قبلا مطالعه کرده باشید. از آنجایی که در این نوشتار به مباحث مرتبط با رگرسیون اشاره می‌کنیم، مطالعه رگرسیون خطی --- مفهوم و محاسبات به زبان ساده خالی از لطف نیست.

اعتبارسنجی متقابل

برای سنجش کارایی یک مدل، معمولا دو روش به کار گرفته می‌شود: ۱- ارزیابی براساس فرضیاتی که باید مدل در آن‌ها صدق کند. ۲- ارزیابی براساس کارایی مدل در پیش‌بینی مقدارهای جدید (مشاهده نشده).

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

مشخص است که بررسی موارد بالا براساس داده‌هایی که مدل براساس آن ساخته شده است،‌ میسر است ولی نمی‌توان کارایی مدل را برای داده‌های جدیدی که هنگام مدل‌سازی مشاهده نشده‌اند، سنجید.

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

به این ترتیب برای اندازه‌گیری کارایی مدل و بهینه بودن آن متوسل به برآورد خطای مدل براساس داده‌هایی می‌شویم که برای اعتبارسنجی متقابل کنار گذاشته شده‌اند. برآورد این خطا را معمولا «خطای خارج از نمونه» (Out-of-sample error) می‌نامند. در این نوشتار، به بررسی اعتبارسنجی متقابل به عنوان ابزاری برای اندازه‌گیری این خطا، پرداخته و شیوه‌های مختلف پیاده‌سازی آن را بررسی می‌کنیم.

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

overfitting

با توجه به این نمودار مشخص است که با افزایش تعداد پارامترهای مدل، میزان خطای مدل براساس داده‌های آموزشی کاهش یافته است. ولی برآورد خطای مدل براساس داده‌های آزمایشی ابتدا نزولی بوده و در زمانی که تعداد پارامترهای مدل (پیچیدگی مدل) از میزانی بیشتر شده (مثلا ۲۰ پارامتر) افزایشی شده است. این اثر دقیقا همان مشکل «بیش‌برازش» است که به کمک اعتبارسنجی متقابل سعی در رفع آن می‌کنیم.

تنظیم پارامترها به کمک اعتبارسنجی متقابل

فرض کنید مشاهداتی از جامعه به صورت یک نمونه تصادفی در دسترس است که قرار است از آن‌ها در مدل‌سازی استفاده شود. هدف در اعتبارسنجی متقابل، دستیابی به مدلی است که تعداد پارامترهای آن بهینه باشد. یعنی پیدا کردن مدلی است که دچار بیش‌برازش نباشد. برای برای دستیابی به این هدف در «آموزش ماشین» (Machine Learning) معمولا داده‌ها را به دو قسمت تفکیک می‌کنند.

  • قسمت داده‌های آموزشی (Training set): از این بخش از داده‌ها به منظور ایجاد مدل و برآورد پارامترهای آن استفاده می‌شود.
  • قسمت داده‌های آزمایشی (Test set): این قسمت از داده‌ها برای بررسی کارایی مدل استفاده می‌شود. اهمیت این بخش از داده‌ها در این نکته است که این مشاهدات شامل مقدارهای متغیرهای مستقل (xها) و پاسخی (y) هستند که در مدل به کار نرفته ولی امکان مقایسه مقدار پبش‌بینی شده ($$\widehat{y}$$) را با مقدار واقعی به ما می‌دهند. البته توجه داریم که این داده‌ها مدل را تحت تاثیر قرار نداده‌اند، پس در تعیین پارامترهای مدل نقشی نداشته و فقط برای ارزیابی مدل به کار می‌روند.

با توجه به تفکیکی که برای این دو گروه داده در نظر گرفته شد، مدل‌سازی فقط براساس بخش داده‌های آموزشی خواهد بود. ولی در روش اعتبارسنجی متقابل که از این به بعد آن را به اختصار «CV» می‌نامیم، طی یک فرآیند تکرار شونده، قسمت داده‌های آموزشی (Training set) که به منظور مدل‌سازی به کار می رود، خود به دو بخش تفکیک می‌شود. در هر بار تکرار فرآیند CV، بخشی از داده‌ها برای آموزش و بخشی دیگر برای آزمایش مدل به کار می‌رود. به این ترتیب این فرآیند یک روش باز‌نمونه‌گیری به منظور برآورد خطای مدل محسوب می‌شود.

نسبت این قسمت‌ها نیز البته جای بحث دارد که در این نوشتار به آن نمی‌پردازیم ولی معمولا ۵۰ درصد کل داده‌ها به منظور آموزش، ۲۵ درصد نیز برای اعتبارسنجی متقابل و مابقی داده‌ها برای آزمایش مدل در نظر گرفته می‌شود.

نکته: باید توجه داشت که داده‌های آزمایشی در فرایند CV ممکن است در تکرار بعدی به عنوان داده‌های آموزشی به کار روند، در نتیجه ماهیت آن‌ها با داده‌هایی که در قسمت قبل به عنوان داده‌های آزمایشی (Test set) معرفی شد، متفاوت است.

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

cross validation process

در هر مرحله از فرایند CV، مدل بدست آمده توسط داده‌های آزمایشی برای پیش‌بینی داده‌های CV به کار گرفته و «خطا» (Error) یا «دقت» (Accuracy) حاصل از برازش مدل روی داده‌های CV محاسبه می‌شود. معمولا میانگین این خطاها (دقت‌ها) به عنوان خطای (دقت) کلی مدل در نظر گرفته می‌شود. البته بهتر است انحراف معیار خطاها (دقت‌ها) نیز گزارش شود. به این ترتیب با توجه به تعداد پارامترهای مختلف (پیچیدگی مدل)، می‌توان مدل‌های متفاوتی تولید و خطای برآورد آن‌ها را به کمک روش CV‌ اندازه‌گیری کرد. در انتها مدلی را به عنوان مدل مناسب انتخاب خواهیم کرد که دارای کمترین برآورد خطا باشد.

روش‌های مختلف اعتبارسنجی متقابل

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

روش Holdout

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

سادگی محاسبات و عدم تکرار فرآیند CV در این روش از مزیت‌های آن محسوب می‌شود. اگر داده‌های مربوط به بخش آموزش و اعتبارسنجی همگن باشند، این روش مناسب به نظر می‌رسد. ولی از آنجایی که محاسبات خطای مدل براساس فقط یک مجموعه داده، بدست آمده ممکن است برآورد مناسبی برای خطای مدل ارائه نشود.

holdout method

روش Leave-One-Out

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

شبه کد زیر می‌تواند مراحل اجرای این روش CV را بهتر نشان دهد.

1Input:
2
3x, {vector of length N with x-values of data points}
4
5y, {vector of length N with y-values of data points}
6
7Output:
8
9err, {estimate for the prediction error}
10
11Steps:
12
13err ← 0
14
15for i ← 1, . . . , N do
16
17// define the cross-validation subsets
18
19x_in ← (x[1], . . . , x[i − 1], x[i + 1], . . . , x[N])
20
21y_in ← (y[1], . . . , y[i − 1], y[i + 1], . . . , y[N]
22
23x_out ← x[i]
24
25interpolate(x_in, y_in, x_out, y_out)
26
27err ← err + (y[i] − y_out)^2
28
29end for
30
31err ← err/N

همانطور که در کد بالا دیده می‌شود، در مرحله iام، مشاهده iام از مجموعه داده‌های آموزشی خارج شده و مدل توسط تابع Interpolate برآورد شده و مقدار تخمینی برای متغیر پاسخ در مشاهده iام توسط مدل بدست می‌آید. مربع فاصله مقدار واقعی متغیر پاسخ ([y[i) از مقدار برآورد شده (y_out)، نیز به عنوان برآورد خطای مدل در نظر گرفته شده و در انتها، میانگین خطای همه مدل‌ها به عنوان برآورد خطای کلی محاسبه شده است.

روش Leave-P-Out

اگر در روش LOO، تعداد مشاهداتی که از مجموعه داده‌های آموزشی خارج می‌شوند برابر با p‌ باشد، آن را روش (Leave-p-Out) یا به اختصار LPO می‌نامند. در نتیجه اگر n تعداد مشاهدات در مجموعه داده‌های آموزشی باشد، تعداد مراحل اجرای فرآیند CV برابر با $${n \choose p}$$ خواهد بود.

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

برای مثال اگر تعداد مشاهدات برابر با n=100 و p=30 باشد، تعداد مراحل فرآیند CV برابر است با:

$${100 \choose 30}=3 \times 10^{25}$$

که شاید عملا مقایسه این تعداد مدل میسر نباشد.

روش k-Fold

اگر مجموعه داده‌های آموزشی را به طور تصادفی به k زیرنمونه یا «لایه» (Fold) با حجم یکسان تفکیک کنیم، می‌توان در هر مرحله از فرایند CV، تعداد k-1 از این لایه‌ها را به عنوان مجموعه داده آموزشی و یکی را به عنوان مجموعه داده اعتبارسنجی در نظر گرفت. تصویر زیر، مراحل روش k-Fold را به خوبی نشان می‌دهد. مشخص است که با انتخاب k=10، تعداد تکرارهای فرآیند CV برابر با ۱۰ خواهد بود و دستیابی به مدل مناسب به سرعت امکان‌پذیر می‌شود.

10_fold_cv

اعتبارسنجی براساس تکرار تصادفی باز‌نمونه‌گیری

در این روش که گاهی به «اعتبارسنجی مونت کارلو» (Monte Calro Cross Validation) معروف است، مجموعه داده به طور تصادفی به دو بخش آموزش و اعتبارسنجی تفکیک می‌شود. سپس پارامترهای مدل براساس داده‌های آموزش برآورد شده و خطا یا دقت مدل نیز به کمک داده‌های اعتبارسنجی محاسبه می‌شود. با تکرار تفکیک تصادفی داده‌ها، میانگین خطا یا دقت مدل‌ها، به عنوان معیار انتخاب مدل مناسب در نظر گرفته می‌شود (کمترین خطا یا بیشترین دقت).

با توجه به انتخاب تصادفی داده‌ها، نسبت حجم داده‌های آموزشی و اعتبارسنجی به تعداد تکرار‌ها وابسته نخواهد بود و برخلاف روش k-Fold می‌توان با هر تعداد،‌ فرآیند CV را انجام داد. ولی در عوض به دلیل انتخاب تصادفی زیرنمونه‌ها، ممکن است بعضی از مشاهدات هرگز در بخش اعتبارسنجی به کار گرفته نشده و بعضی دیگر بیش از یکبار در محاسبات برآورد خطای مدل به کار روند.

اگر تعداد تفکیک‌های تصادفی در این روش به سمت بی‌نهایت میل کند، نتایج حاصل از اعتبارسنجی به سمت نتایج حاصل از روش Leave-P-Out میل می‌کند. همچنین در حالت «طبقه‌ای روش مونت کارلو» (Stratified Monte Carlo Validation)، نمونه‌های تصادفی به شکلی انتخاب می‌شوند که میانگین متغیر پاسخ (مثلا متغیر وابسته در بحث رگرسیون) برای هر زیرنمونه‌ها یکسان باشد. این کار زمانی که متغیر پاسخ به صورت باینری باشد، می‌تواند باعث متعادل شدن نمونه‌ها شود.

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

monte carlo cross validation

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

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

معایب روش اعتبارسنجی متقابل

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

اگر مطلب بالا برای شما مفید بوده است، احتمالاً آموزش‌هایی که در ادامه آمده‌اند نیز برایتان کاربردی خواهند بود.

^^

بر اساس رای ۴۲ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
۶ دیدگاه برای «اعتبار سنجی متقابل (Cross Validation) — به زبان ساده»

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

با سلام و احترام در خصوص روش k-fold cross پس از آنکه مجموع خطا ها محاسبه گردید رنج استاندارد و مورد قبول که تایید کننده اعتبار مدل میباید چقدر است؟
ممنون

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

سلام.
خیلی ممنون بابت مقاله خوبتان.
2 تا سوال داشتم.
-آیا در روش k-fold ما تعدادی از داده ها را برای تست نهایی مدل کنار نمی گذاریم؟ داده هایی که اصلا در آموزش شرکت نکرده باشند.
-آیا در روش k-fold ما وقتی در یک مرحله یک دسته از داده ها را کنار می گذاریم و دسته دیگر را برای آموزش استفاده می کنیم، آموزش را کامل به پایان می رسانیم یا این کار فقط برای یک epoch‌است. یعنی در هر epoch داده های آموزشی و اعتبارسنجی عوض می شود یا کلا برای هر fold ما یک مدل جداگانه خواهیم داشت. اگر این طور است(مدل جداگانه برای هر fold) فایده این کار چیست؟در واقع ما با این کار ما داده های تستی را پیدا کرده ایم که کمترین خطا را داشته باشد.

با سلام؛

از همراهی شما با مجله فرادرس سپاس‌گزاریم. در اعتبارسنجی متقابل، روال به این صورت نیست کهداده‌هایی وجود داشته باشند که صرفا و همیشه برای تست استفاده شوند و داده‌هایی فقط برای آموزش مورد استفاده قرار بگیرند. بلکه همانطور که در مطلب نیز توضیح داده شده است، داده‌های موجود هر بار با نسبت خاصی به تست و آموزش اختصاص پیدا می‌کنند تا بهترین حالت برای حجم داده‌های مورد استفاده برای آموزش و تست حاصل شود تا از «بیش‌برازش» (Overfitting) و «کم‌برازش» (Overfitting) جلوگیری شود. برای درک بهتر عملکرد اعتبارسنجی متقابل، مشاهده آموزش‌های زیر پیشنهاد می‌شود:

آموزش داده کاوی یا Data Mining در متلب

آموزش تخمین خطای طبقه بندی یا Classifier Error Estimation

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

نظر شما چیست؟

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