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/hu/4-Classification/2-Classifiers-1
localizeflow[bot] 099125979f
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) 6 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) 6 months ago
notebook.ipynb 🌐 Update translations via Co-op Translator 10 months ago

README.md

Konyhák osztályozói 1

Ebben a leckében a legutóbbi leckéből mentett, kiegyensúlyozott, tiszta adatokat tartalmazó, konyhákról szóló adathalmazt fogod használni.

Ezt az adathalmazt különféle osztályozókkal fogod használni, hogy megjósolj egy adott nemzeti konyhát egy alapanyagcsoport alapján. Miközben ezt teszed, többet megtudsz az algoritmusok osztályozási feladatokra való felhasználásának néhány módjáról.

Előadás előtti kvíz

Előkészület

Feltételezve, hogy befejezted az 1. leckét, győződj meg róla, hogy a cleaned_cuisines.csv fájl létezik a négy leckét lefedő gyökér /data mappában.

Gyakorlat - egy nemzeti konyha előrejelzése

  1. Az ebben a leckében található notebook.ipynb mappában importáld be a fájlt a Pandas könyvtárral együtt:

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

    Az adatok így néznek ki:

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. Most importálj be még több könyvtárat:

    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. Oszd szét az X és y koordinátákat két adattáblára tanításhoz. A cuisine lehet a címke adattábla:

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

    Így fog kinézni:

    0    indian
    1    indian
    2    indian
    3    indian
    4    indian
    Name: cuisine, dtype: object
    
  3. Dobd el az Unnamed: 0 oszlopot és a cuisine oszlopot drop() meghívásával. A maradék adatot mentsd el tanításra alkalmas jellemzőkként:

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

    A jellemzőid így néznek ki:

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

Most készen állsz a modell betanítására!

Az osztályozó kiválasztása

Most, hogy az adatok tiszták és készek a tanításra, el kell döntened, melyik algoritmust használod a feladathoz.

A Scikit-learn az osztályozást a Felügyelt tanulás (Supervised Learning) alá sorolja, és ezen a területen sokféle módszert találsz. A választék először meglehetősen zavaró lehet. Az alábbi módszerek mind tartalmaznak osztályozási technikákat:

  • Lineáris modellek
  • Támogató vektor gépek (Support Vector Machines)
  • Stokasztikus gradiens csökkenés (Stochastic Gradient Descent)
  • Legközelebbi szomszédok (Nearest Neighbors)
  • Gaussi folyamatok
  • Döntési fák
  • Együttes módszerek (voting Classifier)
  • Többosztályos és többkimenetű algoritmusok (többosztályos és többcímkés osztályozás, többosztályos-többkimenetű osztályozás)

Neurális hálókat is használhatsz az adatok osztályozására, de ez nem része ennek a leckének.

Melyik osztályozót válasszam?

Tehát, melyik osztályozót válaszd? Gyakran jó módszer több osztályozó tesztelése, hogy melyik ad jó eredményt. A Scikit-learn kínál egy oldal-by-oldal összehasonlítást egy létrehozott adathalmazon, összehasonlítva KNeighbors, az SVC két módját, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB és QuadraticDiscrinationAnalysis eredményeit, vizualizálva:

osztályozók összehasonlítása

Grafikonok a Scikit-learn dokumentációjából

Az AutoML ezt a problémát szépen megoldja azáltal, hogy ezeket az összehasonlításokat a felhőben futtatja, lehetővé téve a legjobb algoritmus kiválasztását az adataidhoz. Próbáld ki itt

Egy jobb megközelítés

Egy jobb, mint találomra próbálgatni, ha követed az ötleteket ezen a letölthető ML Cheat sheet-en. Itt megtudjuk, hogy szakítós problémánk esetén néhány lehetőségünk van:

csalólap többosztályos problémákhoz

A Microsoft algoritmus csalólapjának egy része, a többosztályos osztályozási opciók részletezése

Töltsd le ezt a csalólapot, nyomtasd ki, és tedd ki a faladra!

Érvelés

Nézzük meg, hogy hogyan gondolkodhatunk különböző megközelítésekről az adott feltételek mellett:

  • A neurális hálók túl nehezek. Adataink tiszták, de minimálisak, és mivel helyileg, notebookokban futtatjuk a tanítást, a neurális hálók túl nehézsúlyúak ehhez a feladathoz.
  • Nincs kétosztályos osztályozó. Nem használunk kétosztályos osztályozót, ezért kizárjuk az egy-az-összes elleni módszert.
  • A döntési fa vagy a logisztikus regresszió működhet. Egy döntési fa működhet, illetve a logisztikus regresszió többosztályos adatokra.
  • A többosztályos Boosted Decision Tree más problémát old meg. Ez a módszer inkább nem-paraméteres feladatokra alkalmas, például rangsorok készítésére, így nem hasznos nekünk.

