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
localizeflow[bot] 99262dd803
chore(i18n): sync translations with latest source changes (chunk 1/1, 21 changes)
2 months ago
..
solution chore(i18n): sync translations with latest source changes (chunk 1/1, 21 changes) 2 months ago
README.md chore(i18n): sync translations with latest source changes (chunk 1/1, 21 changes) 2 months ago
assignment.md chore(i18n): sync translations with latest source changes (chunk 1/2, 610 changes) 3 months ago
notebook.ipynb chore(i18n): sync translations with latest source changes (chunk 1/1, 21 changes) 2 months ago

README.md

طبقه‌بندی آشپزی ۲

در این درس دوم طبقه‌بندی، شما راه‌های بیشتری برای طبقه‌بندی داده‌های عددی کاوش خواهید کرد. همچنین درباره عواقب انتخاب یک طبقه‌بند نسبت به دیگری خواهید آموخت.

آزمون قبل از درس

پیش‌نیاز

فرض می‌کنیم که درس‌های قبلی را به پایان رسانده‌اید و یک مجموعه‌داده تمیز شده به نام cleaned_cuisines.csv در پوشه data در ریشه این فولدر ۴ درسی دارید.

آماده‌سازی

ما فایل notebook.ipynb شما را با مجموعه‌داده تمیز شده بارگذاری کرده‌ایم و آن را به DataFrame های X و y تقسیم کرده‌ایم که آماده فرآیند ساخت مدل هستند.

نقشه طبقه‌بندی

قبلاً درباره گزینه‌های مختلفی که هنگام طبقه‌بندی داده‌ها با استفاده از چیت شیت مایکروسافت دارید، یاد گرفتید. Scikit-learn چیت‌شیتی مشابه، اما دقیق‌تر ارائه می‌دهد که می‌تواند به شما کمک کند برآوردگرهای خود (اصطلاحی دیگر برای طبقه‌بندها) را بیشتر محدود کنید:

نقشه ML از Scikit-learn

نکته: این نقشه را به صورت آنلاین ببینید و در مسیرها کلیک کنید تا مستندات را بخوانید.

برنامه

این نقشه زمانی بسیار مفید است که تسلط خوبی روی داده‌های خود داشته باشید، زیرا می‌توانید در مسیرهای آن قدم بزنید تا به تصمیم برسید:

  • ما بیش از ۵۰ نمونه داریم
  • می‌خواهیم یک دسته‌بندی را پیش‌بینی کنیم
  • داده‌ها برچسب‌خورده‌اند
  • کمتر از ۱۰۰ هزار نمونه داریم
  • می‌توانیم Linear SVC را انتخاب کنیم
  • اگر این کار نکند، چون داده‌های عددی داریم
    • می‌توانیم یک KNeighbors Classifier را امتحان کنیم
      • اگر آن هم خوب نبود، امتحان کنید SVC و Ensemble Classifiers

این مسیر بسیار مفیدی است که باید دنبال شود.

تمرین - تقسیم داده‌ها

با دنبال کردن این مسیر، باید با وارد کردن برخی کتابخانه‌ها شروع کنیم.

  1. کتابخانه‌های لازم را وارد کنید:

    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. داده‌های آموزش و تست خود را تقسیم کنید:

    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

با ایجاد آرایه‌ای از طبقه‌بندها شروع کنید. به تدریج به این آرایه اضافه خواهید کرد همانطور که آزمایش می‌کنیم.

  1. با یک Linear SVC شروع کنید:

    C = 10
    # ایجاد طبقه‌بندهای مختلف.
    classifiers = {
        'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0)
    }
    
  2. مدل خود را با استفاده از 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 را امتحان کنید.

  1. یک خط به آرایه طبقه‌بندهای خود اضافه کنید (بعد از عنصر 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 را امتحان کنیم.

  1. بعد از عنصر 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 ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است حاوی اشتباهات یا نادرستی‌هایی باشند. سند اصلی به زبان بومی خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده شود. ما مسئول هیچ‌گونه سوءتفاهم یا برداشت نادرستی که ناشی از استفاده از این ترجمه باشد، نمی‌باشیم.