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/hr/4-Classification/1-Introduction
leestott ffd4047095
🌐 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 2 weeks ago

README.md

Uvod u klasifikaciju

U ovih četiri lekcije istražit ćete temeljni fokus klasičnog strojnog učenja - klasifikaciju. Proći ćemo kroz korištenje različitih algoritama klasifikacije s datasetom o svim briljantnim kuhinjama Azije i Indije. Nadamo se da ste gladni!

samo prstohvat!

Proslavite pan-azijske kuhinje u ovim lekcijama! Slika: Jen Looper

Klasifikacija je oblik nadziranog učenja koji ima mnogo zajedničkog s tehnikama regresije. Ako je strojno učenje usmjereno na predviđanje vrijednosti ili naziva stvari pomoću podataka, tada se klasifikacija općenito dijeli u dvije skupine: binarna klasifikacija i višeklasna klasifikacija.

Uvod u klasifikaciju

🎥 Kliknite na sliku iznad za video: John Guttag s MIT-a predstavlja klasifikaciju

Zapamtite:

  • Linearna regresija pomogla vam je predvidjeti odnose između varijabli i napraviti točna predviđanja o tome gdje će novi podatak pasti u odnosu na tu liniju. Na primjer, mogli ste predvidjeti koja će cijena bundeve biti u rujnu u usporedbi s prosincem.
  • Logistička regresija pomogla vam je otkriti "binarne kategorije": na ovoj cjenovnoj razini, je li bundeva narančasta ili nije narančasta?

Klasifikacija koristi različite algoritme za određivanje drugih načina dodjeljivanja oznake ili klase podatkovnoj točki. Radit ćemo s ovim podacima o kuhinjama kako bismo vidjeli možemo li, promatrajući skup sastojaka, odrediti iz koje kuhinje potječu.

Kviz prije predavanja

Ova lekcija dostupna je i na R jeziku!

Uvod

Klasifikacija je jedna od temeljnih aktivnosti istraživača strojnog učenja i podatkovnih znanstvenika. Od osnovne klasifikacije binarne vrijednosti ("je li ovaj email spam ili nije?"), do složene klasifikacije i segmentacije slika pomoću računalnog vida, uvijek je korisno moći razvrstati podatke u klase i postavljati pitanja o njima.

Da bismo proces izrazili na znanstveniji način, vaša metoda klasifikacije stvara prediktivni model koji vam omogućuje mapiranje odnosa između ulaznih varijabli i izlaznih varijabli.

binarna vs. višeklasna klasifikacija

Binarni i višeklasni problemi za algoritme klasifikacije. Infografika: Jen Looper

Prije nego što započnemo proces čišćenja podataka, njihove vizualizacije i pripreme za zadatke strojnog učenja, naučimo malo više o različitim načinima na koje se strojno učenje može koristiti za klasifikaciju podataka.

Izvedena iz statistike, klasifikacija pomoću klasičnog strojnog učenja koristi značajke, poput smoker, weight i age, kako bi odredila vjerojatnost razvoja određene bolesti. Kao tehnika nadziranog učenja slična regresijskim vježbama koje ste ranije izvodili, vaši podaci su označeni, a algoritmi strojnog učenja koriste te oznake za klasifikaciju i predviđanje klasa (ili 'značajki') skupa podataka te njihovo dodjeljivanje grupi ili ishodu.

Zastanite na trenutak i zamislite skup podataka o kuhinjama. Na što bi višeklasni model mogao odgovoriti? Na što bi binarni model mogao odgovoriti? Što ako želite odrediti koristi li određena kuhinja vjerojatno piskavicu? Što ako želite vidjeti možete li, s obzirom na vrećicu namirnica punu zvjezdastog anisa, artičoka, cvjetače i hrena, pripremiti tipično indijsko jelo?

Lude misteriozne košare

🎥 Kliknite na sliku iznad za video. Cijela premisa emisije 'Chopped' je 'misteriozna košara' u kojoj kuhari moraju pripremiti jelo od nasumično odabranih sastojaka. Sigurno bi ML model pomogao!

Pozdrav 'klasifikatoru'

Pitanje koje želimo postaviti ovom skupu podataka o kuhinjama zapravo je višeklasno pitanje, jer imamo nekoliko potencijalnih nacionalnih kuhinja s kojima radimo. S obzirom na skup sastojaka, kojoj od ovih mnogih klasa će podaci pripadati?

Scikit-learn nudi nekoliko različitih algoritama za klasifikaciju podataka, ovisno o vrsti problema koji želite riješiti. U sljedeće dvije lekcije naučit ćete o nekoliko tih algoritama.

Vježba - očistite i uravnotežite svoje podatke

