Skip to content

Latest commit

 

History

History
242 lines (163 loc) · 14.5 KB

File metadata and controls

242 lines (163 loc) · 14.5 KB

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

У овом другом часу о класификацији, истражићете више начина за класификацију нумеричких података. Такође ћете научити које су последице избора једног класификатора уместо другог.

Предуслови

Претпоставка је да сте завршили претходне лекције и да имате очишћени скуп података у вашем фолдеру data под именом cleaned_cuisines.csv у корену овог фолдера са 4 лекције.

Припрема

Учитао сам ваш фајл notebook.ipynb са очишћеним скупом података и поделио га у X и y dataframe-ове, спремне за процес прављења модела.

Мапа класификације

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

ML Map from Scikit-learn

Савет: посетите ову мапу онлајн и кликните на пут да бисте прочитали документацију.

План

Ова мапа је веома корисна када имате јасан увид у своје податке, јер можете „ходати“ по њеним стазама до одлуке:

  • Имамо >50 узорака
  • Желимо да предвидимо категорију
  • Имамо означене податке
  • Имамо мање од 100K узорака
  • ✨ Можемо изабрати Linear 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)

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

Support-Vector clustering (SVC) припада породици Support-Vector машина за машинско учење (сазнајте више о њима испод). У овој методи можете одабрати „кернел“ да бисте одлучили како да кластерирате етикете. Параметар „C“ односи се на „регуларизацију“ која регулише утицај параметара. Кернел може бити један од више; овде смо га подесили на „linear“ да бисмо искористили линеарни SVC. Веројатност је подразумевано „false“; овде смо је подесили на „true“ да бисмо сакупили процене вероватноће. Случајно стање подешено је на '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 класификатор

Хајде да пробамо мало бољу прецизност са 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 прилагођава класификатор скупу података, а затим прилагођава копије тог класификатора на исти скуп података. Фокусира се на тежине неправилно класификованих предмета и подешава прилагођавање за следећи класификатор да исправи грешке.


🚀Изазов

Свака од ових техника има велики број параметара које можете подешавати. Истражите подразумеване параметре сваке и размислите шта би подешавање тих параметара значило за квалитет модела.

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

У овим лекцијама има доста терминологије, зато одвојите минут да прегледате овој списак корисних појмова!

Домашћи задатак

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


Одрицање од одговорности:
Овај документ је преведен коришћењем сервиса за превођење уз помоћ вештачке интелигенције Co-op Translator. Иако се трудимо да превод буде што прецизнији, молимо имајте у виду да аутоматизовани преводи могу садржати грешке или нетачности. Изворни документ на његовом оригиналном језику треба сматрати коначним и ауторитативним извором. За критичне информације препоручује се стручно људско превођење. Не преузимамо одговорност за било какве неспоразуме или нетачне интерпретације настале употребом овог превода.