Scikit-learn használata

A Scikit-learn-t használjuk adatelemzésre. Viszont számos módon lehet logisztikus regressziót alkalmazni benne. Nézd meg a paramétereket.

Alapvetően két fontos paraméter van a multi_class és a solver , amelyet meg kell adni a Scikit-learn-nek logisztikus regresszió kéréséhez. A multi_class egy bizonyos viselkedést határoz meg. A solver az alkalmazott algoritmust jelöli. Nem minden megoldó párosítható minden multi_class értékkel.

A dokumentáció szerint többosztályos esetben az algoritmus:

  • Az egy-az-összes (OvR) sémát használja, ha a multi_class opció ovr értékre van állítva
  • A keresztentrópia veszteséget használja, ha a multi_class beállítás multinomial. (Jelenleg a multinomial opciót csak az lbfgs, sag, saga és newton-cg megoldók támogatják.)"

🎓 Az itt lévő 'séma' lehet 'ovr' (egy-az-összes) vagy 'multinomial'. Mivel a logisztikus regresszió eredetileg bináris osztályozásra készült, ezek a sémák lehetővé teszik számára a többosztályos feladatok hatékonyabb kezelését. forrás

🎓 A 'solver' az "optimalizációs probléma megoldására használt algoritmust" jelenti. forrás.

A Scikit-learn az alábbi táblázattal mutatja be, miként kezelik a különböző megoldók az eltérő adatszerkezeteket:

megoldók

Gyakorlat - oszd fel az adatot

Az első tanítási próbánkhoz a logisztikus regresszióra koncentrálhatunk, hiszen ezt az előző leckében tanultad. Oszd fel az adataidat tanító és tesztelő csoportokra a train_test_split() meghívásával:

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

Gyakorlat - alkalmazz logisztikus regressziót

Mivel többosztályos esetet használsz, ki kell választanod, hogy milyen sémát és milyen megoldót használj. Használd a LogisticRegression-t többosztályos beállítással és liblinear megoldóval a tanításhoz.

  1. Hozz létre egy logisztikus regressziót, ahol multi_class értéke ovr, a solver pedig 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))
    

    Próbálj ki egy másik megoldót, például az alapértelmezett gyakran használt lbfgs-t.

    Megjegyzés: használd a Pandas ravel függvényét, ha szükséges az adatok kiterítése.

    Az pontosság jó, több mint 80%!

  2. Megnézheted ezt a modellt működés közben, ha megvizsgálsz egy adat sort (#50):

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

    Az eredmény kiírásra kerül:

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

    Próbálj ki egy másik sorszámot és nézd meg az eredményeket

  3. Mélyebbre ásva ellenőrizheted ennek az előrejelzésnek a pontosságát:

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

    Az eredmény kiírásra kerül - az indiai konyha a legvalószínűbb találat:

    0
    indian 0.715851
    chinese 0.229475
    japanese 0.029763
    korean 0.017277
    thai 0.007634

    El tudod magyarázni, miért biztos a modell abban, hogy ez egy indiai konyha?

  4. Részletesebb információért nyomtasd ki a besorolási jelentést, ahogy a regressziós leckékben is tettél:

    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

🚀Kihívás

Ebben a leckében a megtisztított adatoddal építettél egy gépi tanulási modellt, amely egy sor összetevő alapján meg tudja jósolni a nemzeti konyhát. Szánj egy kis időt arra, hogy áttekintsd a Scikit-learn számos lehetőségét az adatok osztályozására. Mélyedj el a 'solver' fogalmában, hogy megértsd, mi zajlik a háttérben.

Előadás utáni kvíz

Áttekintés & Önálló tanulás

Merülj el egy kicsit mélyebben a logisztikus regresszió mögötti matematikában ebben a leckében

Házi feladat

A solver-ek tanulmányozása


Nyilatkozat: Ezt a dokumentumot az AI fordító szolgáltatás, a Co-op Translator segítségével fordítottuk. Bár a pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum a saját nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt a szakmai emberi fordítás igénybevétele. Nem vállalunk felelősséget a fordítás használatából eredő félreértésekért vagy félreértelmezésekért.