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/sk/4-Classification/2-Classifiers-1
localizeflow[bot] 53f59247af
chore(i18n): sync translations with latest source changes (chunk 1/1, 12 changes)
3 months ago
..
solution chore(i18n): sync translations with latest source changes (chunk 1/1, 300 changes) 5 months ago
README.md chore(i18n): sync translations with latest source changes (chunk 1/1, 12 changes) 3 months ago
assignment.md chore(i18n): sync translations with latest source changes (chunk 1/1, 300 changes) 5 months ago
notebook.ipynb 🌐 Update translations via Co-op Translator 10 months ago

README.md

Klasifikátory kuchyne 1

V tejto lekcii použijete dataset, ktorý ste si uložili z predchádzajúcej lekcie, plný vyvážených, čistých údajov o kuchyniach.

Tento dataset použijete s rôznymi klasifikátormi na predpoveď danej národnej kuchyne na základe skupiny ingrediencií. Počas toho sa dozviete viac o niektorých spôsoboch, ako možno algoritmy využiť na klasifikačné úlohy.

Prednáškový kvíz

Príprava

Ak ste dokončili Lekciu 1, uistite sa, že súbor cleaned_cuisines.csv existuje v koreňovej priečinok /data pre tieto štyri lekcie.

Cvičenie - predpovedať národnú kuchyňu

  1. V priečinku notebook.ipynb tejto lekcie importujte tento súbor spolu s knižnicou Pandas:

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

    Údaje vyzerajú takto:

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 importujte niekoľko ďalších knižníc:

    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. Rozdeľte súradnice X a y do dvoch dataframeov na trénovanie. cuisine môže byť dataframe s návestiami:

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

    Bude to vyzerať takto:

    0    indian
    1    indian
    2    indian
    3    indian
    4    indian
    Name: cuisine, dtype: object
    
  3. Odstráňte stĺpec Unnamed: 0 a stĺpec cuisine pomocou funkcie drop(). Zvyšok dát uložte ako trénovateľné vlastnosti:

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

    Vaše vlastnosti vyzerajú takto:

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 ste pripravení trénovať svoj model!

Výber klasifikátora

Keď už sú vaše dáta čisté a pripravené na trénovanie, musíte sa rozhodnúť, ktorý algoritmus použiť.

Scikit-learn zaraďuje klasifikáciu do kategórie Supervised Learning a v tejto kategórii nájdete mnoho spôsobov klasifikácie. Rozmanitosť je na prvý pohľad dosť ohromujúca. Nasledujúce metódy zahŕňajú klasifikačné techniky:

  • Lineárne modely
  • Support Vector Machines
  • Stochastic Gradient Descent
  • Najbližší susedia
  • Gaussovské procesy
  • Rozhodovacie stromy
  • Metódy ansámblov (voting Classifier)
  • Multitriedne a multivýstupové algoritmy (multitriedna a multilabel klasifikácia, multitriedna multivýstupová klasifikácia)

Môžete tiež použiť neurónové siete na klasifikáciu dát, ale to presahuje rozsah tejto lekcie.

Ktorý klasifikátor zvoliť?

Ktorý klasifikátor by ste si teda mali vybrať? Často je spôsob, že skúsite niekoľko a hľadáte dobrý výsledok. Scikit-learn ponúka bezprostredné porovnanie na vytvorenom datasete, ktoré porovnáva KNeighbors, SVC dvoma spôsobmi, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB a QuadraticDiscrinationAnalysis a vizualizuje výsledky:

porovnanie klasifikátorov

Grafy vytvorené v dokumentácii Scikit-learn

AutoML túto úlohu elegantne rieši tým, že vykonáva tieto porovnania v cloude, čo vám umožní vybrať najlepší algoritmus pre vaše dáta. Vyskúšajte to tu

Lepší prístup

Lepší spôsob ako hádať naslepo, je postupovať podľa odporúčaní v tomto stiahnuteľnom ML Cheat sheet. Tu objavujeme, že pri našom multitriednom probléme máme niekoľko možností:

cheatsheet pre multitriedne problémy

Časť Microsoft Algorithm Cheat Sheet, rozoberajúca možnosti multitriednej klasifikácie

Stiahnite si tento cheat sheet, vytlačte si ho a zavesíte na stenu!

Odôvodnenie

Pozrime sa, či dokážeme rozumovo prejsť rôznymi prístupmi vzhľadom na dané obmedzenia:

  • Neurónové siete sú príliš náročné. Vzhľadom na náš čistý, ale minimálny dataset a fakt, že trénovanie beží lokálne cez notebooky, sú neurónové siete príliš náročné na túto úlohu.
  • Žiadny klasifikátor pre dve triedy. Nepoužívame klasifikátor pre dve triedy, takže možnosť "one-vs-all" vylučujeme.
  • Decision tree alebo logická regresia môže fungovať. Môže fungovať rozhodovací strom alebo logistická regresia pre multitriedne dáta.
  • Multitriedne boosted rozhodovacie stromy riešia inú úlohu. Multitriedny boosted rozhodovací strom je vhodnejší pre neparametrické úlohy, napríklad konštruovanie rebríčkov, takže pre nás nie je užitočný.

