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
leestott 3cd46f83cf
🌐 Update translations via Co-op Translator
6 months ago
..
solution 🌐 Update translations via Co-op Translator 6 months ago
README.md 🌐 Update translations via Co-op Translator 6 months ago
assignment.md 🌐 Update translations via Co-op Translator 6 months ago
notebook.ipynb 🌐 Update translations via Co-op Translator 6 months ago

README.md

دسته‌بندی غذاها ۲

در این درس دوم از دسته‌بندی، شما روش‌های بیشتری برای دسته‌بندی داده‌های عددی بررسی خواهید کرد. همچنین درباره پیامدهای انتخاب یک دسته‌بند نسبت به دیگری یاد خواهید گرفت.

پیش‌آزمون

پیش‌نیاز

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

آماده‌سازی

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

نقشه دسته‌بندی

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

نقشه یادگیری ماشین از 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_feature_df, cuisines_label_df, test_size=0.3)
    

دسته‌بند Linear SVC

خوشه‌بندی پشتیبان-برداری (SVC) یکی از اعضای خانواده تکنیک‌های یادگیری ماشین پشتیبان-برداری است (در مورد این‌ها بیشتر در زیر بیاموزید). در این روش، می‌توانید یک 'kernel' انتخاب کنید تا تصمیم بگیرید چگونه برچسب‌ها را خوشه‌بندی کنید. پارامتر 'C' به 'تنظیم‌سازی' اشاره دارد که تأثیر پارامترها را تنظیم می‌کند. کرنل می‌تواند یکی از چندین باشد؛ در اینجا آن را به 'linear' تنظیم می‌کنیم تا از Linear SVC استفاده کنیم. مقدار پیش‌فرض احتمال 'false' است؛ در اینجا آن را به 'true' تنظیم می‌کنیم تا تخمین‌های احتمالی جمع‌آوری کنیم. حالت تصادفی را به '0' تنظیم می‌کنیم تا داده‌ها را برای دریافت احتمالات مخلوط کنیم.

تمرین - اعمال یک Linear SVC

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

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

    C = 10
    # Create different classifiers.
    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ها "نمونه‌های آموزشی را به نقاطی در فضا نگاشت می‌کنند" تا فاصله بین دو دسته را به حداکثر برسانند. داده‌های بعدی به این فضا نگاشت می‌شوند تا دسته آن‌ها پیش‌بینی شود.

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