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
localizeflow[bot] 6991f52604
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/1, 300 changes) 3 months ago
notebook.ipynb chore(i18n): sync translations with latest source changes (chunk 1/1, 21 changes) 2 months ago

README.md

Класифікатори кухонь 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. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ рідною мовою слід вважати авторитетним джерелом. Для критично важливої інформації рекомендується професійний переклад людиною. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, які виникли внаслідок використання цього перекладу.