روشهای یادگیری جمعی ensemble learning-کد متلب و پایتون


قدرت در اتحاد است، اما اتحادی هدفمند و ساختار یافته! فلسفه اصلی یادگیری جمعی این است که به جای اتکا به یک مدل منفرد، چندین مدل در کنار هم برای حل یک مسئله به کار گرفته شوند. این رویکرد با ترکیب خروجی مدل‌های مختلف، عملکرد کلی را بهبود میدهد و در بسیاری از موارد، خطای تعمیم (Generalization Error) را نسبت به یک مدل تکی کاهش می‌دهد. به عبارت دیگر، یادگیری جمعی احتمال بروز underfitting و overfitting را کاهش می‌دهد. اما نکته مهم در اینجا، روش ترکیب و هماهنگی بین مدل‌ها است. در این پست هدف، چارچوب، مزایا و معایب هر تکنیک رو توضیح داده و در آخر هم  کد متلب و پایتون آنها را ارائه میدهیم. 

یادگیری جمعی (ensemble learning)

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

روش Voting در یادگیری جمعی

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

  • در مسائل طبقه بندی: هر مدل یک لیبل برای داده ورودی پیش بینی میکند، و مقداری که بیشترین رأی را بیاورد، خروجی نهایی خواهد بود.
  • در رگرسیون: خروجی نهایی از میانگینِ خروجی مدلها محاسبه میشود.

🔹 مزیت: تصمیم گیری جمعی و کاهش بایاس مدل.
🔸 ایراد: رأی همه مدل‌ها یکسان در نظر گرفته می شود، حتی اگر دقت برخی مدل‌ها باهوش تر باشند!

روش Stacking در یادگیری جمعی 

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

🔹 مزیت:  رای گیری وزندار و منعطف تر از voting
🔸 ایراد: پیچیدگی بیشتر و نیاز به تنظیم دقیق. همچنین مثل voting، از استراتژی خاصی برای بهبود عملکرد مدل پایه استفاده نمی‌کند.

روش Bagging (Bootstrap Aggregating) در یادگیری جمعی 

 برای کاهش overfitting طراحی شده است. مدل پایه (معمولاً مدلی با واریانس بالا مانند درخت تصمیم) روی نمونه‌های تصادفی مختلف از داده‌ها آموزش داده میشود.

در پروسه تصمیم گیری هر مدل خروجی جداگانه میدهد و خروجی نهایی از ترکیب آن‌ها (مثلاً رأی گیری یا میانگین‌ گیری) به دست می‌آید.

🔹 مزیت: مناسب برای داده‌هایی با احتمال overfitting یا تعداد داده کم.
🔸 ایراد: نیاز به تعداد زیادی مدل دارد و  اگر داده overfitting نداشته باشد، مزیت چندانی ندارد.

 

روش Boosting در یادگیری جمعی 

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

🔹 مزیت: مناسب برای حل مسائل سخت و بهبود چشمگیر دقت در بسیاری از موارد.
🔸 ایراد: مستعد overfitting  است و مدل پایه باید ضعیف باشد (یعنی کمی بهتر از تصادفی عمل کند- برای مثال حدودا 55-65 درصد برای مسائل دو کلاسه)، وگرنه باعث افت دقت میشود.

 

نتیجه‌گیری:

تکنیکهایEnsemble Learning نه تنها یک ترفند ساده، بلکه یک استراتژی قدرتمند برای ساخت مدل‌های پایدار و دقیق در مسائل یادگیری ماشین هستند. انتخاب روش مناسب بستگی به نوع داده، مدل پایه، و هدف شما از آموزش دارد.


کد متلب و پایتون روشهای یادگیری جمعی

کد متلب روش Bagging

MATLAB

t= templateTree("MaxNumSplits",55);
% Bagging using Decision Trees
bagModel = fitcensemble(x_train, y_train, 'Method', 'Bag',Learners=t,NumLearningCycles=155);
% Test
y_pred = predict(bagModel, x_test);

کد پایتون روش Bagging

Python

from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
# Define base estimator
base_estimator = DecisionTreeClassifier(max_depth=55)
# Define bagging classifier with 155 base learners
mdl = BaggingClassifier( estimator=base_estimator,n_estimators=155,random_state=42)
# Train the model
mdl.fit(x_train, y_train)
# Predict on test set
y_pred = mdl.predict(x_test)

کد متلب الگوریتم AdaBoost

MATLAB

% define weak model
t= templateTree("MaxNumSplits",3); 
% AdaBoost with decision trees
boostModel = fitcensemble(X, Y, 'Method', 'AdaBoostM2','NumLearningCycles',155,Learners=t);
% AdaBoostM1 for 2-class problems
% Test
y_pred = predict(boostModel, X);

کد پایتون الگوریتم AdaBoost

Python

from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
# Define base estimator (weak model)
base_estimator = DecisionTreeClassifier(max_depth=3)
# Define Boosting classifier with 155 base learners
mdl = AdaBoostClassifier( estimator=base_estimator,n_estimators=155,random_state=42)
# Train the model
mdl.fit(x_train, y_train)
# Predict on test set
y_pred = mdl.predict(x_test)

در فصل 5 دوره 140-ساعته یادگیری ماشین، به صورت مفصل هر کدام از تکنیکهای یادگیری جمعی آموزش داده شده و سپس مرحله به مرحله پیاده سازی شده و در انتها هم چندین پروژه عملی طبقه بندی و رگرسیون برای آنها انجام شده است. هدف ما در این دوره علاوه بر آشنایی با هر تکنیک، بدست آوردن درک عمیق از فلسفه ی هر تکنیک یادگیری جمعی هست تا یاد بگیریم کجا و در چه مسائلی از کدام تکنیک استفاده کنیم.

 


دیدگاه ها

دیدگاهتان را بنویسید

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

code