Skip to content

Latest commit

 

History

History
242 lines (163 loc) · 15 KB

File metadata and controls

242 lines (163 loc) · 15 KB

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

В този втори урок за класификация ще изследвате още начини за класифициране на числови данни. Също така ще научите за последствията от избора на един класификатор пред друг.

Предварителни изисквания

Предполагаме, че сте завършили предишните уроци и имате почистен набор от данни в папката data, наречен cleaned_cuisines.csv в основната папка на този курс от 4 урока.

Подготовка

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

Карта за класификация

По-рано научихте за различните опции, които имате при класифициране на данни, използвайки чийтшита на Microsoft. Scikit-learn предлага подобен, но по-подробен чийтшит, който може да помогне допълнително да стесните избора си на оценители (друг термин за класификатори):

ML Map from Scikit-learn

Съвет: посетете тази карта онлайн и кликнете по пътеката, за да прочетете документация.

Планът

Тази карта е много полезна след като имате ясна представа за данните си, тъй като можете да „преминавате“ по пътищата ѝ до конкретно решение:

  • Имаме >50 проби
  • Искаме да предскажем категория
  • Имаме етикетирани данни
  • Имаме по-малко от 100К проби
  • ✨ Можем да изберем Линеен SVC
  • Ако това не сработи, тъй като имаме числови данни
    • Можем да опитаме ✨ KNeighbors класификатор
      • Ако и това не сработи, опитайте ✨ SVC и ✨ Ensemble класификатори

Това е много полезна следваща стъпка.

Упражнение - разделете данните

Следвайки този път, трябва да започнем с въвеждането на някои библиотеки за използване.

  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)

Линеен SVC класификатор

Support-Vector clustering (SVC) е част от семейството на Support-Vector машини за машинно обучение (научете повече за тях по-долу). В този метод можете да изберете 'kernel' (ядро), за да решите как да се групират етикетите. Параметърът 'C' се отнася до 'регуляризация', която регулира влиянието на параметрите. Ядрото може да бъде едно от няколко; тук го задаваме на 'linear', за да използваме линеен SVC. Вероятността по подразбиране е 'false'; тук я задаваме на 'true', за да събираме оценка на вероятности. Задаваме random state на '0', за да разбъркаме данните и да получим вероятности.

Упражнение - приложете линеен SVC

Започнете с създаване на масив от класификатори. Постепенно ще добавяте към този масив, докато тестваме.

  1. Започнете с Линеен SVC:

    C = 10
    # Създайте различни класификатори.
    classifiers = {
        'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0)
    }
  2. Обучете своя модел с Линеен 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. Добавете ред към масива си с класификатори (добавете запетая след линейния 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 класификатор

Нека опитаме за малко по-добра точност с 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 класификатори

Нека следваме пътя до самия край, въпреки че предишният тест беше доста добър. Нека пробваме някои '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 класификатори

Този метод на машинно обучение "комбинира предсказанията на няколко базови оценителя", за да подобри качеството на модела. В нашия пример използвахме Random Trees и AdaBoost.

  • Random Forest, метод за усредняване, изгражда 'гора' от 'решаващи дървета', които са изпълнени със случайност, за да се избегне пренастройване. Параметърът n_estimators е зададен на броя на дърветата.

  • AdaBoost приспособява класификатор към набор от данни и след това приспособява копия на този класификатор към същия набор от данни. Той се фокусира върху тежестите на неправилно класифицираните елементи и коригира приспособяването за следващия класификатор, за да ги коригира.


🚀Предизвикателство

Всяка от тези техники има голям брой параметри, които можете да настроите. Изследвайте стандартните параметри на всяка и помислете как настройването на тези параметри би повлияло на качеството на модела.

Преглед и самостоятелно обучение

Има много жаргон в тези уроци, затова отделете минутка да прегледате този списък с полезни термини!

Задача

Играй с параметрите


Отказ от отговорност: Този документ е преведен с помощта на AI преводаческа услуга Co-op Translator. Въпреки че се стремим към точност, имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или погрешни тълкувания, произтичащи от използването на този превод.