14 KiB
طبقهبندی غذاها ۲
در این درس دوم از طبقهبندی، شما روشهای بیشتری برای طبقهبندی دادههای عددی بررسی خواهید کرد. همچنین درباره پیامدهای انتخاب یک طبقهبند نسبت به دیگری یاد خواهید گرفت.
پیشزمینه آزمون
پیشنیاز
فرض میکنیم که درسهای قبلی را کامل کردهاید و یک مجموعه داده تمیز شده در پوشه data
دارید که به نام cleaned_cuisines.csv در ریشه این پوشه چهار درسی ذخیره شده است.
آمادهسازی
ما فایل notebook.ipynb شما را با مجموعه داده تمیز شده بارگذاری کردهایم و آن را به دو دیتافریم 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_feature_df, cuisines_label_df, test_size=0.3)
طبقهبند Linear SVC
خوشهبندی پشتیبان-برداری (SVC) یکی از اعضای خانواده تکنیکهای یادگیری ماشین پشتیبان-برداری است (در مورد اینها بیشتر در زیر یاد بگیرید). در این روش، میتوانید یک 'kernel' انتخاب کنید تا نحوه خوشهبندی برچسبها را تعیین کنید. پارامتر 'C' به 'تنظیمسازی' اشاره دارد که تأثیر پارامترها را تنظیم میکند. کرنل میتواند یکی از چندین باشد؛ در اینجا آن را به 'linear' تنظیم میکنیم تا از Linear SVC استفاده کنیم. مقدار پیشفرض احتمال 'false' است؛ در اینجا آن را به 'true' تنظیم میکنیم تا تخمینهای احتمالی جمعآوری شود. حالت تصادفی را به '0' تنظیم میکنیم تا دادهها برای دریافت احتمالات مخلوط شوند.
تمرین - اعمال Linear SVC
با ایجاد یک آرایه از طبقهبندها شروع کنید. شما به تدریج به این آرایه اضافه خواهید کرد.
-
با یک Linear SVC شروع کنید:
C = 10 # Create different classifiers. 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 یاد بگیرید
طبقهبند پشتیبان-برداری
طبقهبندهای پشتیبان-برداری بخشی از خانواده ماشینهای پشتیبان-برداری در روشهای یادگیری ماشین هستند که برای وظایف طبقهبندی و رگرسیون استفاده میشوند. SVMها "نمونههای آموزشی را به نقاطی در فضا نگاشت میکنند" تا فاصله بین دو دسته را به حداکثر برسانند. دادههای بعدی به این فضا نگاشت میشوند تا دسته آنها پیشبینی شود.
تمرین - اعمال طبقهبند پشتیبان-برداری
بیایید برای دقت بهتر، طبقهبند پشتیبان-برداری را امتحان کنیم.
-
بعد از آیتم 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 یاد بگیرید
این روش یادگیری ماشین "پیشبینیهای چندین تخمینگر پایه را ترکیب میکند" تا کیفیت مدل را بهبود بخشد. در مثال ما، از Random Trees و AdaBoost استفاده کردیم.
-
Random Forest، یک روش میانگینگیری، یک 'جنگل' از 'درختان تصمیمگیری' ایجاد میکند که با تصادفیسازی تزریق شدهاند تا از بیشبرازش جلوگیری شود. پارامتر n_estimators به تعداد درختان تنظیم شده است.
-
AdaBoost یک طبقهبند را به مجموعه داده تطبیق میدهد و سپس نسخههایی از آن طبقهبند را به همان مجموعه داده تطبیق میدهد. این روش بر وزن آیتمهای اشتباه طبقهبندی شده تمرکز میکند و تطبیق را برای طبقهبند بعدی تنظیم میکند تا اصلاح شود.
🚀چالش
هر یک از این تکنیکها تعداد زیادی پارامتر دارند که میتوانید تنظیم کنید. درباره پارامترهای پیشفرض هر کدام تحقیق کنید و فکر کنید که تنظیم این پارامترها چه تأثیری بر کیفیت مدل خواهد داشت.
آزمون پس از درس
مرور و مطالعه شخصی
در این درسها اصطلاحات زیادی وجود دارد، بنابراین چند دقیقه وقت بگذارید تا این فهرست از اصطلاحات مفید را مرور کنید!
تکلیف
سلب مسئولیت:
این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما تلاش میکنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه میشود از ترجمه حرفهای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهمها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.