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

11 KiB

Klasyfikatory kuchni 2

W tej drugiej lekcji dotyczącej klasyfikacji poznasz więcej sposobów klasyfikowania danych numerycznych. Dowiesz się również, jakie są konsekwencje wyboru jednego klasyfikatora zamiast innego.

Quiz przed wykładem

Wymagania wstępne

Zakładamy, że ukończyłeś poprzednie lekcje i masz wyczyszczony zbiór danych w folderze data, nazwany cleaned_cuisines.csv, znajdujący się w głównym katalogu tego czteroczęściowego kursu.

Przygotowanie

Załadowaliśmy Twój plik notebook.ipynb z wyczyszczonym zbiorem danych i podzieliliśmy go na ramki danych X i y, gotowe do procesu budowy modelu.

Mapa klasyfikacji

Wcześniej nauczyłeś się o różnych opcjach klasyfikacji danych, korzystając z ściągi Microsoftu. Scikit-learn oferuje podobną, ale bardziej szczegółową ściągę, która może pomóc jeszcze bardziej zawęzić wybór estymatorów (inaczej klasyfikatorów):

Mapa ML ze Scikit-learn

Wskazówka: odwiedź tę mapę online i klikaj po ścieżkach, aby przeczytać dokumentację.

Plan

Ta mapa jest bardzo pomocna, gdy masz jasne zrozumienie swoich danych, ponieważ możesz „przechodzić” jej ścieżkami, aby podjąć decyzję:

  • Mamy >50 próbek
  • Chcemy przewidzieć kategorię
  • Mamy dane z etykietami
  • Mamy mniej niż 100 tys. próbek
  • Możemy wybrać Linear SVC
  • Jeśli to nie zadziała, ponieważ mamy dane numeryczne:
    • Możemy spróbować KNeighbors Classifier
      • Jeśli to nie zadziała, spróbuj SVC i Ensemble Classifiers

To bardzo pomocna ścieżka do naśladowania.

Ćwiczenie - podziel dane

Podążając tą ścieżką, powinniśmy zacząć od zaimportowania potrzebnych bibliotek.

  1. Zaimportuj potrzebne biblioteki:

    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. Podziel dane na zestawy treningowe i testowe:

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

Klasyfikator Linear SVC

Support-Vector Clustering (SVC) to metoda z rodziny maszyn wektorów nośnych (Support-Vector Machines) w technikach uczenia maszynowego (więcej o nich poniżej). W tej metodzie możesz wybrać „jądro” (kernel), aby zdecydować, jak grupować etykiety. Parametr 'C' odnosi się do 'regularyzacji', która kontroluje wpływ parametrów. Jądro może być jednym z kilku; tutaj ustawiamy je na 'linear', aby wykorzystać liniowy SVC. Domyślnie prawdopodobieństwo jest ustawione na 'false'; tutaj ustawiamy je na 'true', aby uzyskać oszacowania prawdopodobieństwa. Parametr random state ustawiamy na '0', aby przetasować dane i uzyskać prawdopodobieństwa.

Ćwiczenie - zastosuj Linear SVC

Zacznij od stworzenia tablicy klasyfikatorów. Będziesz stopniowo dodawać do tej tablicy, testując różne metody.

  1. Zacznij od Linear SVC:

    C = 10
    # Create different classifiers.
    classifiers = {
        'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0)
    }
    
  2. Wytrenuj model, używając Linear SVC, i wyświetl raport:

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

    Wynik jest całkiem dobry:

    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
    

Klasyfikator K-Neighbors

K-Neighbors należy do rodziny metod ML „sąsiadów”, które mogą być używane zarówno w uczeniu nadzorowanym, jak i nienadzorowanym. W tej metodzie tworzona jest z góry określona liczba punktów, a dane są grupowane wokół tych punktów, aby można było przewidzieć ogólne etykiety dla danych.

Ćwiczenie - zastosuj klasyfikator K-Neighbors

Poprzedni klasyfikator był dobry i dobrze działał z danymi, ale może uda się uzyskać lepszą dokładność. Spróbuj klasyfikatora K-Neighbors.

  1. Dodaj linię do swojej tablicy klasyfikatorów (dodaj przecinek po elemencie Linear SVC):

    'KNN classifier': KNeighborsClassifier(C),
    

    Wynik jest trochę gorszy:

    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
    

    Dowiedz się więcej o K-Neighbors

Klasyfikator Support Vector

Klasyfikatory Support-Vector należą do rodziny metod ML Support-Vector Machine, które są używane do zadań klasyfikacji i regresji. SVM „mapuje przykłady treningowe na punkty w przestrzeni”, aby zmaksymalizować odległość między dwiema kategoriami. Kolejne dane są mapowane w tej przestrzeni, aby przewidzieć ich kategorię.

Ćwiczenie - zastosuj klasyfikator Support Vector

Spróbujmy uzyskać nieco lepszą dokładność za pomocą klasyfikatora Support Vector.

  1. Dodaj przecinek po elemencie K-Neighbors, a następnie dodaj tę linię:

    'SVC': SVC(),
    

    Wynik jest całkiem dobry!

    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
    

    Dowiedz się więcej o Support-Vectors

Klasyfikatory zespołowe (Ensemble Classifiers)

Podążajmy ścieżką do samego końca, mimo że poprzedni test był całkiem dobry. Wypróbujmy kilka klasyfikatorów zespołowych, w szczególności Random Forest i AdaBoost:

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

Wynik jest bardzo dobry, szczególnie dla 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

Dowiedz się więcej o Klasyfikatorach zespołowych

Ta metoda uczenia maszynowego „łączy przewidywania kilku podstawowych estymatorów”, aby poprawić jakość modelu. W naszym przykładzie użyliśmy Random Trees i AdaBoost.

  • Random Forest, metoda uśredniania, buduje „las” „drzew decyzyjnych” z elementami losowości, aby uniknąć przeuczenia. Parametr n_estimators określa liczbę drzew.

  • AdaBoost dopasowuje klasyfikator do zbioru danych, a następnie dopasowuje kopie tego klasyfikatora do tego samego zbioru danych. Skupia się na wagach błędnie sklasyfikowanych elementów i dostosowuje dopasowanie kolejnego klasyfikatora, aby je poprawić.


🚀 Wyzwanie

Każda z tych technik ma dużą liczbę parametrów, które możesz dostosować. Zbadaj domyślne parametry każdej z nich i zastanów się, co zmiana tych parametrów oznaczałaby dla jakości modelu.

Quiz po wykładzie

Przegląd i samodzielna nauka

W tych lekcjach pojawia się wiele żargonu, więc poświęć chwilę, aby przejrzeć tę listę przydatnej terminologii!

Zadanie

Zabawa z parametrami


Zastrzeżenie:
Ten dokument został przetłumaczony za pomocą usługi tłumaczeniowej AI Co-op Translator. Chociaż dokładamy wszelkich starań, aby tłumaczenie było precyzyjne, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za wiarygodne źródło. W przypadku informacji o krytycznym znaczeniu zaleca się skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z korzystania z tego tłumaczenia.