Skip to content

Latest commit

 

History

History
242 lines (163 loc) · 14.6 KB

File metadata and controls

242 lines (163 loc) · 14.6 KB

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

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

Передумови

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

Підготовка

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

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

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

ML Map from 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_features_df, cuisines_label_df, test_size=0.3)

Класифікатор Linear SVC

Підтримка векторного кластерування (SVC) належить до сімейства методів машинного навчання Support-Vector machines (навчайтеся більше про них нижче). У цьому методі ви можете вибрати «ядро», яке визначає, як розподіляти мітки. Параметр «C» означає «регуляризацію», яка регулює вплив параметрів. Ядро може бути одним із кількох; тут ми встановлюємо його 'linear', щоб використати лінійний SVC. Параметр probability за замовчуванням 'false'; тут ми встановлюємо його 'true', щоб отримати оцінки ймовірності. Ми встановили random_state у '0', щоб перемішати дані для отримання ймовірностей.

Вправа - застосувати лінійний 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 належить до сімейства методів "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 належать до сімейства методів машинного навчання Support-Vector Machine, які використовуються для задач класифікації та регресії. SVM «відображає приклади тренування у точки в просторі», щоб максимізувати відстань між двома категоріями. Пізніші дані відображаються в цьому просторі, щоб передбачити їх категорію.

Вправа - застосувати Support Vector Classifier

Спробуємо отримати трохи кращу точність, використовуючи Support Vector Classifier.

  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

Ансамблеві класифікатори

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

✅ Дізнайтеся про Ансамблеві класифікатори

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

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

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


🚀Виклик

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

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

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

Завдання

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


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