یادگیری ماشین ترکیبی (Ensemble Machine Learning)

مدل های یادگیری ماشین ترکیبی یا مدل های جمعی یکی از روشهای یادگیری ماشین است که در آن چندین مدل که یادگیری های ضعیف (weak learner) یا مدل های پایه (base models) نامیده می شوند برای حل یک مسئله آموزش داده می شوند و برای داشتن نتایج بهتر با هم ترکیب می شوند. زمانی که مدل های ضعیف به طور صحیح با یکدیگر ترکیب شوند می توانند مدل های دقیق تر و یا پایدارتری به وجود آورند.در مدل های یادگیری ماشین، انتخاب الگوریتم ها در به دست آوردن نتایج خوب بسیار مهم است. انتخاب مدل به متغیرهای زیادی در مسئله مانند مقدار داده ها، ابعاد داده ها و فرضیه توزیع وابسته است. داشتن مدلی با بایاس و واریانس کم (اگرچه این دو در اکثر موارد در جهت عکس هم هستند) دو ویژگی اساسی و مطلوب می باشند. در روشهای یادگیری ماشین ترکیبی، مدل های پایه به عنوان اجزای سازنده با یکدیگر ترکیب می شوند تا مدل های پیچیده تری به وجود آید. بیشتر اوقات این مدل ها به تنهایی عملکرد خوبی ندارند زیرا دارای بایاس یا واریانس بالا هستند.برای ایجاد یک روش یادگیری ماشین ترکیبی، ابتدا باید مدل های پایه را انتخاب کنیم. در بسیاری از موارد به خصوص روش های bagging و boosting، از یک الگوریتم یادگیری پایه واحد استفاده می شود، بنابراین تعدادی مدل پایه یکسان داریم که به روش های مختلف آموزش داده می شوند که به آن مدل های ترکیبی همگون می گویند. در روش های دیگر، انواع مختلفی از الگوریتم های یادگیری پایه مورد استفاده قرار می گیرند که به آن مدل های ترکیبی ناهمگون می گویند.یک نکته مهم در انتخاب مدل های پایه این است که که باید به صورت منطقی و منسجم (Coherent) با یکدیگر ترکیب شوند. یعنی اگر یک مدل پایه با بایاس کم و واریانس بالا انتخاب کنیم، باید از یک روش ترکیبی که تمایل به کاهش واریانس دارد استفاده کنیم، در حالی که اگر مدل های پایه با واریانس کم و بایاس بالا را انتخاب کنیم، باید از روشی که تمایل به کاهش بایاس دارد، استفاده کنیم. سه روش کلی برای ترکیب مدل های پایه وجود دارد:روش bagging: در این روش از مدل های پایه همگون استفاده می شود، آنها به صورت مستقل از یکدیگر و به صورت موازی آموزش می بینند و با فرایند میانگین گیری قطعی (Deterministic averaging process) با یکدیگر ترکیب می شوند.روش boosting: در این روش نیز از مدلهای پایه همگون استفاده می شود که به صورت دنباله ایی و با یک روش تطبیقی (Adaptive) آموزش می بینند (به طوری که یک مدل پایه وابسته به مدل قبلی خود است) و با یک استراتژی قطعی ترکیب می شوند. در شکل زیر تفاوت روش bagging و boosting را مشاهده می کنید.روش stacking: در این روش از مدل های پایه ناهمگون استفاده می شود که به صورت موازی آموزش می بینند و با آموزش یک متامدل (Meta-Model) بر روش خروجی های پیش بینی شده مدل های پایه، ترکیب می شوند.به طور تقریبی می توان گفت روش های bagging بیشتر بر ایجاد مدلی ترکیبی با واریانس کمتر نسبت به مدل های پایه خود، تمرکز دارد. در حالی که روش های boosting و stacking سعی در ایجاد مدلی قوی تر با بایاس کمتر نسبت به مدل های پایه خود دارند (حتی ممکن است واریانس هم کاهش یابد).تفاوت بین مدل bagging و مدل boostingدر ادامه مطلب به بررسی مفصل تر این روش ها می پردازیم:روش ترکیبی bagging: در روش های موازی مدل های متفاوت، مستقل از یکدیگر آموزش می بینند و می توان آنها را به صورت همزمان آموزش داد. شناخته شده ترین این روش bagging است که کوتاه شده کلمات Bootstrapping (خودراه انداز) و Aggregation (تجمیعی) است و هدف آن ایجاد مدلی ترکیبی است که پایدارتر (more robust) از مدل های پایه سازنده خود می باشد. Bootstrapping یک تکنیک آماری است که شامل تولید نمونه ایی به سایز B (که نمونه های Bootstrapنامیده می شود) از دیتاستی به اندازه N به صورت تصادفی و با امکان جایگذاری B نمونه است. در شکل زیر نمونه ایی از روش bootstrapping نشان داده شده است.روش bootstrappingزمانی که مدلی را آموزش می دهیم صرف نظر از اینکه مسئله طبقه بندی یا رگرسیون باشد، تابعی به دست می آوریم که یک ورودی می گیرد و با توجه به مجموعه آموزشی یک خروجی باز می گرداند. ایده روش baggingساده است، چند مدل مستقل آموزش می بینند و از پیش بینی آن ها با یکدیگر ترکیب می شوند تا مدلی با واریانس کمتر به دست بیاوریم. اگر چه در عمل نمی توان مدلی کاملا مستقل به دست آورد زیرا به داده بسیار زیادی نیاز داریم اما با توجه به ویژگی های تقریبی خوب نمونه های Bootstrap، مدل های تقریبا مستقلی آموزش دیده می شوند.ابتدا، چندین نمونه bootstrap ایجاد می کنیم که هر یک از آنها به عنوان یک دیتاست تقربیا مستقل عمل می کند که از توزیع دیتاست اولیه بیرون کشیده شده است. سپس یک مدل پایه (مدل ضعیف) این نمونه های bootstrap آموزش می بینند و در نهایت خروجی ها با روش خاصی ترکیب می شوند و مدلی با واریانس کمتر نسبت به مدل های پایه خود به دست می آید. به طور خلاصه، مدل های پایه آموزش دیده، مانند نمونه های bootstrap تقریبا مستقل هستند و به طور یکسان توزیع شده اند. ترکیب خروجی مدل های پایه، نتایج مورد نظر را تغییر نمی دهد اما واریانس را کاهش می دهد.روش های مختلفی برای ترکیب مدل های پایه ایی که به صورت موازی آموزش داده شده اند، وجود دارد. برای مسائل رگرسیون، از خروجی این مدل ها میانگین گرفته می شود تا خروجی مدل ترکیبی به دست آید. برای مسائل طبقه بندی، کلاس خروجی هر یک از مدل های پایه به عنوان یک رای در نظر گرفته می شود و کلاسی که اکثریت آرا را کسب کند، خروجی مدل ترکیبی خواهد بود. این روش انتخاب سخت (Hard-voting) نامیده می شود. برای مسائل طبقه بندی می توان احتمالی برای هر یک از کلاس های بازگردانده شده توسط مدل ها در نظر گرفت و از این احتمالات میانگین گرفت و کلاسی با بالاترین احتمال متوسط را نگه داریم. این روش انتخاب نرم ( Hard-voting) نامیده می شود. روش های میانگین گیری یا رای گیری، می تواند ساده یا وزن دهی شده باشند.در نهایت می توان گفت یکی از مزایای مهم روش bagging این است که می تواند به صورت موازی اجرا شود. به دلیل اینکه مدل های مختلف مستقل از یکدیگر آموزش می بینند، در صورت نیاز می توان از تکنیک های موازی فشرده نیز استفاده کرد. الگوریتم جنگل تصادفی از روش های پراستفاده bagging است که در ادامه توضیح داده می شود.جنگل تصادفی (Random Forest):درخت یکی از مدل های محبوب در روش های ترکیبی است. مدل های قوی متشکل از چندین درخت، جنگل نامیده می شوند. درختان تشکیل دهنده یک جنگل می توانند سطحی یا shallow (کم عمق) و یا عمیق (deep) باشند. درختان کم عمق، واریانس کم و بایاس بالایی دارند و برای روش های ترتیبی (که در ادامه توضیح می دهیم) انتخاب مناسب تری هستند. درختان عمیق، بایاس کم اما واریانس بالایی دارند و انتخاب مناسبی برای روش های bagging هستند که بر روی کاهش واریانس تمرکز دارند.جنگل تصادفی یکی از روش های bagging است که در آن درختان عمیق بر روی نمونه های bootstrap آموزش داده می شوند، سپس برای به دست آوردن خروجی با واریانس کمتر، با یکدیگر ترکیب می شوند. جنگل تصادفی روش دیگری برای آموزش درختانی که کمتر به هم همبسته (Correlated) هستند نیز دارد. زمانی که درختان بزرگ می شوند، به جای نمونه برداری از مشاهدات موجود در دیتاست برای تولید bootstrap، می توان از ویژگی ها نمونه برداری کرد و تنها زیرمجموعه ایی تصادفی از آن را برای ساخت درخت نگه داشت. نمونه برداری از ویژگی ها سبب می شود که همه درختان در هنگام تصمیم گیری به اطلاعات یکسانی توجه نداشته باشند و همبستگی بین خروجی های آنها کاهش یابد. مزیت دیگر نمونه برداری از ویژگی ها این است که فرآیند تصمیم گیری را در مقایل داده های مفقودی (Missing data)، پایدارتر می سازد. نمونه هایی با داده مفقودی می توانند بر اساس درختانی که ویژگی های آنها دارای مقادیر مفقودی نیستند، پیش بینی می شوند. بنابراین، الگوریتم جنگل تصادفی مفهوم bagging و انتخاب زیرفضای ویژگی تصادفی را ترکیب می کند تا مدلی با استحکام بیشتر ایجاد کند. در شکل زیر طرح کلی الگوریتم جنگل تصادفی آورده شده است. الگوریتم جنگل تصادفیروش ترکیبی boosting:در روش های ترتیبی (Sequential methods) مدل های پایه ترکیبی، به صورت مستقل از یکدیگر آموزش نمی بینند. ایده اصلی این است که مدل ها به صورت تکراری آموزش ببینند به طوری که آموزش مدل در یک مرحله، وابسته به مدل های آموزش دیده در مراحل قبلی است. boosting از مشهورترین این مدل ها است و مدل های ترکیبی ایجاد می کند که بایاس آن کمتر از مدل های پایه سازنده است.روش boosting با همان ایده روش bagging کار می کند: تعدادی مدل ایجاد می کنیم که برای به دست آوردن مدلی قویتر با کارایی بهتر، با یکدیگر ترکیب می شوند. اگرچه، برخلاف روش bagging که هدف آن کاهش واریانس است، boosting تکنیکی است که شامل آموزش چندین مدل پایه به صورت دنباله ایی و به روشی تطبیقی (Adaptive) است. در هر مدل دنباله ایی از مدل های پایه آموزش داده می شود و به نمونه هایی از دیتاست که توسط مدل های قبلی در دنباله به درستی آموزش ندیده اند، اهمیت بیشتری داده می شود. هر مدل جدید تلاش خود را بر روی آموزش سخت ترین نمونه ها متمرکز می کند و انتهای فرآیند مدلی قویتر با بایاس کمتر به دست می آید (اگرچه boosting می تواند سبب کاهش واریانس نیز شود). boostingمانند bagging می تواند در مسائل رگرسیون و طبقه بندی به کار می رود.با توجه به اینکه در روش boosting تمرکز بر کاهش بایاس است، مدل های پایه ایی که در این روش به کار گرفته می شوند، مدل هایی با واریانس کم و بایاس زیاد هستند. برای مثال اگر می خواهید از درخت به عنوان مدل پایه استفاده کنید، می توان از درختان تصمیم سطحی (کم عمق) استفاده کرد. دلیل دیگر برای استفاده از مدل هایی با واریانس کم و بایاس زیاد به عنوان مدل های پایه این است که این مدل ها هزینه محاسباتی کمتری در آموزش دارند. در حقیقت، محاسبات برای آموزش مدل هایی که نمی توانند به صورت موازی آموزش داده شوند (برخلاف روش های bagging)، می تواند بسیار سنگین باشد زیرا چندین مدل پیچیده به صورت دنباله ایی آموزش می بینند.زمانی که مدل های پایه انتخاب شدند، باید تعیین کنیم چگونه این مدل ها به صورت دنباله ایی آموزش ببیند؟ (چه اطلاعاتی از مدل های قبلی در آموزش مدل کنونی، مورد استفاده قرار گیرند؟)، چگونه مدل ها با یکدیگر ترکیب شوند؟ (چگونه مدل کنونی را با مدل های قبلی ترکیب کنیم؟). دو روش مهم boosting الگوریتم های Adaboost و Gradient boosting می باشند. این دو الگوریتم در چگونگی ایجاد و ترکیب مدل های پایه در طول فرآیند دنباله ایی با یکدیگر تفاوت دارند. Adaboost وزن های متصل به هر نمونه آموزشی را به روز رسانی می کند در حالیکه gradient boosting مقدار این نمونه ها را به روز رسانی می کند. تفاوت اصلی آنها از روش حل مسئله بهینه سازی یافتن بهترین مدل برای مجموع وزن دهی شده مدل های پایه ناشی می شود.روش AdaBoost: روش AdaBoost تعداد n درخت تصمیم را در زمان آموزش داده ایجاد می کند. هنگامی که اولین درخت تصمیم ایجاد شد، نمونه هایی که در اولین مدل، نادرست طبقه بندی شده اند، اولویت بیشتری به خود اختصاص می دهند و تنها این نمونه ها به دومین مدل فرستاده می شوند. روش استفاده شده در ایحاد مدل های پایه، تخصیص وزن های بالاتر به نمونه هایی است که با دقت کمتری تخمین زده شده اند. در تکرار بعدی، مدل بر روی نمونه هایی با مقادیر وزن بالا تمرکز می کند. در شکل زیر نمای کلی از الگوریتم Adaboost آورده شده است.الگوریتم Adaboostروش ترکیبی stacking:روش ترکیبی stacking از دو جهت با روش های boostingو bagging تفاوت است. اول اینکه stacking از مدل های پایه ناهمگون استفاده می کند و الگوریتم یادگیری ماشین متفاوت را با یکدیگر ترکیب می کند، در حالی که روش های bagging و boosting از مدل های پایه همگون استفاده می کنند. دوم اینکه روش stacking، مدل های پایه را با استفاده از متامدل با یکدیگر ترکیب می کنند درحالی که bagging و boosting از الگوریتم های قطعی برای ترکیب مدل های پایه با یکدیگر استفاده می کنند.همانطور که قبلا نیز اشاره کردیم، ایده اصلی stacking آموزش چندین مدل پایه متفاوت و ترکیب آنها از طریق آموزش یک متامدل است تا بر اساس پیش بینی های انجام شده توسط مدل های پایه، پیش بینی نهایی را انجام دهد. پس برای ساخت مدل stacking نیاز به دو مورد وجود دارد: L مدل پایه برای آموزش داده ها و یک متامدل برای ترکیب نتایج. برای مثال، در یک مسئله طبقه بندی، می توان یک طبقه بند KNN، یک رگرسیون Logistic و SVM را به عنوان مدل های پایه در نظر گرفت و از شبکه عصبی به عنوان متامدل استفاده کرد. شبکه عصبی به عنوان ورودی خود، خروجی سه مدل پایه را دریافت می کند و پیش بینی نهایی بر اساس آن تولید می کند. شکل زیر طرح کلی روش stacking را نشان می دهد. روش ترکیبی stacking آموزش یک مدل stacking متشکل از L مدل پایه، شامل مراحل زیر ااست:تقسیم داده آموزشی به دو قسمتانتخاب L مدل پایه و آموزش آن بر روی قسمت اولبرای هر مدل پایه L، برای نمونه های موجود در قسمت دوم پیش بینی انجام شود.با استفاده از پیش بینی های انجام شده توسط مدل های پایه به عنوان ورودی، متامدل را بر روی قسمت دوم آموزش دهید.همانطور که گفته شد، دیتاست را دو قسمت تقسیم می کنیم زیرا پیش بینی هایی که بر روی داده های مورد استفاده برای آموزش مدل های پایه انجام شده است برای آموزش متامدل مورد استفاده قرار نگیرد. عیب این روش این است که تنها نیمی از داده ها برای آموزش مدل پایه و نیمی دیگر آن برای آموزش متامدل مورد استفاده قرار می گیرد. برای غلبه به این مشکل می توان از روشی شبیه به اعتبارسنجی متقاطع k-قسمتی (k-fold cross validation) استفاده کرد به طوری که همه نمونه های موجود در دیتاست بتوانند آموزش متامدل مورد استفاده قرار گیرند. برای هر نمونه، مدل های پایه بر روی نمونه هایی از k-1 قسمت که شامل نمونه مورد نظر نیست، آموزش داده شوند.روش ترکیبی stacking چند سطحی (Multi-level Stacking):یک نسخه توسعه یافته از استکینک، stacking چند سطحی است که شامل چندین لایه است. برای مثال stacking سه لایه را در نظر بگیرید. در سطح (لایه) اول، L مدل ضعیف آموزش داده می شود. در سطح دوم به جای آموزش یک متامدل، M متامدل را آموزش می دهیم. در نهایت، در سطح سوم یک متامدل را آموزش می دهیم که ورودی آن پیش بینی هایی است که M متامدل لایه قبل انجام داده اند.