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

15 KiB

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

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

Квиз пре предавања

Предуслови

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

Припрема

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

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

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

МЛ мапа из Scikit-learn

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

План

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

  • Имамо >50 узорака
  • Желимо да предвидимо категорију
  • Имамо означене податке
  • Имамо мање од 100.000 узорака
  • Можемо изабрати 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 (СВМ) (више о томе у наставку). У овом методу, можете изабрати „kernel“ да одлучите како да групишете ознаке. Параметар 'C' се односи на 'регуларизацију', која регулише утицај параметара. Kernel може бити један од неколико; овде га постављамо на '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 је део породице метода машинског учења „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 Classifier

Support-Vector класификатори су део породице метода машинског учења Support-Vector Machine које се користе за задатке класификације и регресије. СВМ-ови „мапирају примере тренинга у тачке у простору“ како би максимизовали удаљеност између две категорије. Накнадни подаци се мапирају у овај простор како би се предвидела њихова категорија.

Вежба - примените 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

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