|
|
2 months ago | |
|---|---|---|
| .. | ||
| solution | 2 months ago | |
| README.md | 2 months ago | |
| assignment.md | 3 months ago | |
| notebook.ipynb | 2 months ago | |
README.md
طبقهبندی آشپزی ۲
در این درس دوم طبقهبندی، شما راههای بیشتری برای طبقهبندی دادههای عددی کاوش خواهید کرد. همچنین درباره عواقب انتخاب یک طبقهبند نسبت به دیگری خواهید آموخت.
آزمون قبل از درس
پیشنیاز
فرض میکنیم که درسهای قبلی را به پایان رساندهاید و یک مجموعهداده تمیز شده به نام cleaned_cuisines.csv در پوشه data در ریشه این فولدر ۴ درسی دارید.
آمادهسازی
ما فایل notebook.ipynb شما را با مجموعهداده تمیز شده بارگذاری کردهایم و آن را به DataFrame های X و y تقسیم کردهایم که آماده فرآیند ساخت مدل هستند.
نقشه طبقهبندی
قبلاً درباره گزینههای مختلفی که هنگام طبقهبندی دادهها با استفاده از چیت شیت مایکروسافت دارید، یاد گرفتید. Scikit-learn چیتشیتی مشابه، اما دقیقتر ارائه میدهد که میتواند به شما کمک کند برآوردگرهای خود (اصطلاحی دیگر برای طبقهبندها) را بیشتر محدود کنید:
نکته: این نقشه را به صورت آنلاین ببینید و در مسیرها کلیک کنید تا مستندات را بخوانید.
برنامه
این نقشه زمانی بسیار مفید است که تسلط خوبی روی دادههای خود داشته باشید، زیرا میتوانید در مسیرهای آن قدم بزنید تا به تصمیم برسید:
- ما بیش از ۵۰ نمونه داریم
- میخواهیم یک دستهبندی را پیشبینی کنیم
- دادهها برچسبخوردهاند
- کمتر از ۱۰۰ هزار نمونه داریم
- ✨ میتوانیم Linear SVC را انتخاب کنیم
- اگر این کار نکند، چون دادههای عددی داریم
- میتوانیم یک ✨ KNeighbors Classifier را امتحان کنیم
- اگر آن هم خوب نبود، امتحان کنید ✨ SVC و ✨ Ensemble Classifiers
- میتوانیم یک ✨ KNeighbors Classifier را امتحان کنیم
این مسیر بسیار مفیدی است که باید دنبال شود.
تمرین - تقسیم دادهها
با دنبال کردن این مسیر، باید با وارد کردن برخی کتابخانهها شروع کنیم.
-
کتابخانههای لازم را وارد کنید:
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 -
دادههای آموزش و تست خود را تقسیم کنید:
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' به «تنظیم» اشاره دارد که تأثیر پارامترها را کنترل میکند. هسته میتواند از چندین مورد باشد؛ در اینجا آن را روی 'linear' قرار دادیم تا اطمینان حاصل شود از SVC خطی استفاده میکنیم. احتمال پیشفرض 'false' است؛ در اینجا روی 'true' تنظیم شده است تا تخمینهای احتمال جمعآوری شود. حالت تصادفی را روی '۰' تنظیم کردیم تا دادهها را برای به دست آوردن احتمالات جابهجا کند.
تمرین - اعمال Linear SVC
با ایجاد آرایهای از طبقهبندها شروع کنید. به تدریج به این آرایه اضافه خواهید کرد همانطور که آزمایش میکنیم.
-
با یک Linear SVC شروع کنید:
C = 10 # ایجاد طبقهبندهای مختلف. classifiers = { 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) } -
مدل خود را با استفاده از Linear SVC آموزش دهید و گزارش چاپ کنید:
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))نتیجه نسبتاً خوب است:
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 را امتحان کنید.
-
یک خط به آرایه طبقهبندهای خود اضافه کنید (بعد از عنصر Linear SVC یک ویرگول اضافه کنید):
'KNN classifier': KNeighborsClassifier(C),نتیجه کمی بدتر است:
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 بیشتر بدانید
طبقهبند Support Vector
طبقهبندهای بردار پشتیبان بخشی از خانواده ماشین بردار پشتیبان (SVM) هستند که برای وظایف طبقهبندی و رگرسیون استفاده میشوند. SVMها "نمونههای آموزش را به نقاطی در فضا نگاشت میدهند" تا فاصله بین دو دسته را به حداکثر برسانند. دادههای بعدی در این فضا نگاشت میشود تا دسته آنها پیشبینی شود.
تمرین - اعمال طبقهبند Support Vector
بیایید برای دقت کمی بهتر، طبقهبند Support Vector را امتحان کنیم.
-
بعد از عنصر K-Neighbors یک ویرگول اضافه کنید، سپس این خط را اضافه کنید:
'SVC': SVC(),نتیجه خیلی خوب است!
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✅ درباره راهحلهای بردار پشتیبان بیشتر بدانید
طبقهبندهای Ensemble
بیایید مسیر را تا انتها دنبال کنیم، گرچه آزمایش قبلی بسیار خوب بود. بیایید برخی 'طبقهبندهای Ensemble' را امتحان کنیم، به خصوص Random Forest و AdaBoost:
'RFST': RandomForestClassifier(n_estimators=100),
'ADA': AdaBoostClassifier(n_estimators=100)
نتیجه بسیار خوب است، به ویژه برای Random Forest:
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 بیشتر بخوانید
این روش یادگیری ماشین "پیشبینی چندین برآوردگر پایه را ترکیب میکند" تا کیفیت مدل را بهبود بخشد. در مثال ما، از درختان تصادفی و AdaBoost استفاده کردیم.
-
Random Forest، یک روش میانگینگیری، یک «جنگل» از «درخت تصمیم» ایجاد میکند که با تصادفی بودن ترکیب شده تا از بیشبرازش جلوگیری کند. پارامتر n_estimators روی تعداد درختان تنظیم شده است.
-
AdaBoost یک طبقهبند را روی مجموعه داده برازش میدهد و سپس نسخههایی از همان طبقهبند را روی همان مجموعه داده برازش میدهد. تمرکز آن روی وزن نمونههای نادرست طبقهبندی شده است و برازش را برای طبقهبند بعدی تنظیم میکند تا خطا را اصلاح کند.
🚀چالش
هر یک از این تکنیکها دارای تعداد زیادی پارامتر هستند که میتوانید تنظیم کنید. پارامترهای پیشفرض هر کدام را تحقیق کنید و فکر کنید تنظیم این پارامترها برای کیفیت مدل چه معنایی دارد.
آزمون بعد از درس
بازبینی و مطالعه خودخوان
در این درسها اصطلاحات زیادی وجود دارد، پس یک دقیقه وقت بگذارید و این فهرست اصطلاحات مفید را مرور کنید!
تمرین
سلب مسئولیت: این سند با استفاده از سرویس ترجمه مبتنی بر هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است حاوی اشتباهات یا نادرستیهایی باشند. سند اصلی به زبان بومی خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، توصیه میشود از ترجمه حرفهای انسانی استفاده شود. ما مسئول هیچگونه سوءتفاهم یا برداشت نادرستی که ناشی از استفاده از این ترجمه باشد، نمیباشیم.
