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

11 KiB

Virtuvės klasifikatoriai 2

Šioje antroje klasifikavimo pamokoje jūs tyrinėsite daugiau būdų, kaip klasifikuoti skaitmeninius duomenis. Taip pat sužinosite apie pasekmes, renkantis vieną klasifikatorių vietoj kito.

Prieš paskaitą: testas

Būtinos žinios

Daroma prielaida, kad jau baigėte ankstesnes pamokas ir turite išvalytą duomenų rinkinį savo data aplanke, pavadintą cleaned_cuisines.csv, esančiame šio 4 pamokų aplanko šaknyje.

Pasiruošimas

Mes įkėlėme jūsų notebook.ipynb failą su išvalytu duomenų rinkiniu ir padalijome jį į X ir y duomenų rėmelius, paruoštus modelio kūrimo procesui.

Klasifikavimo žemėlapis

Ankstesnėje pamokoje sužinojote apie įvairias galimybes klasifikuoti duomenis, naudodamiesi „Microsoft“ apgaulės lapu. Scikit-learn siūlo panašų, bet detalesnį apgaulės lapą, kuris gali dar labiau padėti susiaurinti jūsų pasirinkimą (kitaip vadinamą klasifikatoriais):

ML žemėlapis iš Scikit-learn

Patarimas: aplankykite šį žemėlapį internete ir spustelėkite kelią, kad perskaitytumėte dokumentaciją.

Planas

Šis žemėlapis yra labai naudingas, kai aiškiai suprantate savo duomenis, nes galite „eiti“ jo keliais iki sprendimo:

  • Turime >50 pavyzdžių
  • Norime prognozuoti kategoriją
  • Turime pažymėtus duomenis
  • Turime mažiau nei 100 tūkst. pavyzdžių
  • Galime pasirinkti Linear SVC
  • Jei tai neveikia, kadangi turime skaitmeninius duomenis
    • Galime išbandyti KNeighbors Classifier
      • Jei tai neveikia, išbandykite SVC ir Ensemble Classifiers

Tai labai naudingas kelias, kurio verta laikytis.

Užduotis padalykite duomenis

Sekdami šį kelią, turėtume pradėti importuodami kai kurias reikalingas bibliotekas.

  1. Importuokite reikalingas bibliotekas:

    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. Padalykite savo mokymo ir testavimo duomenis:

    X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)
    

Linear SVC klasifikatorius

Support-Vector Clustering (SVC) yra Support-Vector Machines šeimos ML technikų dalis (daugiau apie jas sužinosite žemiau). Šiame metode galite pasirinkti „branduolį“ (kernel), kuris nusprendžia, kaip suskirstyti etiketes. Parametras „C“ reiškia „reguliavimą“, kuris reguliuoja parametrų įtaką. Branduolys gali būti vienas iš kelių; čia mes nustatome jį kaip „linear“, kad užtikrintume Linear SVC naudojimą. Tikimybė pagal nutylėjimą yra „false“; čia mes nustatome ją kaip „true“, kad gautume tikimybių įvertinimus. Atsitiktinę būseną nustatome kaip „0“, kad sumaišytume duomenis ir gautume tikimybes.

Užduotis pritaikykite Linear SVC

Pradėkite kurdami klasifikatorių masyvą. Jūs palaipsniui pridėsite prie šio masyvo, kai testuosite.

  1. Pradėkite nuo Linear SVC:

    C = 10
    # Create different classifiers.
    classifiers = {
        'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0)
    }
    
  2. Treniruokite savo modelį naudodami Linear SVC ir išspausdinkite ataskaitą:

    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))
    

    Rezultatas yra gana geras:

    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 klasifikatorius

K-Neighbors yra „kaimynų“ šeimos ML metodų dalis, kuriuos galima naudoti tiek prižiūrimam, tiek neprižiūrimam mokymuisi. Šiame metode sukuriamas iš anksto nustatytas taškų skaičius, o duomenys renkami aplink šiuos taškus, kad būtų galima prognozuoti apibendrintas etiketes.

Užduotis pritaikykite K-Neighbors klasifikatorių

Ankstesnis klasifikatorius buvo geras ir gerai veikė su duomenimis, bet galbūt galime pasiekti geresnį tikslumą. Išbandykite K-Neighbors klasifikatorių.

  1. Pridėkite eilutę prie savo klasifikatorių masyvo (po Linear SVC elemento pridėkite kablelį):

    'KNN classifier': KNeighborsClassifier(C),
    

    Rezultatas yra šiek tiek blogesnis:

    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
    

    Sužinokite daugiau apie K-Neighbors

Support Vector Classifier

Support-Vector klasifikatoriai yra Support-Vector Machine šeimos ML metodų dalis, naudojama klasifikavimo ir regresijos užduotims. SVM „sudeda mokymo pavyzdžius į taškus erdvėje“, kad maksimaliai padidintų atstumą tarp dviejų kategorijų. Vėlesni duomenys yra sudedami į šią erdvę, kad būtų galima prognozuoti jų kategoriją.

Užduotis pritaikykite Support Vector Classifier

Pabandykime pasiekti šiek tiek geresnį tikslumą naudodami Support Vector Classifier.

  1. Po K-Neighbors elemento pridėkite kablelį, tada pridėkite šią eilutę:

    'SVC': SVC(),
    

    Rezultatas yra gana geras!

    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
    

    Sužinokite daugiau apie Support-Vectors

Ensemble Classifiers

Sekime kelią iki galo, nors ankstesnis testas buvo gana geras. Išbandykime „Ensemble Classifiers“, konkrečiai Random Forest ir AdaBoost:

  'RFST': RandomForestClassifier(n_estimators=100),
  'ADA': AdaBoostClassifier(n_estimators=100)

Rezultatas yra labai geras, ypač 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

Sužinokite daugiau apie Ensemble Classifiers

Šis mašininio mokymosi metodas „sujungia kelių bazinių įvertintojų prognozes“, kad pagerintų modelio kokybę. Mūsų pavyzdyje naudojome Random Trees ir AdaBoost.

  • Random Forest, vidurkinimo metodas, sukuria „mišką“ iš „sprendimų medžių“, įterptų su atsitiktinumu, kad būtų išvengta per didelio pritaikymo. Parametras n_estimators nustatomas kaip medžių skaičius.

  • AdaBoost pritaiko klasifikatorių duomenų rinkiniui, o tada pritaiko šio klasifikatoriaus kopijas tam pačiam duomenų rinkiniui. Jis sutelkia dėmesį į neteisingai klasifikuotų elementų svorius ir koreguoja kitą klasifikatorių, kad ištaisytų klaidas.


🚀Iššūkis

Kiekviena iš šių technikų turi daug parametrų, kuriuos galite koreguoti. Ištyrinėkite kiekvieno numatytuosius parametrus ir pagalvokite, ką šių parametrų koregavimas reikštų modelio kokybei.

Po paskaitos: testas

Peržiūra ir savarankiškas mokymasis

Šiose pamokose yra daug terminologijos, todėl skirkite minutę peržiūrėti šį sąrašą naudingų terminų!

Užduotis

Parametrų žaidimas


Atsakomybės apribojimas:
Šis dokumentas buvo išverstas naudojant dirbtinio intelekto vertimo paslaugą Co-op Translator. Nors siekiame tikslumo, atkreipiame dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Kritinei informacijai rekomenduojama naudotis profesionalių vertėjų paslaugomis. Mes neprisiimame atsakomybės už nesusipratimus ar klaidingus aiškinimus, kylančius dėl šio vertimo naudojimo.