یادگیری ترکیبی میتواند به صورت موازی یا ترکیبی انجام شود. در روش موازی، چندین الگوریتم به صورت همزمان بر روی دادهها کار میکنند و نتایج آنها ترکیب میشوند تا به یک پاسخ نهایی برسیم. در روش ترکیبی، الگوریتمهای مختلف به ترتیب اجرا میشوند و خروجی هر یک به عنوان ورودی برای الگوریتم بعدی استفاده میشود. مزایای یادگیری ترکیبی شامل افزایش دقت و عملکرد الگوریتمها، بهبود از نظر انعطافپذیری، قابلیت جبران خطاهای الگوریتمها و افزایش استقلال الگوریتمها از یکدیگر است. این روش به ویژه در مسائل پیچیده و دادههای بزرگ مفید است و میتواند بهبود قابل توجهی را در عملکرد الگوریتمهای یادگیری ماشین ایجاد کند.
یادگیری ترکیبی چگونه کار میکند؟
یادگیری ترکیبی به طور کلی به دو روش عمده پیادهسازی میشود که جمعی (Ensemble) و آموزش متوالی (Sequential Training) نام دارد. هر روش دارای رویکردها و الگوریتمهای مختلفی است، که در زیر به معرفی آنها میپردازم.
1. تجمیع/جمعی (Ensemble)
تجمیع یا به عبارت دقیقتر، جمعی (Ensemble) در یادگیری ماشین، روشی است که از ترکیب چندین مدل یادگیری ماشین برای بهبود کارایی و دقت پیشبینی استفاده میکند. در این روش، چندین مدل مستقل ایجاد میشوند و نتایج آنها ترکیب میشود تا به یک پاسخ نهایی برسیم. هر مدل ممکن است از یک الگوریتم یادگیری ماشین مشابه یا متفاوت استفاده کند و یا با استفاده از تنظیمات و پارامترهای مختلف آموزش داده شود.
یکی از روشهای معروف مدل جمعی، روش رای اکثریت (Majority Voting) است. در این روش، چندین مدل یادگیری ماشینی با یک الگوریتم یا الگوریتمهای مختلف آموزش داده میشوند. هنگام پیشبینی، هر مدل پاسخ خود را ارائه میدهد و با اعمال یک قاعده مشخص (مثلا رای اکثریت)، پاسخ نهایی تعیین میشود. به عنوان مثال، در مسئله طبقهبندی دوتایی، اگر بیشترین تعداد مدلها به یک کلاس تعلق داشته باشند، پیشبینی نهایی نیز به آن کلاس تعلق میگیرد. روشهای دیگری نیز برای تجمیع وجود دارند. تجمیع بوتستراپ (Bootstrap Aggregating) یکی از آنها است. در این روش، تعدادی نمونه تصادفی از دادهها ایجاد میشود و هر نمونه به یک مدل یادگیری ماشین اختصاص مییابد. سپس، پاسخهای این مدلها ترکیب شده و میانگین یا اکثریت آنها به عنوان پاسخ نهایی استفاده میشود. مورد بعدی آمیختهسازی Boosting است. در این روش، یک سری مدل یادگیری ماشین به ترتیب متوالی آموزش داده میشوند. هر مدل سعی میکند روی نمونههایی که مدلهای قبلی خطا داشتهاند تمرکز کند تا خطاها را بهبود دهد. نتایج این مدلها با استفاده از روشهایی مانند ترکیب تجمیع بوتستراپ یا وزندهی ترکیب میشوند. رویکرد تجمیع (Ensemble) در یادگیری ماشین مزایای خوبی در اختیار ما قرار میدهد که برخی از آنها به شرح زیر هستند:
- بهبود دقت پیشبینی: با ترکیب نتایج چندین مدل یادگیری ماشینی، میتوان دقت پیشبینی را افزایش داد، زیرا هر مدل ممکن است بر روی بخشی از دادهها یا جنبههای خاصی از مسئله تمرکز کند و نقاط قوت خود را نشان دهد. با ترکیب نتایج، میتوان نقاط قوت هر مدل را استخراج کرده و دقت کلی را بهبود داد.
- پایداری در برابر نویز و انحرافها: تجمیع میتواند پایداری در برابر نویز و انحرافهای داده را افزایش دهد. در صورتی که یک مدل به دلیل وجود نویز یا انحراف در دادهها عملکرد ضعیفی داشته باشد، مدلهای دیگر میتوانند این مشکل را جبران کنند و پاسخ درست را تعیین کنند.
- تعمیمپذیری بهتر: با استفاده از رویکرد جمعی میتوان تعمیمپذیری مدلها را بهبود داد. مدلهای مختلف با الگوریتمها و تنظیمات متفاوت آموزش داده میشوند و از دیدگاههای مختلفی به دادهها نگاه میکنند. رویکرد فوق باعث میشود که مدلها توانایی بهتری در تعمیمپذیری به دادههای جدید و ناشناخته داشته باشند.
- کاهش ارتباط میان مدلها: با استفاده از مدلهای مستقل در تجمیع ارتباط میان مدلها کاهش مییابد. به بیان دقیقتر اگر یک مدل خاص به دلیل مشکلاتی مانند دادههای غیر صحیح یا خطاهای آموزشی عملکرد ضعیفی داشته باشد، سایر مدلها قادر به تصحیح این خطاها و تأمین پاسخ درست خواهند بود. به طور کلی، تجمیع یک روش قوی در یادگیری ماشین است که میتواند دقت و کارایی پیشبینی را افزایش دهد و مدلها را در برابر نویز و انحرافها بیشتر کند.
2. آموزش متوالی (Sequential Training)
آموزش متوالی در یادگیری ماشین به روشی اشاره دارد که در آن مدل یادگیری ماشین به صورت متوالی و در چندین مرحله آموزش داده میشود. در این روش، مدل به تدریج و در قالب دستههای متوالی از دادهها آموزش میبیند و پارامترهای خود را بهبود میدهد. فرآیند آموزش متوالی معمولا در مسائلی که دادهها به صورت توالی و زمانی مرتبط هستند، مورد استفاده قرار میگیرد. از جمله این مسائل به موارد زیر باید اشاره کرد:
- پیشبینی سریهای زمانی: در این مسئله، هدف پیشبینی مقادیر آینده سریهای زمانی است. مدل یادگیری ماشین در اینجا با استفاده از دادههای گذشته آموزش میبیند و سپس به تدریج پیشبینیهای آینده را انجام میدهد.
- ترجمه ماشینی: در این مسئله، هدف ترجمه متن از یک زبان به زبان دیگر است. مدل یادگیری ماشین با استفاده از جملات و متون آموزشی، تدریجا به صورت متوالی و با توجه به ساختار جمله و کلمات، قواعد ترجمه را یاد میگیرد.
- تشخیص اشیاء در ویدئوها: در این مسئله، هدف تشخیص و تعیین موقعیت اشیاء در ویدئوها است. مدل یادگیری ماشین در اینجا با تحلیل توالی فریمهای ویدئو، به تدریج قواعد و الگوهای مرتبط با اشیاء را میآموزد.
در آموزش متوالی، ابتدا مدل یادگیری ماشین با استفاده از دادههای اولیه آموزش داده میشود. سپس، به تدریج و در هر مرحله، مدل با دستههای جدیدی از دادهها آموزش میبیند و پارامترهای خود را به روز میکند. به عبارت دیگر، مدل در هر مرحله به تدریج اطلاعات بیشتری را درباره دادهها و قواعد مرتبط با مسئله مورد نظر جمعآوری میکند.
مزیت آموزش متوالی در یادگیری ماشین این است که مدل قادر است اطلاعات مرتبط با دادههای جدید را در هر مرحله به دست آورد و عملکردش در گذر زمان افزایش پیدا میکند. همچنین، این روش میتواند مشکلاتی که معمولا در آموزش دستهای (Batch Training) رخ میدهند، مانند بروز بیشبرازش (Overfitting) را تا حدود زیادی برطرف میکند. با این حال، آموزش متوالی نیاز به زمان و منابع بیشتری دارد، زیرا باید مدل را در چندین مرحله آموزش دهیم و هر مرحله را با دادههای جدید تکرار کنیم. در کل، آموزش متوالی یک روش مفید است که میتواند به بهبود عملکرد و دقت مدل یادگیری ماشین در مسائلی که دادهها به صورت توالی هستند، کمک کند. در هر دو روش تجمیع و آموزش متوالی، هدف نهایی ترکیب چندین الگوریتم یادگیری ماشین، بهبود دقت و عملکرد پیشبینی مدل است. با ترکیب نتایج چندین الگوریتم، میتوان نقاط قوت هر الگوریتم را استخراج کرده و نقاط ضعف را جبران کرد. به علاوه، یادگیری ترکیبی میتواند مقاومت در برابر نویز و انحرافهای دادهها را افزایش دهد و بهبودی در تعمیمپذیری مدلها را ایجاد کند.
یادگیری ترکیبی چگونه پیاده سازی می شود؟
همانگونه که اشاره کردیم، یادگیری ترکیبی روشی است که با استفاده از ترکیب و تجمیع پیشبینیهای چندین مدل یادگیری ماشین، بهبود عملکرد و دقت نهایی را به همراه دارد. این روش معمولا در مسائلی که دادهها پیچیده هستند و یا مدلهای مختلف به دلایل مختلفی بهترین عملکرد را ندارند، استفاده میشود. پیادهسازی یادگیری ترکیبی میتواند به چندین روش انجام شود. در زیر، دو روش معمول برای پیادهسازی یادگیری ترکیبی را توضیح میدهم:
- رایگیری (Voting): در این روش، تعدادی مدل یادگیری ماشین مستقل آموزش داده میشوند و سپس پیشبینیهای آنها ترکیب میشوند. رایگیری میتواند به صورت اکثریت (Majority Voting) یا وزندار (Weighted Voting) انجام شود. در رایگیری اکثریت، پیشبینی کلی بر اساس اکثریت نتایج تمام مدلها انجام میشود. در رایگیری وزندار، به هر مدل یک وزن نسبت داده میشود و پیشبینی کلی با توجه به وزنهای مدلها تعیین میشود.
- بوتاستراپینگ (Bootstrap Aggregating): در این روش، چندین نمونه تصادفی از دادههای آموزشی ایجاد میشود و بر روی هر نمونه، یک مدل یادگیری ماشین آموزش داده میشود. سپس پیشبینیهای هر مدل ترکیب میشوند تا پیشبینی نهایی حاصل شود. این روش معمولا با استفاده از روش رایگیری اکثریت انجام میشود.
در هر دو روش رایگیری و بوتاستراپینگ، مزیت اصلی یادگیری ترکیبی در بهبود استقلال مدلها و کاهش بیشبرازش است. با ترکیب پیشبینیهای چندین مدل، میتوانیم از تنوع و تجمیع قدرت هر مدل بهرهبرداری کنیم و عملکرد نهایی را بهبود ببخشیم. برای پیادهسازی یادگیری ترکیبی، میتوانید از کتابخانههای موجود در زبان برنامهنویسی خود استفاده کنید.همچنین، در برخی از کتابخانههای معروف یادگیری ماشین مانند scikit-learn در پایتون، پیادهسازی روشهای یادگیری ترکیبی مانند رایگیری و بوتاستراپینگ به شکل سادهتری قابل انجام است. به عنوان مثال، برای رایگیری میتوانید از کلاس VotingClassifier و برای بوتاستراپینگ میتوانید از کلاس BaggingClassifier استفاده کنید. این کتابخانهها تمامی جزئیات اجرای روشهای یادگیری ترکیبی را برای شما انجام میدهند و شما فقط باید مدلهای مورد نظر خود را تعریف و تنظیم کنید.
در مرحله اول، باید مدلهای مختلفی را آموزش داده و تنظیم کنید. سپس با استفاده از کلاسهای مربوطه در کتابخانه، مدلها را به عنوان ورودی برای رایگیری یا بوتاستراپینگ ارسال کنید. در نهایت، مدل یادگیری ترکیبی آموزش داده شده را میتوانید برای پیشبینی روی دادههای تست استفاده کنید. به عنوان مثال، در scikit-learn، برای استفاده از رایگیری میتوانید به صورت زیر عمل کنید:
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
# تعریف مدلهای مختلف
model1 = LogisticRegression()
model2 = DecisionTreeClassifier()
model3 = SVC()
# تعریف رایگیری
voting_model = VotingClassifier(estimators=[('lr', model1), ('dt', model2), ('svm', model3)], voting='hard')
# آموزش مدلها
voting_model.fit(X_train, y_train)
# پیشبینی
predictions = voting_model.predict(X_test)
در این مثال، مدلهای لجستیک رگرسیون، درخت تصمیم و ماشین بردار پشتیبان به عنوان مدلهای مختلف برای رایگیری استفاده شدهاند. سپس با استفاده از تابع fit، مدلها آموزش داده شده و با استفاده از تابع predict، پیشبینیهای نهایی بر روی دادههای تست انجام میشود. با توجه به نیاز و مسئله مورد نظر، میتوانید استراتژیهای دیگری را نیز برای یادگیری ترکیبی پیادهسازی کنید.
نحوه پیاده سازی یادگیری ترکیبی در پایتون
در قطعه کد زیر برای پیادهسازی یادگیری ترکیبی در پایتون از کتابخانه scikit-learn استفاده میکنیم. این کتابخانه دارای کلاسهای مناسبی برای رایگیری و بوتاستراپینگ است. در زیر، نمونه کدهایی برای پیادهسازی رایگیری و بوتاستراپینگ در پایتون با استفاده از scikit-learn آورده شده است:
1. رایگیری (Voting):
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# بارگیری دادههای آموزش و آزمایش
data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=42)
# تعریف مدلهای مختلف
model1 = LogisticRegression()
model2 = DecisionTreeClassifier()
model3 = SVC()
# تعریف رایگیری
voting_model = VotingClassifier(estimators=[('lr', model1), ('dt', model2), ('svm', model3)], voting='hard')
# آموزش مدلها
voting_model.fit(X_train, y_train)
# پیشبینی
predictions = voting_model.predict(X_test)
# محاسبه دقت
accuracy = accuracy_score(y_test, predictions)
print("Accuracy:", accuracy)
در این مثال، از مجموعه داده Iris استفاده شده است. سپس مدلهای لجستیک رگرسیون، درخت تصمیم و ماشین بردار پشتیبان به عنوان مدلهای مختلف برای رایگیری تعریف شدهاند. سپس با استفاده از تابع fit، مدلها آموزش داده شده و با استفاده از تابع predict، پیشبینیهای نهایی بر روی دادههای آزمایش انجام میشود. در نهایت، دقت پیشبینیها با استفاده از تابع accuracy_score محاسبه و چاپ میشود.
2. بوتاستراپینگ (Bagging):
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# بارگیری دادههای آموزش و آزمایش
data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=42)
# تعریف مدل اصلی
base_model = DecisionTreeClassifier()
# تعریف بوتاستراپینگ
bagging_model = BaggingClassifier(base_estimator=base_model, n_estimators=10)
# آموزش مدل
bagging_model.fit(X_train, y_train)
# پیشبینی
predictions = bagging_model.predict(X_test)
# محاسبه دقت
accuracy = accuracy_score(y_test, predictions)
print("Accuracy:", accuracy)
در این مثال، از مجموعه داده Iris استفاده شده است. یک مدل درخت تصمیم به عنوان مدل اصلی تعریف شده است. سپس با استفاده از دستور BaggingClassifier و با تعیین base_estimator به مدل اصلی و n_estimators به تعداد مدلهای بوتاستراپینگ، یک مدل بوتاستراپینگ ایجاد میشود. سپس با استفاده از تابع fit، مدل آموزش داده شده و با استفاده از تابع predict، پیشبینیهای نهایی بر روی دادههای آزمایش انجام میشود. در نهایت، دقت پیشبینیها با استفاده از تابع accuracy_score محاسبه و چاپ میشود. اگر میخواهید از رگرسیون ترکیبی استفاده کنید، میتوانید از کلاس VotingRegressor بجای VotingClassifier استفاده کنید و مدلهای رگرسیونی را به عنوان مدلهای مختلف اضافه کنید. با استفاده از این مثالها، میتوانید یادگیری ترکیبی را در پایتون پیادهسازی کنید و با تغییر پارامترها و انواع مدلها، آن را به نیازهای خود وفق دهید.
اجازه دهید برای آنکه قطعه کد بالا عملکرد بهتری داشته باشد، آن را گسترش دهیم. ما میتوانید از تکنیکهای مختلفی مانند انتخاب ویژگیها، تقویت نمونهها یا تنظیم پارامترها استفاده کنیم. اکنون قطعه کد بالا را شکل زیر گسترش میدهیم.
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.metrics import accuracy_score
# بارگیری دادههای آموزش و آزمایش
data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=42)
# تبدیل ویژگیها
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# انتخاب ویژگیهای مهم
selector = SelectKBest(score_func=f_classif, k=2)
X_train_selected = selector.fit_transform(X_train_scaled, y_train)
X_test_selected = selector.transform(X_test_scaled)
# تعریف مدلهای مختلف
model1 = LogisticRegression()
model2 = DecisionTreeClassifier()
model3 = SVC()
# تعریف رایگیری
voting_model = VotingClassifier(estimators=[('lr', model1), ('dt', model2), ('svm', model3)], voting='hard')
# پیادهسازی لولهای (Pipeline)
pipeline = Pipeline([
('scaler', scaler),
('selector', selector),
('voting', voting_model)
])
# تنظیم پارامترهای رایگیری
param_grid = {
'voting__lr__C': [0.1, 1, 10],
'voting__dt__max_depth': [None, 5, 10],
'voting__svm__C': [0.1, 1, 10],
'voting__svm__gamma': [0.1, 1, 10]
}
# انتخاب بهترین پارامترها با استفاده از GridSearchCV
grid_search = GridSearchCV(pipeline, param_grid=param_grid, cv=5)
grid_search.fit(X_train, y_train)
# پیشبینی
predictions = grid_search.predict(X_test)
# محاسبه دقت
accuracy = accuracy_score(y_test, predictions)
print("Accuracy:", accuracy)
print("Best Parameters:", grid_search.best_params_)
در این مثال، مراحل بیشتری برای پیادهسازی یادگیری ترکیبی اضافه شده است. اولین مورد تبدیل ویژگیها است که از StandardScaler برای تبدیل ویژگیها با استفاده از مقیاسبندی استفاده شده است. مورد بعدی انتخاب ویژگیهای مهم است که از SelectKBest برای انتخاب k ویژگی مهم بر اساس آمارها استفاده شده است. مورد بعدی پیادهسازی خط لوله (Pipeline) است که با استفاده از Pipeline، مراحل پیشپردازش و مدل رایگیری در یک جریان متوالی قرار گرفتهاند. در ادامه تنظیم پارامترها انجام میشود که با استفاده از GridSearchCV، پارامترهای بهتر برای مدل رایگیری انتخاب میشوند.
این مثال بر روی مجموعه داده Iris اجرا میشود. شما میتوانید مجموعه دادهها و مدلها را با دادههای ورودی و مدلهای مورد نظر خود جایگزین کنید. همچنین میتوانید تکنیکهای دیگری مانند تقویت نمونهها (oversampling/undersampling) یا استفاده از توابع کرنل (kernel functions) را به کد اضافه کنید، بسته به مسئله خاص خود.
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