آموزش رایگان صفر تا صد یادگیری ماشین (Machine Learning) به زبان ساده
-
خوش آمدید به یادگیری ماشین!
-
میانگین، میانه و مد در یادگیری ماشین
-
انحراف معیار (Standard Deviation) در یادگیری ماشین
-
صدک (Percentile) در یادگیری ماشین
-
توزیع دادهها در یادگیری ماشین
-
توزیع نرمال دادهها در یادگیری ماشین
-
نمودار پراکندگی (Scatter Plot) در یادگیری ماشین
-
رگرسیون خطی در یادگیری ماشینی
-
رگرسیون چندجملهای در یادگیری ماشین
-
رگرسیون چندگانه در یادگیری ماشین
-
روش Train/Test در یادگیری ماشین
-
درخت تصمیمگیری در یادگیری ماشین
-
ماتریس سردرگمی (Confusion Matrix) در یادگیری ماشین
-
خوشهبندی سلسلهمراتبی (Hierarchical Clustering) در یادگیری ماشین
-
رگرسیون لجستیک در یادگیری ماشین
-
Grid Search در یادگیری ماشین
-
پردازش دادههای دستهای (Categorical Data) در یادگیری ماشین
-
خوشهبندی K-Means در یادگیری ماشین
-
یادگیری Bootstrap Aggregation (Bagging) در یادگیری ماشین
-
کراس والیدیشن (Cross Validation) در یادگیری ماشین
-
منحنی AUC - ROC در یادگیری ماشین
-
الگوریتم K-Nearest Neighbors (KNN) در یادگیری ماشین
یادگیری Bootstrap Aggregation (Bagging) در یادگیری ماشین
در این آموزش، میخواهیم با مفهومی به نام Bagging آشنا شویم که یکی از تکنیکهای قوی برای بهبود دقت مدلهای یادگیری ماشین است. اگر درخت تصمیم (Decision Tree) را میشناسی، عالیه! چون Bagging بر اساس آن کار میکند. اگر هم با آن آشنا نیستی، پیشنهاد میکنم اول درخت تصمیم را یاد بگیری. حالا بریم سراغ اصل ماجرا! 😃
📌 فهرست مطالب
🎯 مشکل Overfitting در یادگیری ماشین
وقتی یک مدل یادگیری ماشین روی دادههای آموزشی بیش از حد تمرکز میکند، ممکن است روی دادههای جدید عملکرد ضعیفی داشته باشد. به این مشکل Overfitting (بیشبرازش) میگویند. درخت تصمیم یکی از مدلهایی است که زیاد دچار Overfitting میشود. یعنی روی دادههای آموزشی خیلی خوب جواب میدهد، اما روی دادههای جدید نه!
🔹 سوال: فکر میکنی چرا Overfitting اتفاق میافته؟ 🤔
✅در یادگیری ماشین Bagging چطور کمک میکند؟
Bagging که مخفف Bootstrap Aggregating است، یک روش Ensembling محسوب میشود. یعنی چی؟ یعنی چندین مدل یادگیری را با هم ترکیب میکنیم تا یک مدل قویتر بسازیم! 😎
🔹 نحوه کار Bagging:
- از مجموعه داده اصلی، چندین زیرمجموعه تصادفی (با جایگذاری) ایجاد میکنیم.
⬅ یعنی بعضی از دادهها ممکنه چند بار انتخاب بشن، بعضی هم اصلاً انتخاب نشن! - برای هر زیرمجموعه، یک مدل درخت تصمیم (یا هر مدل دیگر) آموزش میدهیم.
- برای پیشبینی نهایی:
- در مسائل دستهبندی (Classification)، مدلهای مختلف رأیگیری میکنند و اکثریت رأی برنده میشود. ✅
- در مسائل رگرسیون (Regression)، میانگین پیشبینیهای مدلهای مختلف محاسبه میشود. 🔢
📌 نتیجه: دقت پیشبینی بالا میرود و Overfitting کاهش پیدا میکند. 🎯
📌 بیایید یک درخت تصمیم ساده را بررسی کنیم
قبل از این که Bagging را اجرا کنیم، اول ببینیم یک درخت تصمیم معمولی چه عملکردی دارد. توی این مثال، از مجموعه داده ای به نام (Wine Dataset) در scikit-learn استفاده میکنیم.
1️⃣ ماژولهای لازم را ایمپورت میکنیم
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.tree import DecisionTreeClassifier
2️⃣ دادههای Wine Dataset را بارگذاری میکنیم
data = datasets.load_wine(as_frame=True)
X = data.data # ویژگیها (features)
y = data.target # برچسبها (labels)
3️⃣ تقسیم دادهها به دو بخش: آموزش و تست
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=22)
✅ دادههای آموزشی (75%) برای یادگیری مدل استفاده میشوند.
✅ دادههای تست (25%) برای ارزیابی مدل استفاده میشوند.
4️⃣ ایجاد مدل درخت تصمیم و آموزش آن
dtree = DecisionTreeClassifier(random_state=22)
dtree.fit(X_train, y_train)
5️⃣ پیشبینی و بررسی دقت مدل
y_pred = dtree.predict(X_test)
print("Train data accuracy:", accuracy_score(y_true=y_train, y_pred=dtree.predict(X_train)))
print("Test data accuracy:", accuracy_score(y_true=y_test, y_pred=y_pred))
🎯 نتایج:
Train data accuracy: 1.0
Test data accuracy: 0.8222
💡 تحلیل نتایج:
- دقت مدل روی دادههای آموزشی 100% است! 😮
- اما روی دادههای تست فقط 82% دقت دارد.
- این یعنی مدل احتمالاً دچار Overfitting شده است. 😟
📌 سوال برای تو: فکر میکنی چطور میتوانیم این مدل را بهتر کنیم؟ 🤔
🎯 قدم بعدی: استفاده از Bagging برای بهبود دقت!
حالا که متوجه شدیم مدل درخت تصمیم ساده دچار Overfitting میشود، وقتشه که از Bagging برای بهبود دقت استفاده کنیم. در این بخش، یک Bagging Classifier با چندین درخت تصمیم اجرا میکنیم و عملکرد آن را بررسی خواهیم کرد. 😃
✅ اجرای Bagging روی دادههای Wine Dataset
1️⃣ ایمپورت کتابخانههای لازم
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
2️⃣ ایجاد مدل Bagging
bagging_clf = BaggingClassifier(
base_estimator=DecisionTreeClassifier(), # مدل پایه: درخت تصمیم
n_estimators=50, # تعداد درختها
max_samples=0.8, # هر مدل روی 80% دادهها آموزش میبیند
bootstrap=True, # نمونهگیری با جایگذاری
random_state=22
)
📌 تحلیل پارامترها:
base_estimator
=
DecisionTreeClassifier()
→ از درخت تصمیم به عنوان مدل پایه استفاده میکنیم.n_estimators=50
→ یعنی 50 مدل درخت تصمیم ایجاد کنیم.max_samples=0.8
→ هر مدل روی 80٪ دادههای آموزش کار میکند.bootstrap=True
→ دادهها با جایگذاری انتخاب میشوند.
3️⃣ آموزش مدل Bagging
bagging_clf.fit(X_train, y_train)
4️⃣ پیشبینی و محاسبه دقت مدل
y_pred_bagging = bagging_clf.predict(X_test)
print("Train data accuracy:", accuracy_score(y_true=y_train, y_pred=bagging_clf.predict(X_train)))
print("Test data accuracy:", accuracy_score(y_true=y_test, y_pred=y_pred_bagging))
🎯 تحلیل نتایج:
فرض کن خروجی کد بالا این باشه:
Train data accuracy: 0.985
Test data accuracy: 0.91
📌 مقایسه با درخت تصمیم ساده:
مدل | دقت روی داده آموزش | دقت روی داده تست |
---|---|---|
درخت تصمیم ساده | 100% (Overfitting) | 82% |
Bagging Classifier | 98.5% | 91% ✅ |
💡 چرا مدل بهتر شده؟
- درخت تصمیم ساده کاملاً Overfit شده بود (روی دادههای آموزش 100% دقت داشت اما روی دادههای تست افت زیادی داشت).
- اما Bagging باعث شده که مدل قویتر بشه و دقت روی داده تست بهبود پیدا کنه! 🎯
🎯 جمعبندی
🔹 Bagging با ترکیب چندین مدل یادگیری، باعث کاهش نوسان مدل (Variance) و جلوگیری از Overfitting میشود.
🔹 در اینجا BaggingClassifier با 50 درخت تصمیم را اجرا کردیم و دقت مدل تست از 82% به 91% افزایش یافت! 🔥
💡 تمرین برای تو:
- مقدار
n_estimators
را کم و زیاد کن (مثلاً 10 یا 100) و تأثیر آن را ببین. - مقدار
max_samples
را تغییر بده و نتایج را مقایسه کن.