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

README.md

Bevezetés az osztályozásba

Ebben a négy leckében a klasszikus gépi tanulás egyik alapvető területét, az osztályozást fogod megismerni. Különböző osztályozási algoritmusokat fogunk alkalmazni egy adatállományon, amely Ázsia és India csodálatos konyháiról szól. Reméljük, éhes vagy!

csak egy csipet!

Ünnepeld a pán-ázsiai konyhákat ezekben a leckékben! Kép: Jen Looper

Az osztályozás a felügyelt tanulás egyik formája, amely sok hasonlóságot mutat a regressziós technikákkal. Ha a gépi tanulás lényege az, hogy adatállományok segítségével értékeket vagy neveket jósoljunk meg, akkor az osztályozás általában két csoportba sorolható: bináris osztályozás és többosztályos osztályozás.

Bevezetés az osztályozásba

🎥 Kattints a fenti képre egy videóért: MIT John Guttag bemutatja az osztályozást

Emlékezz:

  • Lineáris regresszió segített megjósolni a változók közötti kapcsolatokat, és pontos előrejelzéseket készíteni arról, hogy egy új adatpont hol helyezkedne el a vonalhoz viszonyítva. Például meg tudtad jósolni, milyen árú lesz egy tök szeptemberben vagy decemberben.
  • Logisztikus regresszió segített felfedezni "bináris kategóriákat": ezen az árponton ez a tök narancssárga vagy nem narancssárga?

Az osztályozás különböző algoritmusokat használ annak meghatározására, hogy egy adatpont milyen címkét vagy osztályt kapjon. Dolgozzunk ezzel a konyhai adatállománnyal, hogy megállapítsuk, egy összetevőcsoport alapján melyik konyha eredetéhez tartozik.

Előadás előtti kvíz

Ez a lecke elérhető R-ben is!

Bevezetés

Az osztályozás a gépi tanulás kutatójának és adatkutatójának egyik alapvető tevékenysége. Az egyszerű bináris értékek osztályozásától ("ez az e-mail spam vagy nem?") a komplex képosztályozásig és szegmentálásig számítógépes látás segítségével, mindig hasznos az adatokat osztályokba rendezni és kérdéseket feltenni róluk.

Tudományosabb megfogalmazásban az osztályozási módszered egy prediktív modellt hoz létre, amely lehetővé teszi, hogy az input változók és az output változók közötti kapcsolatot feltérképezd.

bináris vs. többosztályos osztályozás

Bináris vs. többosztályos problémák, amelyeket az osztályozási algoritmusok kezelnek. Infografika: Jen Looper

Mielőtt elkezdenénk az adatok tisztítását, vizualizálását és előkészítését a gépi tanulási feladatokhoz, ismerjük meg, hogyan lehet a gépi tanulást különböző módokon alkalmazni az adatok osztályozására.

A statisztikából származó klasszikus gépi tanulási osztályozás olyan jellemzőket használ, mint például dohányos, súly és életkor, hogy meghatározza X betegség kialakulásának valószínűségét. A korábban végzett regressziós gyakorlatokhoz hasonló felügyelt tanulási technikaként az adataid címkézettek, és a gépi tanulási algoritmusok ezeket a címkéket használják az adatok osztályainak (vagy 'jellemzőinek') osztályozására és előrejelzésére, majd egy csoporthoz vagy eredményhez rendelésére.

Képzelj el egy konyhákról szóló adatállományt. Milyen kérdéseket tudna megválaszolni egy többosztályos modell? Milyen kérdéseket tudna megválaszolni egy bináris modell? Mi lenne, ha meg akarnád határozni, hogy egy adott konyha valószínűleg használ-e görögszénát? Mi lenne, ha azt akarnád kideríteni, hogy egy élelmiszerkosárban található csillagánizs, articsóka, karfiol és torma alapján készíthetsz-e egy tipikus indiai ételt?

Őrült rejtélyes kosarak

🎥 Kattints a fenti képre egy videóért. A 'Chopped' című műsor egész koncepciója a 'rejtélyes kosár', ahol a séfeknek egy véletlenszerű összetevőkből kell ételt készíteniük. Biztosan segített volna egy gépi tanulási modell!

Helló 'osztályozó'

Az a kérdés, amit a konyhai adatállománytól szeretnénk megkérdezni, valójában egy többosztályos kérdés, mivel több lehetséges nemzeti konyhával dolgozunk. Egy adag összetevő alapján, melyik osztályba illik az adat?

A Scikit-learn több különböző algoritmust kínál az adatok osztályozására, attól függően, hogy milyen problémát szeretnél megoldani. A következő két leckében megismerhetsz néhányat ezek közül az algoritmusok közül.

