You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/fa/4-Classification/3-Classifiers-2/README.md

242 lines
14 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# طبقه‌بندی آشپزی ۲
در این درس دوم طبقه‌بندی، شما راه‌های بیشتری برای طبقه‌بندی داده‌های عددی کاوش خواهید کرد. همچنین درباره عواقب انتخاب یک طبقه‌بند نسبت به دیگری خواهید آموخت.
## [آزمون قبل از درس](https://ff-quizzes.netlify.app/en/ml/)
### پیش‌نیاز
فرض می‌کنیم که درس‌های قبلی را به پایان رسانده‌اید و یک مجموعه‌داده تمیز شده به نام _cleaned_cuisines.csv_ در پوشه `data` در ریشه این فولدر ۴ درسی دارید.
### آماده‌سازی
ما فایل _notebook.ipynb_ شما را با مجموعه‌داده تمیز شده بارگذاری کرده‌ایم و آن را به DataFrame های X و y تقسیم کرده‌ایم که آماده فرآیند ساخت مدل هستند.
## نقشه طبقه‌بندی
قبلاً درباره گزینه‌های مختلفی که هنگام طبقه‌بندی داده‌ها با استفاده از چیت شیت مایکروسافت دارید، یاد گرفتید. Scikit-learn چیت‌شیتی مشابه، اما دقیق‌تر ارائه می‌دهد که می‌تواند به شما کمک کند برآوردگرهای خود (اصطلاحی دیگر برای طبقه‌بندها) را بیشتر محدود کنید:
![نقشه ML از Scikit-learn](../../../../translated_images/fa/map.e963a6a51349425a.webp)
> نکته: [این نقشه را به صورت آنلاین ببینید](https://scikit-learn.org/stable/tutorial/machine_learning_map/) و در مسیرها کلیک کنید تا مستندات را بخوانید.
### برنامه
این نقشه زمانی بسیار مفید است که تسلط خوبی روی داده‌های خود داشته باشید، زیرا می‌توانید در مسیرهای آن قدم بزنید تا به تصمیم برسید:
- ما بیش از ۵۰ نمونه داریم
- می‌خواهیم یک دسته‌بندی را پیش‌بینی کنیم
- داده‌ها برچسب‌خورده‌اند
- کمتر از ۱۰۰ هزار نمونه داریم
- ✨ می‌توانیم Linear SVC را انتخاب کنیم
- اگر این کار نکند، چون داده‌های عددی داریم
- می‌توانیم یک ✨ KNeighbors Classifier را امتحان کنیم
- اگر آن هم خوب نبود، امتحان کنید ✨ SVC و ✨ Ensemble Classifiers
این مسیر بسیار مفیدی است که باید دنبال شود.
## تمرین - تقسیم داده‌ها
با دنبال کردن این مسیر، باید با وارد کردن برخی کتابخانه‌ها شروع کنیم.
1. کتابخانه‌های لازم را وارد کنید:
```python
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve
import numpy as np
```
2. داده‌های آموزش و تست خود را تقسیم کنید:
```python
X_train, X_test, y_train, y_test = train_test_split(cuisines_features_df, cuisines_label_df, test_size=0.3)
```
## طبقه‌بند Linear SVC
خوشه‌بندی پشتیبانی برداری (SVC) از خانواده ماشین‌های بردار پشتیبان است (برای اطلاعات بیشتر درباره اینها در ادامه بخوانید). در این روش، می‌توانید یک 'هسته' انتخاب کنید تا تصمیم بگیرد چگونه برچسب‌ها را خوشه‌بندی کند. پارامتر 'C' به «تنظیم» اشاره دارد که تأثیر پارامترها را کنترل می‌کند. هسته می‌تواند از [چندین](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC) مورد باشد؛ در اینجا آن را روی 'linear' قرار دادیم تا اطمینان حاصل شود از SVC خطی استفاده می‌کنیم. احتمال پیش‌فرض 'false' است؛ در اینجا روی 'true' تنظیم شده است تا تخمین‌های احتمال جمع‌آوری شود. حالت تصادفی را روی '۰' تنظیم کردیم تا داده‌ها را برای به دست آوردن احتمالات جابه‌جا کند.
### تمرین - اعمال Linear SVC
با ایجاد آرایه‌ای از طبقه‌بندها شروع کنید. به تدریج به این آرایه اضافه خواهید کرد همانطور که آزمایش می‌کنیم.
1. با یک Linear SVC شروع کنید:
```python
C = 10
# ایجاد طبقه‌بندهای مختلف.
classifiers = {
'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0)
}
```
2. مدل خود را با استفاده از Linear SVC آموزش دهید و گزارش چاپ کنید:
```python
n_classifiers = len(classifiers)
for index, (name, classifier) in enumerate(classifiers.items()):
classifier.fit(X_train, np.ravel(y_train))
y_pred = classifier.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100))
print(classification_report(y_test,y_pred))
```
نتیجه نسبتاً خوب است:
```output
Accuracy (train) for Linear SVC: 78.6%
precision recall f1-score support
chinese 0.71 0.67 0.69 242
indian 0.88 0.86 0.87 234
japanese 0.79 0.74 0.76 254
korean 0.85 0.81 0.83 242
thai 0.71 0.86 0.78 227
accuracy 0.79 1199
macro avg 0.79 0.79 0.79 1199
weighted avg 0.79 0.79 0.79 1199
```
## طبقه‌بند K-Neighbors
K-Neighbors بخشی از خانواده روش‌های یادگیری ماشین "همسایه‌ها" است که می‌تواند برای یادگیری نظارت شده و بدون نظارت استفاده شود. در این روش، تعداد نقاط از پیش تعریف شده‌ای ساخته می‌شود و داده‌ها اطراف این نقاط جمع می‌شوند تا برچسب‌های تعمیم‌یافته برای داده‌ها پیش‌بینی شود.
### تمرین - اعمال طبقه‌بند K-Neighbors
طبقه‌بند قبلی خوب بود و با داده‌ها خوب کار کرد، اما شاید بتوانیم دقت بهتری داشته باشیم. یک طبقه‌بند K-Neighbors را امتحان کنید.
1. یک خط به آرایه طبقه‌بندهای خود اضافه کنید (بعد از عنصر Linear SVC یک ویرگول اضافه کنید):
```python
'KNN classifier': KNeighborsClassifier(C),
```
نتیجه کمی بدتر است:
```output
Accuracy (train) for KNN classifier: 73.8%
precision recall f1-score support
chinese 0.64 0.67 0.66 242
indian 0.86 0.78 0.82 234
japanese 0.66 0.83 0.74 254
korean 0.94 0.58 0.72 242
thai 0.71 0.82 0.76 227
accuracy 0.74 1199
macro avg 0.76 0.74 0.74 1199
weighted avg 0.76 0.74 0.74 1199
```
✅ درباره [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) بیشتر بدانید
## طبقه‌بند Support Vector
طبقه‌بندهای بردار پشتیبان بخشی از خانواده ماشین بردار پشتیبان (SVM) هستند که برای وظایف طبقه‌بندی و رگرسیون استفاده می‌شوند. SVMها "نمونه‌های آموزش را به نقاطی در فضا نگاشت می‌دهند" تا فاصله بین دو دسته را به حداکثر برسانند. داده‌های بعدی در این فضا نگاشت می‌شود تا دسته آنها پیش‌بینی شود.
### تمرین - اعمال طبقه‌بند Support Vector
بیایید برای دقت کمی بهتر، طبقه‌بند Support Vector را امتحان کنیم.
1. بعد از عنصر K-Neighbors یک ویرگول اضافه کنید، سپس این خط را اضافه کنید:
```python
'SVC': SVC(),
```
نتیجه خیلی خوب است!
```output
Accuracy (train) for SVC: 83.2%
precision recall f1-score support
chinese 0.79 0.74 0.76 242
indian 0.88 0.90 0.89 234
japanese 0.87 0.81 0.84 254
korean 0.91 0.82 0.86 242
thai 0.74 0.90 0.81 227
accuracy 0.83 1199
macro avg 0.84 0.83 0.83 1199
weighted avg 0.84 0.83 0.83 1199
```
✅ درباره [راه‌حل‌های بردار پشتیبان](https://scikit-learn.org/stable/modules/svm.html#svm) بیشتر بدانید
## طبقه‌بندهای Ensemble
بیایید مسیر را تا انتها دنبال کنیم، گرچه آزمایش قبلی بسیار خوب بود. بیایید برخی 'طبقه‌بندهای Ensemble' را امتحان کنیم، به خصوص Random Forest و AdaBoost:
```python
'RFST': RandomForestClassifier(n_estimators=100),
'ADA': AdaBoostClassifier(n_estimators=100)
```
نتیجه بسیار خوب است، به ویژه برای Random Forest:
```output
Accuracy (train) for RFST: 84.5%
precision recall f1-score support
chinese 0.80 0.77 0.78 242
indian 0.89 0.92 0.90 234
japanese 0.86 0.84 0.85 254
korean 0.88 0.83 0.85 242
thai 0.80 0.87 0.83 227
accuracy 0.84 1199
macro avg 0.85 0.85 0.84 1199
weighted avg 0.85 0.84 0.84 1199
Accuracy (train) for ADA: 72.4%
precision recall f1-score support
chinese 0.64 0.49 0.56 242
indian 0.91 0.83 0.87 234
japanese 0.68 0.69 0.69 254
korean 0.73 0.79 0.76 242
thai 0.67 0.83 0.74 227
accuracy 0.72 1199
macro avg 0.73 0.73 0.72 1199
weighted avg 0.73 0.72 0.72 1199
```
✅ درباره [طبقه‌بندهای Ensemble](https://scikit-learn.org/stable/modules/ensemble.html) بیشتر بخوانید
این روش یادگیری ماشین "پیش‌بینی چندین برآوردگر پایه را ترکیب می‌کند" تا کیفیت مدل را بهبود بخشد. در مثال ما، از درختان تصادفی و AdaBoost استفاده کردیم.
- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest)، یک روش میانگین‌گیری، یک «جنگل» از «درخت تصمیم» ایجاد می‌کند که با تصادفی بودن ترکیب شده تا از بیش‌برازش جلوگیری کند. پارامتر n_estimators روی تعداد درختان تنظیم شده است.
- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) یک طبقه‌بند را روی مجموعه داده برازش می‌دهد و سپس نسخه‌هایی از همان طبقه‌بند را روی همان مجموعه داده برازش می‌دهد. تمرکز آن روی وزن نمونه‌های نادرست طبقه‌بندی شده است و برازش را برای طبقه‌بند بعدی تنظیم می‌کند تا خطا را اصلاح کند.
---
## 🚀چالش
هر یک از این تکنیک‌ها دارای تعداد زیادی پارامتر هستند که می‌توانید تنظیم کنید. پارامترهای پیش‌فرض هر کدام را تحقیق کنید و فکر کنید تنظیم این پارامترها برای کیفیت مدل چه معنایی دارد.
## [آزمون بعد از درس](https://ff-quizzes.netlify.app/en/ml/)
## بازبینی و مطالعه خودخوان
در این درس‌ها اصطلاحات زیادی وجود دارد، پس یک دقیقه وقت بگذارید و [این فهرست](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) اصطلاحات مفید را مرور کنید!
## تمرین
[بازی با پارامترها](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**سلب مسئولیت**:
این سند با استفاده از سرویس ترجمه مبتنی بر هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است حاوی اشتباهات یا نادرستی‌هایی باشند. سند اصلی به زبان بومی خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده شود. ما مسئول هیچ‌گونه سوءتفاهم یا برداشت نادرستی که ناشی از استفاده از این ترجمه باشد، نمی‌باشیم.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->