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/2-Classifiers-1
leestott 3773c80b49
🌐 Update translations via Co-op Translator
2 weeks ago
..
solution 🌐 Update translations via Co-op Translator 3 weeks ago
README.md 🌐 Update translations via Co-op Translator 2 weeks ago
assignment.md 🌐 Update translations via Co-op Translator 3 weeks ago
notebook.ipynb 🌐 Update translations via Co-op Translator 3 weeks ago

README.md

Klasyfikatory kuchni 1

W tej lekcji użyjesz zestawu danych, który zapisałeś w poprzedniej lekcji, pełnego zrównoważonych i czystych danych dotyczących kuchni.

Wykorzystasz ten zestaw danych z różnymi klasyfikatorami, aby przewidzieć daną kuchnię narodową na podstawie grupy składników. Przy okazji dowiesz się więcej o tym, jak algorytmy mogą być wykorzystywane do zadań klasyfikacyjnych.

Quiz przed lekcją

Przygotowanie

Zakładając, że ukończyłeś Lekcję 1, upewnij się, że plik cleaned_cuisines.csv znajduje się w folderze /data w katalogu głównym dla tych czterech lekcji.

Ćwiczenie - przewidywanie kuchni narodowej

  1. Pracując w folderze notebook.ipynb tej lekcji, zaimportuj ten plik wraz z biblioteką Pandas:

    import pandas as pd
    cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv")
    cuisines_df.head()
    

    Dane wyglądają tak:

Unnamed: 0 cuisine almond angelica anise anise_seed apple apple_brandy apricot armagnac ... whiskey white_bread white_wine whole_grain_wheat_flour wine wood yam yeast yogurt zucchini
0 0 indian 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
1 1 indian 1 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
2 2 indian 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
3 3 indian 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
4 4 indian 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 1 0
  1. Teraz zaimportuj kilka dodatkowych bibliotek:

    from sklearn.linear_model import LogisticRegression
    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
    from sklearn.svm import SVC
    import numpy as np
    
  2. Podziel współrzędne X i y na dwa zestawy danych do trenowania. cuisine może być zestawem etykiet:

    cuisines_label_df = cuisines_df['cuisine']
    cuisines_label_df.head()
    

    Wygląda to tak:

    0    indian
    1    indian
    2    indian
    3    indian
    4    indian
    Name: cuisine, dtype: object
    
  3. Usuń kolumnę Unnamed: 0 oraz kolumnę cuisine, używając drop(). Zapisz resztę danych jako cechy do trenowania:

    cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1)
    cuisines_feature_df.head()
    

    Twoje cechy wyglądają tak:

almond angelica anise anise_seed apple apple_brandy apricot armagnac artemisia artichoke ... whiskey white_bread white_wine whole_grain_wheat_flour wine wood yam yeast yogurt zucchini
0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 1 0

Teraz jesteś gotowy, aby trenować swój model!

Wybór klasyfikatora

Teraz, gdy dane są czyste i gotowe do trenowania, musisz zdecydować, który algorytm użyć do zadania.

Scikit-learn grupuje klasyfikację w ramach Uczenia Nadzorowanego, a w tej kategorii znajdziesz wiele metod klasyfikacji. Różnorodność może być na pierwszy rzut oka przytłaczająca. Poniższe metody obejmują techniki klasyfikacji:

  • Modele liniowe
  • Maszyny wektorów nośnych (SVM)
  • Stochastyczny gradient prosty
  • Najbliżsi sąsiedzi
  • Procesy Gaussowskie
  • Drzewa decyzyjne
  • Metody zespołowe (klasyfikator głosujący)
  • Algorytmy wieloklasowe i wielowyjściowe (klasyfikacja wieloklasowa i wieloetykietowa, klasyfikacja wieloklasowa-wielowyjściowa)

Możesz również użyć sieci neuronowych do klasyfikacji danych, ale to wykracza poza zakres tej lekcji.

Jaki klasyfikator wybrać?

Więc, który klasyfikator powinieneś wybrać? Często przetestowanie kilku i poszukiwanie dobrego wyniku jest sposobem na sprawdzenie. Scikit-learn oferuje porównanie obok siebie na stworzonym zestawie danych, porównując KNeighbors, SVC na dwa sposoby, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB i QuadraticDiscriminationAnalysis, pokazując wyniki wizualnie:

porównanie klasyfikatorów

Wykresy wygenerowane na dokumentacji Scikit-learn

AutoML rozwiązuje ten problem w prosty sposób, przeprowadzając te porównania w chmurze, pozwalając wybrać najlepszy algorytm dla twoich danych. Wypróbuj to tutaj

Lepsze podejście

Lepszym sposobem niż zgadywanie jest skorzystanie z pomysłów zawartych w tej pobieralnej ściągawce ML. Tutaj odkrywamy, że dla naszego problemu wieloklasowego mamy kilka opcji:

ściągawka dla problemów wieloklasowych

Fragment ściągawki algorytmów Microsoftu, szczegółowo opisujący opcje klasyfikacji wieloklasowej

Pobierz tę ściągawkę, wydrukuj ją i powieś na ścianie!

Rozumowanie

Zobaczmy, czy możemy rozważyć różne podejścia, biorąc pod uwagę ograniczenia, które mamy:

  • Sieci neuronowe są zbyt ciężkie. Biorąc pod uwagę nasze czyste, ale minimalne dane oraz fakt, że przeprowadzamy trening lokalnie za pomocą notebooków, sieci neuronowe są zbyt wymagające dla tego zadania.
  • Brak klasyfikatora dwuklasowego. Nie używamy klasyfikatora dwuklasowego, więc to wyklucza one-vs-all.
  • Drzewo decyzyjne lub regresja logistyczna mogą działać. Drzewo decyzyjne może działać, podobnie jak regresja logistyczna dla danych wieloklasowych.
  • Wieloklasowe wzmocnione drzewa decyzyjne rozwiązują inny problem. Wieloklasowe wzmocnione drzewo decyzyjne jest najbardziej odpowiednie dla zadań nieparametrycznych, np. zadań zaprojektowanych do budowania rankingów, więc nie jest dla nas użyteczne.