Gyakorlat - tisztítsd és egyensúlyozd ki az adataidat

Az első feladat, mielőtt elkezdenénk ezt a projektet, az adatok tisztítása és kiegyensúlyozása, hogy jobb eredményeket érjünk el. Kezdd a notebook.ipynb üres fájllal a mappa gyökerében.

Az első telepítendő csomag az imblearn. Ez egy Scikit-learn csomag, amely lehetővé teszi az adatok jobb kiegyensúlyozását (erről a feladatról hamarosan többet fogsz tanulni).

  1. Az imblearn telepítéséhez futtasd a pip install parancsot, így:

    pip install imblearn
    
  2. Importáld a szükséges csomagokat az adatok importálásához és vizualizálásához, valamint importáld a SMOTE-ot az imblearn-ből.

    import pandas as pd
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import numpy as np
    from imblearn.over_sampling import SMOTE
    

    Most készen állsz az adatok importálására.

  3. A következő feladat az adatok importálása:

    df  = pd.read_csv('../data/cuisines.csv')
    

    A read_csv() segítségével beolvashatod a cusines.csv fájl tartalmát, és elhelyezheted a df változóban.

  4. Ellenőrizd az adatok alakját:

    df.head()
    

    Az első öt sor így néz 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   | 65         | indian  | 0      | 0        | 0     | 0          | 0     | 0            | 0       | 0        | ... | 0       | 0           | 0          | 0                       | 0    | 0    | 0   | 0     | 0      | 0        |
    | 1   | 66         | indian  | 1      | 0        | 0     | 0          | 0     | 0            | 0       | 0        | ... | 0       | 0           | 0          | 0                       | 0    | 0    | 0   | 0     | 0      | 0        |
    | 2   | 67         | indian  | 0      | 0        | 0     | 0          | 0     | 0            | 0       | 0        | ... | 0       | 0           | 0          | 0                       | 0    | 0    | 0   | 0     | 0      | 0        |
    | 3   | 68         | indian  | 0      | 0        | 0     | 0          | 0     | 0            | 0       | 0        | ... | 0       | 0           | 0          | 0                       | 0    | 0    | 0   | 0     | 0      | 0        |
    | 4   | 69         | indian  | 0      | 0        | 0     | 0          | 0     | 0            | 0       | 0        | ... | 0       | 0           | 0          | 0                       | 0    | 0    | 0   | 0     | 1      | 0        |
    
  5. Szerezz információt az adatokról az info() hívásával:

    df.info()
    

    Az eredményed hasonló lesz:

    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 2448 entries, 0 to 2447
    Columns: 385 entries, Unnamed: 0 to zucchini
    dtypes: int64(384), object(1)
    memory usage: 7.2+ MB
    

Gyakorlat - konyhák megismerése

Most kezd igazán érdekessé válni a munka. Fedezzük fel az adatok eloszlását konyhánként.

  1. Ábrázold az adatokat oszlopokként a barh() hívásával:

    df.cuisine.value_counts().plot.barh()
    

    konyhai adatok eloszlása

    Véges számú konyha van, de az adatok eloszlása egyenetlen. Ezt kijavíthatod! Mielőtt ezt megtennéd, fedezz fel egy kicsit többet.

  2. Derítsd ki, mennyi adat áll rendelkezésre konyhánként, és írasd ki:

    thai_df = df[(df.cuisine == "thai")]
    japanese_df = df[(df.cuisine == "japanese")]
    chinese_df = df[(df.cuisine == "chinese")]
    indian_df = df[(df.cuisine == "indian")]
    korean_df = df[(df.cuisine == "korean")]
    
    print(f'thai df: {thai_df.shape}')
    print(f'japanese df: {japanese_df.shape}')
    print(f'chinese df: {chinese_df.shape}')
    print(f'indian df: {indian_df.shape}')
    print(f'korean df: {korean_df.shape}')
    

    Az eredmény így néz ki:

    thai df: (289, 385)
    japanese df: (320, 385)
    chinese df: (442, 385)
    indian df: (598, 385)
    korean df: (799, 385)
    

Összetevők felfedezése