Použitie Scikit-learn

Použijeme Scikit-learn na analýzu našich dát. Existuje však mnoho spôsobov, ako použiť logistickú regresiu v Scikit-learn. Pozrite si parametre, ktoré je možné odovzdať.

Podstatné sú dva parametre - multi_class a solver - ktoré musíme určiť, keď žiadame Scikit-learn o vykonanie logistickej regresie. Hodnota multi_class aplikuje určitý spôsob správania. Hodnota solveru je algoritmus, ktorý sa použije. Nie všetky solvery sú kompatibilné so všetkými hodnotami multi_class.

Podľa dokumentácie, pri multitriednom prípade, tréningový algoritmus:

  • Používa schému one-vs-rest (OvR), ak je multi_class nastavený na ovr
  • Používa cross-entropy loss, ak je multi_class nastavený na multinomial. (Momentálne je možnosť multinomial podporovaná iba solvermi lbfgs, sag, saga a newton-cg)."

🎓 'schéma' tu môže byť 'ovr' (one-vs-rest) alebo 'multinomial'. Keďže logistická regresia je navrhnutá na binárnu klasifikáciu, tieto schémy jej umožňujú lepšie zvládnuť multitriedne klasifikačné úlohy. zdroj

🎓 'solver' je definovaný ako "algoritmus, ktorý sa použije v optimalizačnej úlohe". zdroj.

Scikit-learn ponúka túto tabuľku, ktorá vysvetľuje, ako solvery spracovávajú rôzne výzvy, ktoré predstavujú rôzne štruktúry dát:

solvery

Cvičenie - rozdeliť dáta

Môžeme sa zamerať na logistickú regresiu pre náš prvý pokus o trénovanie, keďže ste o nej nedávno čítali v predchádzajúcej lekcii. Rozdeľte dáta na trénovacie a testovacie skupiny pomocou volania train_test_split():

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

Cvičenie - aplikovať logistickú regresiu

Keďže používate multitriedny prípad, musíte si vybrať, akú schému použiť a aký solver nastaviť. Použite LogisticRegression s multitriednym nastavením a liblinear solverom na trénovanie.

  1. Vytvorte logistickú regresiu s multi_class nastaveným na ovr a solverom 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))
    

    Vyskúšajte iný solver ako lbfgs, ktorý je často nastavený ako predvolený

    Poznámka: Použite funkciu Pandas ravel na zploštenie dát, keď je to potrebné.

    Presnosť je dobrá, vyše 80%!

  2. Model si môžete vyskúšať tak, že otestujete jeden riadok dát (#50):

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

    Výsledok sa vytlačí:

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

    Vyskúšajte iné číslo riadku a skontrolujte výsledky

  3. Hlbšie preskúmajte a overte presnosť tohto predpovede:

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

    Výsledok je vytlačený najpravdepodobnejšia je indická kuchyňa, s dobrou pravdepodobnosťou:

    0
    indian 0.715851
    chinese 0.229475
    japanese 0.029763
    korean 0.017277
    thai 0.007634

    Dokážete vysvetliť, prečo si model dosť iste myslí, že ide o indickú kuchyňu?

  4. Získajte viac detailov vytlačením klasifikačnej správy, ako ste to robili v lekciách o regresii:

    y_pred = model.predict(X_test)
    print(classification_report(y_test,y_pred))
    
    precision recall f1-score support
    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
    accuracy 0.80 1199
    macro avg 0.80 0.80 0.80 1199
    weighted avg 0.80 0.80 0.80 1199

🚀Výzva

V tejto lekcii ste použili vyčistené dáta na vybudovanie modelu strojového učenia, ktorý dokáže predpovedať národnú kuchyňu na základe série ingrediencií. Venujte čas preštudovaniu mnohých možností, ktoré Scikit-learn poskytuje na klasifikáciu dát. Hlbšie sa oboznámte s konceptom „solver“ a pochopte, čo sa deje v pozadí.

Kvíz po prednáške

Prehľad a samostatné štúdium

Málo sa ponorte do matematiky za logistickou regresiou v tejto lekcii

Úloha

Študujte solver-y


Zrieknutie sa zodpovednosti: Tento dokument bol preložený pomocou služby prekladov AI Co-op Translator. Hoci sa snažíme o presnosť, majte prosím na pamäti, že automatické preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho rodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za akékoľvek nedorozumenia alebo nesprávne výklady vyplývajúce z použitia tohto prekladu.