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/uk/4-Classification/3-Classifiers-2/README.md

15 KiB

Класифікатори кухонь 2

У цьому другому уроці класифікації ви дослідите більше способів класифікації числових даних. Ви також дізнаєтеся про наслідки вибору одного класифікатора над іншим.

Тест перед лекцією

Попередні знання

Ми припускаємо, що ви завершили попередні уроки та маєте очищений набір даних у папці data, який називається cleaned_cuisines.csv у кореневій папці цього 4-урочного блоку.

Підготовка

Ми завантажили ваш файл notebook.ipynb з очищеним набором даних і розділили його на X та y датафрейми, готові до процесу побудови моделі.

Карта класифікації

Раніше ви дізналися про різні варіанти класифікації даних, використовуючи шпаргалку Microsoft. Scikit-learn пропонує схожу, але більш детальну шпаргалку, яка може допомогти ще більше звузити вибір оцінювачів (інша назва класифікаторів):

Карта ML від Scikit-learn

Порада: відвідайте цю карту онлайн і натискайте на шляхи, щоб прочитати документацію.

План

Ця карта дуже корисна, коли ви добре розумієте свої дані, оскільки ви можете "пройти" її шляхами до рішення:

  • У нас є >50 зразків
  • Ми хочемо передбачити категорію
  • У нас є мічені дані
  • У нас менше ніж 100К зразків
  • Ми можемо вибрати 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

Support-Vector clustering (SVC) є частиною сімейства методів машинного навчання Support-Vector machines (докладніше про них нижче). У цьому методі ви можете вибрати "ядро", щоб вирішити, як кластеризувати мітки. Параметр 'C' стосується "регуляризації", яка регулює вплив параметрів. Ядро може бути одним із кількох; тут ми встановлюємо його як 'linear', щоб використовувати Linear SVC. За замовчуванням ймовірність встановлена як 'false'; тут ми встановлюємо її як 'true', щоб отримати оцінки ймовірності. Ми встановлюємо random state як '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 є частиною сімейства методів ML "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

Класифікатори Support-Vector є частиною сімейства методів ML Support-Vector Machine, які використовуються для задач класифікації та регресії. 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
    

    Дізнайтеся більше про Support-Vectors

Ensemble Classifiers

Давайте пройдемо шлях до самого кінця, навіть якщо попередній тест був досить хорошим. Спробуємо деякі класифікатори '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 Classifiers

Цей метод машинного навчання "об'єднує прогнози кількох базових оцінювачів", щоб покращити якість моделі. У нашому прикладі ми використовували Random Trees та AdaBoost.

  • Random Forest, метод усереднення, будує "ліс" із "дерев рішень", наповнених випадковістю, щоб уникнути перенавчання. Параметр n_estimators встановлюється як кількість дерев.

  • AdaBoost підбирає класифікатор до набору даних, а потім підбирає копії цього класифікатора до того ж набору даних. Він зосереджується на вагах неправильно класифікованих елементів і коригує підбір для наступного класифікатора, щоб виправити помилки.


🚀Виклик

Кожен із цих методів має велику кількість параметрів, які ви можете налаштувати. Дослідіть параметри за замовчуванням кожного методу та подумайте, що означатиме їхнє налаштування для якості моделі.

Тест після лекції

Огляд та самостійне навчання

У цих уроках багато термінології, тому приділіть хвилинку, щоб переглянути цей список корисних термінів!

Завдання

Гра з параметрами


Відмова від відповідальності:
Цей документ було перекладено за допомогою сервісу автоматичного перекладу Co-op Translator. Хоча ми прагнемо до точності, звертаємо вашу увагу, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ мовою оригіналу слід вважати авторитетним джерелом. Для критично важливої інформації рекомендується професійний переклад людиною. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникли внаслідок використання цього перекладу.