Scikit-learn documentation on cross-validation
اعتبارسنجی متقابل در Scikit-learn: راهنمای جامع برای مبتدیان
مقدمه
اعتبارسنجی متقابل (Cross-Validation) یک تکنیک ضروری در یادگیری ماشین است که برای ارزیابی عملکرد مدلهای یادگیری ماشین استفاده میشود. هدف اصلی، تخمین توانایی مدل در تعمیم به دادههای جدید و ناشناخته است. به عبارت دیگر، میخواهیم بدانیم مدل چقدر خوب بر روی دادههایی که در فرآیند آموزش شرکت نداشتند، عمل خواهد کرد. Scikit-learn، کتابخانه قدرتمند پایتون برای یادگیری ماشین، ابزارهای متعددی برای انجام اعتبارسنجی متقابل فراهم میکند. این مقاله به بررسی عمیق مستندات Scikit-learn در مورد اعتبارسنجی متقابل میپردازد و به شما کمک میکند تا این تکنیک را به طور موثر در پروژههای یادگیری ماشین خود به کار ببرید.
چرا اعتبارسنجی متقابل مهم است؟
در فرآیند آموزش یک مدل یادگیری ماشین، از یک مجموعه داده (Dataset) برای آموزش مدل استفاده میکنیم. پس از آموزش، باید عملکرد مدل را ارزیابی کنیم. یک روش ساده، تقسیم مجموعه داده به دو بخش، مجموعه آموزش (Training Set) و مجموعه آزمایش (Testing Set) است. با این حال، این روش ممکن است منجر به نتایج گمراهکننده شود، به خصوص اگر مجموعه داده کوچک باشد.
مشکل اینجاست که مجموعه آزمایش فقط یک نمونه از کل دادهها است. اگر مجموعه آزمایش به طور تصادفی انتخاب شود، ممکن است عملکرد مدل بر روی آن به طور قابل توجهی با عملکرد آن بر روی دادههای واقعی متفاوت باشد. این پدیده به عنوان بیشبرازش (Overfitting) شناخته میشود.
اعتبارسنجی متقابل این مشکل را با تقسیم مجموعه داده به چندین بخش (Fold) و آموزش و ارزیابی مدل بر روی ترکیبات مختلف این بخشها حل میکند. این کار به ما امکان میدهد تا تخمین دقیقتری از عملکرد مدل بر روی دادههای جدید داشته باشیم.
انواع روشهای اعتبارسنجی متقابل
Scikit-learn چندین روش اعتبارسنجی متقابل را پیادهسازی کرده است که در ادامه به بررسی آنها میپردازیم:
- **K-Fold Cross-Validation:** این روش رایجترین نوع اعتبارسنجی متقابل است. در این روش، مجموعه داده به K بخش مساوی تقسیم میشود. سپس، K بار تکرار میشود، هر بار یک بخش به عنوان مجموعه آزمایش و بقیه به عنوان مجموعه آموزش استفاده میشوند. در نهایت، میانگین عملکرد مدل بر روی همه K تکرار به عنوان تخمین نهایی عملکرد مدل در نظر گرفته میشود. K-Fold Cross-Validation به طور خاص برای دادههای با اندازه متوسط مناسب است.
- **Stratified K-Fold Cross-Validation:** این روش مشابه K-Fold است، اما با این تفاوت که اطمینان حاصل میکند که هر بخش دارای توزیع مشابهی از کلاسها باشد. این روش برای دادههای نامتعادل (Imbalanced Data) که در آن تعداد نمونهها در هر کلاس متفاوت است، بسیار مفید است. Stratified K-Fold Cross-Validation به حفظ نسبت کلاسها در هر Fold کمک میکند.
- **Leave-One-Out Cross-Validation (LOOCV):** در این روش، هر نمونه در مجموعه داده به عنوان مجموعه آزمایش و بقیه به عنوان مجموعه آموزش استفاده میشوند. این روش بسیار دقیق است، اما برای مجموعههای داده بزرگ بسیار زمانبر است. Leave-One-Out Cross-Validation برای دادههای کوچک و زمانی که دقت بسیار مهم است، مناسب است.
- **ShuffleSplit Cross-Validation:** این روش به طور تصادفی دادهها را به مجموعه آموزش و مجموعه آزمایش تقسیم میکند. این فرآیند چندین بار تکرار میشود و در هر تکرار، اندازه مجموعه آموزش و مجموعه آزمایش میتواند متفاوت باشد. ShuffleSplit Cross-Validation انعطافپذیری بیشتری نسبت به K-Fold ارائه میدهد.
- **Group K-Fold Cross-Validation:** این روش برای دادههایی که دارای گروهها هستند (به عنوان مثال، دادههای مربوط به بیماران مختلف) مناسب است. این روش اطمینان حاصل میکند که نمونههای مربوط به یک گروه در یک Fold باقی بمانند. Group K-Fold Cross-Validation برای جلوگیری از نشت اطلاعات بین گروهها استفاده میشود.
استفاده از `cross_val_score` در Scikit-learn
Scikit-learn تابع `cross_val_score` را برای انجام اعتبارسنجی متقابل فراهم میکند. این تابع به شما امکان میدهد تا به راحتی عملکرد یک مدل یادگیری ماشین را با استفاده از روشهای مختلف اعتبارسنجی متقابل ارزیابی کنید.
```python from sklearn.model_selection import cross_val_score from sklearn.linear_model import LogisticRegression from sklearn.datasets import load_iris
- بارگیری مجموعه داده Iris
iris = load_iris() X = iris.data y = iris.target
- ایجاد یک مدل Logistic Regression
model = LogisticRegression()
- انجام اعتبارسنجی متقابل با استفاده از K-Fold (به طور پیشفرض K=5)
scores = cross_val_score(model, X, y, cv=5)
- چاپ نتایج
print("Scores:", scores) print("Mean score:", scores.mean()) print("Standard deviation:", scores.std()) ```
در این مثال، ما از تابع `cross_val_score` برای انجام اعتبارسنجی متقابل با استفاده از K-Fold (با K=5) بر روی مجموعه داده Iris استفاده میکنیم. تابع `cross_val_score` لیستی از امتیازات (Scores) را برمیگرداند که نشاندهنده عملکرد مدل در هر Fold است. ما همچنین میانگین و انحراف معیار امتیازات را محاسبه میکنیم تا یک تخمین کلی از عملکرد مدل به دست آوریم.
استفاده از `cross_val_predict` در Scikit-learn
تابع `cross_val_predict` پیشبینیهای مدل را برای هر نمونه در مجموعه داده در طول فرآیند اعتبارسنجی متقابل برمیگرداند. این تابع میتواند برای ارزیابی دقیقتر عملکرد مدل و همچنین برای ایجاد ماتریس درهمریختگی (Confusion Matrix) استفاده شود.
```python from sklearn.model_selection import cross_val_predict from sklearn.linear_model import LogisticRegression from sklearn.datasets import load_iris from sklearn.metrics import confusion_matrix
- بارگیری مجموعه داده Iris
iris = load_iris() X = iris.data y = iris.target
- ایجاد یک مدل Logistic Regression
model = LogisticRegression()
- انجام اعتبارسنجی متقابل و دریافت پیشبینیها
y_pred = cross_val_predict(model, X, y, cv=5)
- ایجاد ماتریس درهمریختگی
cm = confusion_matrix(y, y_pred)
- چاپ ماتریس درهمریختگی
print("Confusion Matrix:\n", cm) ```
استفاده از `KFold` و `StratifiedKFold` به طور مستقیم
علاوه بر `cross_val_score` و `cross_val_predict`، میتوانید از کلاسهای `KFold` و `StratifiedKFold` به طور مستقیم برای ایجاد تقسیمبندیهای اعتبارسنجی متقابل استفاده کنید. این کار به شما امکان میدهد تا فرآیند اعتبارسنجی متقابل را به طور دقیقتری کنترل کنید.
```python from sklearn.model_selection import KFold, StratifiedKFold from sklearn.linear_model import LogisticRegression from sklearn.datasets import load_iris
- بارگیری مجموعه داده Iris
iris = load_iris() X = iris.data y = iris.target
- ایجاد یک مدل Logistic Regression
model = LogisticRegression()
- ایجاد یک شی KFold
kf = KFold(n_splits=5, shuffle=True, random_state=42)
- انجام اعتبارسنجی متقابل
for train_index, test_index in kf.split(X):
X_train, X_test = X[train_index], X[test_index] y_train, y_test = y[train_index], y[test_index]
# آموزش مدل model.fit(X_train, y_train)
# ارزیابی مدل score = model.score(X_test, y_test) print("Score:", score)
```
نکات مهم در استفاده از اعتبارسنجی متقابل
- **انتخاب K مناسب:** مقدار K در K-Fold باید به دقت انتخاب شود. مقادیر کوچک K ممکن است منجر به واریانس بالا شوند، در حالی که مقادیر بزرگ K ممکن است منجر به بایاس بالا شوند. معمولاً K=5 یا K=10 انتخابهای خوبی هستند.
- **Shuffle کردن دادهها:** قبل از انجام اعتبارسنجی متقابل، دادهها را به طور تصادفی shuffle کنید تا از ترتیب خاصی که ممکن است بر نتایج تأثیر بگذارد، جلوگیری کنید.
- **استفاده از Stratified K-Fold برای دادههای نامتعادل:** اگر مجموعه داده شما نامتعادل است، از Stratified K-Fold استفاده کنید تا اطمینان حاصل شود که هر Fold دارای توزیع مشابهی از کلاسها باشد.
- **توجه به زمان اجرا:** اعتبارسنجی متقابل میتواند زمانبر باشد، به خصوص برای مجموعههای داده بزرگ و مدلهای پیچیده. در صورت نیاز، از روشهای سریعتر مانند ShuffleSplit استفاده کنید.
- **استفاده از Random State:** برای اطمینان از تکرارپذیری نتایج، از `random_state` در کلاسهای اعتبارسنجی متقابل استفاده کنید.
تحلیل تکنیکال و حجم معاملات در ارتباط با اعتبارسنجی متقابل
اگر از اعتبارسنجی متقابل برای مدلسازی سریهای زمانی (مانند دادههای قیمت سهام) استفاده میکنید، باید به ترتیب زمانی دادهها توجه کنید. استفاده از K-Fold استاندارد میتواند منجر به نشت اطلاعات از آینده به گذشته شود. در این موارد، از روشهایی مانند **Time Series Split** استفاده کنید که به حفظ ترتیب زمانی دادهها کمک میکند.
همچنین، در تحلیل تکنیکال، میتوان از اعتبارسنجی متقابل برای ارزیابی استراتژیهای معاملاتی مختلف استفاده کرد. به عنوان مثال، میتوانید یک استراتژی معاملاتی را بر اساس اندیکاتورهای تکنیکال (مانند میانگین متحرک، RSI، MACD) ایجاد کنید و سپس با استفاده از اعتبارسنجی متقابل، عملکرد آن را در گذشته ارزیابی کنید.
در تحلیل حجم معاملات، اعتبارسنجی متقابل میتواند برای ارزیابی مدلهایی که حجم معاملات را پیشبینی میکنند، استفاده شود.
پیوندهای مرتبط
- یادگیری ماشین
- بیشبرازش (Overfitting)
- K-Fold Cross-Validation
- Stratified K-Fold Cross-Validation
- Leave-One-Out Cross-Validation
- ShuffleSplit Cross-Validation
- Group K-Fold Cross-Validation
- Scikit-learn
- Regression
- Classification
- Model Selection
- Hyperparameter Tuning
- Grid Search
- Randomized Search
- Time Series Analysis
- Technical Analysis
- Volume Analysis
- Moving Averages
- RSI (Relative Strength Index)
- MACD (Moving Average Convergence Divergence)
- Bollinger Bands
- Fibonacci Retracements
دلیل:
- **مختصر و واضح:** به طور مستقیم به کتابخانه Scikit-learn اشاره دارد.
- **مرتبط:** موضوع مقاله به طور کامل در مورد ابزارهای اعتبارسنجی متقابل در Scikit-learn است.
- **دقیق:** دستهبندی به درستی محتوای مقاله را منعکس میکند.
شروع معاملات الآن
ثبتنام در IQ Option (حداقل واریز $10) باز کردن حساب در Pocket Option (حداقل واریز $5)
به جامعه ما بپیوندید
در کانال تلگرام ما عضو شوید @strategybin و دسترسی پیدا کنید به: ✓ سیگنالهای معاملاتی روزانه ✓ تحلیلهای استراتژیک انحصاری ✓ هشدارهای مربوط به روند بازار ✓ مواد آموزشی برای مبتدیان