Prvi zadatak prije početka ovog projekta je očistiti i uravnotežiti svoje podatke kako biste dobili bolje rezultate. Počnite s praznom datotekom notebook.ipynb u korijenu ove mape.

Prvo što trebate instalirati je imblearn. Ovo je Scikit-learn paket koji će vam omogućiti bolje uravnoteženje podataka (o ovom zadatku ćete naučiti više za trenutak).

  1. Za instalaciju imblearn, pokrenite pip install, ovako:

    pip install imblearn
    
  2. Uvezite pakete potrebne za uvoz i vizualizaciju podataka, također uvezite SMOTE iz imblearn.

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

    Sada ste spremni za uvoz podataka.

  3. Sljedeći zadatak je uvoz podataka:

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

    Korištenje read_csv() učitat će sadržaj csv datoteke cusines.csv i smjestiti ga u varijablu df.

  4. Provjerite oblik podataka:

    df.head()
    

    Prvih pet redaka izgleda ovako:

    |     | 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. Dobijte informacije o ovim podacima pozivom info():

    df.info()
    

    Vaš izlaz izgleda ovako:

    <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
    

Vježba - učenje o kuhinjama

Sada rad postaje zanimljiviji. Otkrijmo distribuciju podataka po kuhinji.

  1. Prikaz podataka kao stupaca pozivom barh():

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

    distribucija podataka o kuhinjama

    Postoji ograničen broj kuhinja, ali distribucija podataka je neujednačena. To možete popraviti! Prije toga, istražite malo više.

  2. Saznajte koliko je podataka dostupno po kuhinji i ispišite ih:

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

    izlaz izgleda ovako:

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

Otkrijte sastojke

Sada možete dublje istražiti podatke i saznati koji su tipični sastojci po kuhinji. Trebali biste očistiti ponavljajuće podatke koji stvaraju konfuziju između kuhinja, pa naučimo o ovom problemu.

  1. Napravite funkciju create_ingredient() u Pythonu za stvaranje dataframea sastojaka. Ova funkcija će započeti uklanjanjem nevažnog stupca i sortirati sastojke prema njihovom broju:

    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
    

    Sada možete koristiti tu funkciju kako biste dobili ideju o deset najpopularnijih sastojaka po kuhinji.

  2. Pozovite create_ingredient() i prikažite rezultate pozivom barh():

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

    tajlandska

  3. Učinite isto za japanske podatke:

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

    japanska

  4. Sada za kineske sastojke:

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

    kineska

  5. Prikažite indijske sastojke:

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

    indijska

  6. Na kraju, prikažite korejske sastojke:

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

    korejska

  7. Sada uklonite najčešće sastojke koji stvaraju konfuziju između različitih kuhinja, pozivom drop():

    Svi vole rižu, češnjak i đumbir!

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

Uravnotežite skup podataka

Sada kada ste očistili podatke, koristite SMOTE - "Tehnika sintetičkog manjinskog uzorkovanja" - za uravnoteženje podataka.

  1. Pozovite fit_resample(), ova strategija generira nove uzorke interpolacijom.

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

    Uravnoteženjem podataka, postići ćete bolje rezultate pri klasifikaciji. Razmislite o binarnoj klasifikaciji. Ako većina vaših podataka pripada jednoj klasi, ML model će češće predviđati tu klasu, samo zato što za nju ima više podataka. Uravnoteženje podataka uklanja ovu neravnotežu.

  2. Sada možete provjeriti broj oznaka po sastojku:

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

    Vaš izlaz izgleda ovako:

    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
    

    Podaci su sada čisti, uravnoteženi i vrlo ukusni!

  3. Posljednji korak je spremanje uravnoteženih podataka, uključujući oznake i značajke, u novi dataframe koji se može izvesti u datoteku:

    transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer')
    
  4. Možete još jednom pogledati podatke koristeći transformed_df.head() i transformed_df.info(). Spremite kopiju ovih podataka za korištenje u budućim lekcijama:

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

    Ovaj svježi CSV sada se nalazi u korijenskoj mapi podataka.


🚀Izazov

Ovaj kurikulum sadrži nekoliko zanimljivih skupova podataka. Pregledajte mape data i provjerite sadrže li neki skupovi podataka koji bi bili prikladni za binarnu ili višeklasnu klasifikaciju? Koja biste pitanja postavili ovom skupu podataka?

Kviz nakon predavanja

Pregled i samostalno učenje

Istražite SMOTE-ov API. Za koje slučajeve upotrebe je najprikladniji? Koje probleme rješava?

Zadatak

Istrazite metode klasifikacije


Odricanje od odgovornosti:
Ovaj dokument je preveden korištenjem AI usluge za prevođenje Co-op Translator. Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati mjerodavnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane stručnjaka. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogrešna tumačenja koja mogu proizaći iz korištenja ovog prijevoda.