Most mélyebben belemerülhetsz az adatokba, és megtudhatod, melyek a tipikus összetevők konyhánként. Tisztítsd ki az ismétlődő adatokat, amelyek zavart okoznak a konyhák között, hogy jobban megértsd ezt a problémát.

  1. Hozz létre egy create_ingredient() nevű függvényt Pythonban, amely egy összetevő adatkeretet hoz létre. Ez a függvény egy haszontalan oszlop elhagyásával kezd, majd az összetevőket azok számossága szerint rendezi:

    def create_ingredient_df(df):
        ingredient_df = df.T.drop(['cuisine','Unnamed: 0']).sum(axis=1).to_frame('value')
        ingredient_df = ingredient_df[(ingredient_df.T != 0).any()]
        ingredient_df = ingredient_df.sort_values(by='value', ascending=False,
        inplace=False)
        return ingredient_df
    

    Most már használhatod ezt a függvényt, hogy képet kapj a tíz legnépszerűbb összetevőről konyhánként.

  2. Hívd meg a create_ingredient() függvényt, és ábrázold az adatokat a barh() hívásával:

    thai_ingredient_df = create_ingredient_df(thai_df)
    thai_ingredient_df.head(10).plot.barh()
    

    thai

  3. Ugyanezt tedd meg a japán adatokkal:

    japanese_ingredient_df = create_ingredient_df(japanese_df)
    japanese_ingredient_df.head(10).plot.barh()
    

    japán

  4. Most a kínai összetevők:

    chinese_ingredient_df = create_ingredient_df(chinese_df)
    chinese_ingredient_df.head(10).plot.barh()
    

    kínai

  5. Ábrázold az indiai összetevőket:

    indian_ingredient_df = create_ingredient_df(indian_df)
    indian_ingredient_df.head(10).plot.barh()
    

    indiai

  6. Végül ábrázold a koreai összetevőket:

    korean_ingredient_df = create_ingredient_df(korean_df)
    korean_ingredient_df.head(10).plot.barh()
    

    koreai

  7. Most hagyd el a leggyakoribb összetevőket, amelyek zavart okoznak a különböző konyhák között, a drop() hívásával:

    Mindenki szereti a rizst, fokhagymát és gyömbért!

    feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1)
    labels_df = df.cuisine #.unique()
    feature_df.head()
    

Az adatállomány kiegyensúlyozása

Most, hogy megtisztítottad az adatokat, használd a SMOTE - "Synthetic Minority Over-sampling Technique" - technikát az adatok kiegyensúlyozására.

  1. Hívd meg a fit_resample() függvényt, amely interpolációval új mintákat generál.

    oversample = SMOTE()
    transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df)
    

    Az adatok kiegyensúlyozásával jobb eredményeket érhetsz el az osztályozás során. Gondolj egy bináris osztályozásra. Ha az adataid többsége egy osztályba tartozik, a gépi tanulási modell gyakrabban fogja azt az osztályt előre jelezni, egyszerűen azért, mert több adat áll rendelkezésre róla. Az adatok kiegyensúlyozása segít eltávolítani ezt az egyensúlyhiányt.

  2. Most ellenőrizheted az összetevők címkéinek számát:

    print(f'new label count: {transformed_label_df.value_counts()}')
    print(f'old label count: {df.cuisine.value_counts()}')
    

    Az eredményed így néz ki:

    new label count: korean      799
    chinese     799
    indian      799
    japanese    799
    thai        799
    Name: cuisine, dtype: int64
    old label count: korean      799
    indian      598
    chinese     442
    japanese    320
    thai        289
    Name: cuisine, dtype: int64
    

    Az adatok szépek, tiszták, kiegyensúlyozottak és nagyon ínycsiklandóak!

  3. Az utolsó lépés az, hogy a kiegyensúlyozott adatokat, beleértve a címkéket és jellemzőket, egy új adatkeretbe mentsd, amelyet fájlba exportálhatsz:

    transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer')
    
  4. Még egyszer megnézheted az adatokat a transformed_df.head() és transformed_df.info() hívásával. Ments egy másolatot ezekről az adatokból, hogy a jövőbeli leckékben használhasd:

    transformed_df.head()
    transformed_df.info()
    transformed_df.to_csv("../data/cleaned_cuisines.csv")
    

    Ez a friss CSV most megtalálható az adatállomány mappájának gyökerében.


🚀Kihívás

Ez a tananyag számos érdekes adatállományt tartalmaz. Nézd át a data mappákat, és nézd meg, hogy van-e olyan adatállomány, amely bináris vagy többosztályos osztályozásra alkalmas? Milyen kérdéseket tennél fel ennek az adatállománynak?

Előadás utáni kvíz

Áttekintés és önálló tanulás

Fedezd fel a SMOTE API-t. Milyen felhasználási esetekre a legalkalmasabb? Milyen problémákat old meg?

Feladat

Fedezd fel az osztályozási módszereket


Felelősség kizárása:
Ez a dokumentum az AI fordítási szolgáltatás Co-op Translator segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Fontos információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.