|
3 weeks ago | |
---|---|---|
.. | ||
solution | 3 weeks ago | |
README.md | 3 weeks ago | |
assignment.md | 3 weeks ago | |
notebook.ipynb | 3 weeks ago |
README.md
Úvod do klasifikácie
V týchto štyroch lekciách sa budete venovať základnému zameraniu klasického strojového učenia - klasifikácii. Prejdeme si používanie rôznych klasifikačných algoritmov s datasetom o všetkých úžasných kuchyniach Ázie a Indie. Dúfam, že máte chuť na jedlo!
Oslávte panázijské kuchyne v týchto lekciách! Obrázok od Jen Looper
Klasifikácia je forma supervised learning, ktorá má veľa spoločného s regresnými technikami. Ak je strojové učenie o predpovedaní hodnôt alebo názvov vecí pomocou datasetov, potom klasifikácia všeobecne spadá do dvoch skupín: binárna klasifikácia a multiklasová klasifikácia.
🎥 Kliknite na obrázok vyššie pre video: MIT's John Guttag predstavuje klasifikáciu
Pamätajte:
- Lineárna regresia vám pomohla predpovedať vzťahy medzi premennými a robiť presné predpovede o tom, kde nový dátový bod spadne vo vzťahu k tejto čiare. Napríklad ste mohli predpovedať aká bude cena tekvice v septembri vs. decembri.
- Logistická regresia vám pomohla objaviť "binárne kategórie": pri tejto cenovej hladine, je táto tekvica oranžová alebo nie-oranžová?
Klasifikácia používa rôzne algoritmy na určenie iných spôsobov, ako určiť označenie alebo triedu dátového bodu. Poďme pracovať s týmto datasetom o kuchyniach, aby sme zistili, či na základe skupiny ingrediencií dokážeme určiť jej pôvodnú kuchyňu.
Kvíz pred lekciou
Táto lekcia je dostupná v R!
Úvod
Klasifikácia je jednou zo základných aktivít výskumníka strojového učenia a dátového vedca. Od základnej klasifikácie binárnej hodnoty ("je tento email spam alebo nie?") až po komplexnú klasifikáciu a segmentáciu obrázkov pomocou počítačového videnia, je vždy užitočné vedieť triediť dáta do tried a klásť im otázky.
Ak to vyjadríme vedeckejšie, vaša klasifikačná metóda vytvára prediktívny model, ktorý vám umožňuje mapovať vzťah medzi vstupnými premennými a výstupnými premennými.
Binárne vs. multiklasové problémy, ktoré musia klasifikačné algoritmy riešiť. Infografika od Jen Looper
Predtým, než začneme proces čistenia našich dát, ich vizualizácie a prípravy na úlohy strojového učenia, poďme sa trochu naučiť o rôznych spôsoboch, akými môže byť strojové učenie využité na klasifikáciu dát.
Odvodené zo štatistiky, klasifikácia pomocou klasického strojového učenia používa vlastnosti, ako smoker
, weight
a age
, na určenie pravdepodobnosti rozvoja X choroby. Ako technika supervised learning podobná regresným cvičeniam, ktoré ste vykonávali skôr, vaše dáta sú označené a algoritmy strojového učenia používajú tieto označenia na klasifikáciu a predpovedanie tried (alebo 'vlastností') datasetu a ich priradenie do skupiny alebo výsledku.
✅ Predstavte si dataset o kuchyniach. Aké otázky by mohol multiklasový model zodpovedať? Aké otázky by mohol zodpovedať binárny model? Čo ak by ste chceli určiť, či daná kuchyňa pravdepodobne používa senovku grécku? Čo ak by ste chceli zistiť, či by ste z darovaného nákupného košíka plného badiánu, artičokov, karfiolu a chrenu mohli vytvoriť typické indické jedlo?
🎥 Kliknite na obrázok vyššie pre video. Celý koncept relácie 'Chopped' je o 'tajomnom košíku', kde šéfkuchári musia pripraviť jedlo z náhodného výberu ingrediencií. Určite by model strojového učenia pomohol!
Ahoj 'klasifikátor'
Otázka, ktorú chceme položiť tomuto datasetu o kuchyniach, je vlastne multiklasová otázka, pretože máme niekoľko potenciálnych národných kuchýň, s ktorými môžeme pracovať. Na základe dávky ingrediencií, do ktorej z týchto mnohých tried budú dáta patriť?
Scikit-learn ponúka niekoľko rôznych algoritmov na klasifikáciu dát, v závislosti od typu problému, ktorý chcete vyriešiť. V nasledujúcich dvoch lekciách sa naučíte o niekoľkých z týchto algoritmov.
Cvičenie - vyčistite a vyvážte svoje dáta
Prvým krokom pred začatím projektu je vyčistiť a vyvážiť svoje dáta, aby ste dosiahli lepšie výsledky. Začnite s prázdnym súborom notebook.ipynb v koreňovom adresári tejto zložky.
Prvá vec, ktorú je potrebné nainštalovať, je imblearn. Toto je balík Scikit-learn, ktorý vám umožní lepšie vyvážiť dáta (o tejto úlohe sa dozviete viac za chvíľu).
-
Na inštaláciu
imblearn
spustitepip install
, takto:pip install imblearn
-
Importujte balíky, ktoré potrebujete na importovanie a vizualizáciu dát, tiež importujte
SMOTE
zimblearn
.import pandas as pd import matplotlib.pyplot as plt import matplotlib as mpl import numpy as np from imblearn.over_sampling import SMOTE
Teraz ste pripravení na importovanie dát.
-
Ďalším krokom bude importovanie dát:
df = pd.read_csv('../data/cuisines.csv')
Použitie
read_csv()
načíta obsah súboru cusines.csv a uloží ho do premennejdf
. -
Skontrolujte tvar dát:
df.head()
Prvých päť riadkov vyzerá 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 | 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 |
-
Získajte informácie o týchto dátach volaním
info()
:df.info()
Vaša výstupná podoba sa podobá:
<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
Cvičenie - učenie o kuchyniach
Teraz sa práca začína stávať zaujímavejšou. Poďme objaviť distribúciu dát podľa kuchyne.
-
Vykreslite dáta ako stĺpce volaním
barh()
:df.cuisine.value_counts().plot.barh()
Existuje konečný počet kuchýň, ale distribúcia dát je nerovnomerná. Môžete to opraviť! Predtým však trochu preskúmajte.
-
Zistite, koľko dát je dostupných na kuchyňu a vytlačte to:
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}')
Výstup vyzerá takto:
thai df: (289, 385) japanese df: (320, 385) chinese df: (442, 385) indian df: (598, 385) korean df: (799, 385)
Objavovanie ingrediencií
Teraz môžete ísť hlbšie do dát a zistiť, aké sú typické ingrediencie pre jednotlivé kuchyne. Mali by ste vyčistiť opakujúce sa dáta, ktoré vytvárajú zmätok medzi kuchyňami, takže sa poďme dozvedieť o tomto probléme.
-
Vytvorte funkciu
create_ingredient()
v Pythone na vytvorenie dataframe ingrediencií. Táto funkcia začne odstránením nepotrebného stĺpca a triedením ingrediencií podľa ich počtu: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
Teraz môžete použiť túto funkciu na získanie predstavy o desiatich najpopulárnejších ingredienciách podľa kuchyne.
-
Zavolajte
create_ingredient()
a vykreslite to volanímbarh()
:thai_ingredient_df = create_ingredient_df(thai_df) thai_ingredient_df.head(10).plot.barh()
-
Urobte to isté pre japonské dáta:
japanese_ingredient_df = create_ingredient_df(japanese_df) japanese_ingredient_df.head(10).plot.barh()
-
Teraz pre čínske ingrediencie:
chinese_ingredient_df = create_ingredient_df(chinese_df) chinese_ingredient_df.head(10).plot.barh()
-
Vykreslite indické ingrediencie:
indian_ingredient_df = create_ingredient_df(indian_df) indian_ingredient_df.head(10).plot.barh()
-
Nakoniec vykreslite kórejské ingrediencie:
korean_ingredient_df = create_ingredient_df(korean_df) korean_ingredient_df.head(10).plot.barh()
-
Teraz odstráňte najbežnejšie ingrediencie, ktoré vytvárajú zmätok medzi rôznymi kuchyňami, volaním
drop()
:Každý miluje ryžu, cesnak a zázvor!
feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) labels_df = df.cuisine #.unique() feature_df.head()
Vyváženie datasetu
Teraz, keď ste vyčistili dáta, použite SMOTE - "Synthetic Minority Over-sampling Technique" - na ich vyváženie.
-
Zavolajte
fit_resample()
, táto stratégia generuje nové vzorky interpoláciou.oversample = SMOTE() transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df)
Vyvážením dát dosiahnete lepšie výsledky pri ich klasifikácii. Premýšľajte o binárnej klasifikácii. Ak väčšina vašich dát patrí do jednej triedy, model strojového učenia bude predpovedať túto triedu častejšie, len preto, že je pre ňu viac dát. Vyváženie dát odstráni túto nerovnováhu.
-
Teraz môžete skontrolovať počet označení na ingredienciu:
print(f'new label count: {transformed_label_df.value_counts()}') print(f'old label count: {df.cuisine.value_counts()}')
Vaša výstupná podoba vyzerá takto:
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
Dáta sú pekné, čisté, vyvážené a veľmi chutné!
-
Posledným krokom je uloženie vyvážených dát, vrátane označení a vlastností, do nového dataframe, ktorý môže byť exportovaný do súboru:
transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer')
-
Môžete sa ešte raz pozrieť na dáta pomocou
transformed_df.head()
atransformed_df.info()
. Uložte kópiu týchto dát na použitie v budúcich lekciách:transformed_df.head() transformed_df.info() transformed_df.to_csv("../data/cleaned_cuisines.csv")
Tento nový CSV súbor sa teraz nachádza v koreňovom adresári dát.
🚀Výzva
Tento učebný plán obsahuje niekoľko zaujímavých datasetov. Prezrite si zložky data
a zistite, či niektoré obsahujú datasety, ktoré by boli vhodné pre binárnu alebo multiklasovú klasifikáciu? Aké otázky by ste mohli položiť tomuto datasetu?
Kvíz po lekcii
Prehľad a samostatné štúdium
Preskúmajte API SMOTE. Pre aké prípady použitia je najlepšie? Aké problémy rieši?
Zadanie
Preskúmajte metódy klasifikácie
Upozornenie:
Tento dokument bol preložený pomocou služby AI prekladu Co-op Translator. Hoci sa snažíme o presnosť, prosím, berte na vedomie, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho pôvodnom 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 interpretácie vyplývajúce z použitia tohto prekladu.