Korzystanie z Scikit-learn

Będziemy używać Scikit-learn do analizy naszych danych. Istnieje jednak wiele sposobów na użycie regresji logistycznej w Scikit-learn. Spójrz na parametry do przekazania.

Zasadniczo są dwa ważne parametry - multi_class i solver - które musimy określić, gdy prosimy Scikit-learn o wykonanie regresji logistycznej. Wartość multi_class stosuje określone zachowanie. Wartość solvera określa, jaki algorytm użyć. Nie wszystkie solvery mogą być łączone z wszystkimi wartościami multi_class.

Według dokumentacji, w przypadku wieloklasowym, algorytm treningowy:

  • Używa schematu one-vs-rest (OvR), jeśli opcja multi_class jest ustawiona na ovr
  • Używa funkcji strat krzyżowej entropii, jeśli opcja multi_class jest ustawiona na multinomial. (Obecnie opcja multinomial jest obsługiwana tylko przez solvery lbfgs, sag, saga i newton-cg.)"

🎓 'Schemat' tutaj może być 'ovr' (one-vs-rest) lub 'multinomial'. Ponieważ regresja logistyczna jest zaprojektowana głównie do klasyfikacji binarnej, te schematy pozwalają jej lepiej obsługiwać zadania klasyfikacji wieloklasowej. źródło

🎓 'Solver' jest definiowany jako "algorytm używany w problemie optymalizacji". źródło.

Scikit-learn oferuje tę tabelę, aby wyjaśnić, jak solvery radzą sobie z różnymi wyzwaniami wynikającymi z różnych struktur danych:

solvery

Ćwiczenie - podziel dane

Możemy skupić się na regresji logistycznej podczas naszego pierwszego treningu, ponieważ niedawno nauczyłeś się o niej w poprzedniej lekcji. Podziel swoje dane na grupy treningowe i testowe, wywołując train_test_split():

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

Ćwiczenie - zastosuj regresję logistyczną

Ponieważ używasz przypadku wieloklasowego, musisz wybrać, jaki schemat zastosować i jaki solver ustawić. Użyj LogisticRegression z ustawieniem multi_class i solverem liblinear do treningu.

  1. Utwórz regresję logistyczną z multi_class ustawionym na ovr i solverem ustawionym na liblinear:

    lr = LogisticRegression(multi_class='ovr',solver='liblinear')
    model = lr.fit(X_train, np.ravel(y_train))
    
    accuracy = model.score(X_test, y_test)
    print ("Accuracy is {}".format(accuracy))
    

    Wypróbuj inny solver, taki jak lbfgs, który często jest ustawiany jako domyślny

Uwaga, użyj funkcji Pandas ravel, aby spłaszczyć dane, gdy zajdzie taka potrzeba. Dokładność wynosi ponad 80%!

  1. Możesz zobaczyć działanie tego modelu, testując jeden wiersz danych (#50):

    print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}')
    print(f'cuisine: {y_test.iloc[50]}')
    

    Wynik jest wyświetlany:

    ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object')
    cuisine: indian
    

    Spróbuj inny numer wiersza i sprawdź wyniki

  2. Zagłębiając się, możesz sprawdzić dokładność tej predykcji:

    test= X_test.iloc[50].values.reshape(-1, 1).T
    proba = model.predict_proba(test)
    classes = model.classes_
    resultdf = pd.DataFrame(data=proba, columns=classes)
    
    topPrediction = resultdf.T.sort_values(by=[0], ascending = [False])
    topPrediction.head()
    

    Wynik jest wyświetlany - kuchnia indyjska jest najlepszym przypuszczeniem, z dużym prawdopodobieństwem:

    0
    indian 0.715851
    chinese 0.229475
    japanese 0.029763
    korean 0.017277
    thai 0.007634

    Czy potrafisz wyjaśnić, dlaczego model jest dość pewny, że to kuchnia indyjska?

  3. Uzyskaj więcej szczegółów, wyświetlając raport klasyfikacyjny, tak jak robiłeś to w lekcjach dotyczących regresji:

    y_pred = model.predict(X_test)
    print(classification_report(y_test,y_pred))
    
    precyzja recall f1-score wsparcie
    chinese 0.73 0.71 0.72 229
    indian 0.91 0.93 0.92 254
    japanese 0.70 0.75 0.72 220
    korean 0.86 0.76 0.81 242
    thai 0.79 0.85 0.82 254
    dokładność 0.80 1199
    średnia makro 0.80 0.80 0.80 1199
    średnia ważona 0.80 0.80 0.80 1199

🚀Wyzwanie

W tej lekcji użyłeś oczyszczonych danych, aby zbudować model uczenia maszynowego, który potrafi przewidzieć narodową kuchnię na podstawie serii składników. Poświęć trochę czasu na zapoznanie się z wieloma opcjami, które Scikit-learn oferuje do klasyfikacji danych. Zgłęb temat 'solver', aby zrozumieć, co dzieje się za kulisami.

Quiz po lekcji

Przegląd i samodzielna nauka

Zgłęb trochę bardziej matematykę stojącą za regresją logistyczną w tej lekcji

Zadanie

Przestudiuj solvery


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 krytycznych 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.