|
|
6 days ago | |
|---|---|---|
| .. | ||
| solution | 6 days ago | |
| README.md | 6 days ago | |
| assignment.md | 3 months ago | |
| notebook.ipynb | 3 months ago | |
README.md
Sissejuhatus klassifikatsiooni
Nendes neljas õppetunnis uurid klassikalise masinõppe põhivaldkonda - klassifikatsiooni. Vaatame erinevate klassifikatsioonialgoritmide kasutamist andmekogumiga, mis käsitleb Aasia ja India suurepäraseid kööke. Loodetavasti oled näljane!
Tähista pan-Aasia kööke nendes õppetundides! Pilt: Jen Looper
Klassifikatsioon on juhendatud õppe vorm, mis sarnaneb paljuski regressioonitehnikatega. Kui masinõpe seisneb väärtuste või nimede ennustamises andmekogumite abil, siis klassifikatsioon jaguneb üldiselt kahte rühma: binaarne klassifikatsioon ja mitmeklassiline klassifikatsioon.
🎥 Klõpsa ülaloleval pildil, et vaadata videot: MIT-i John Guttag tutvustab klassifikatsiooni
Pea meeles:
- Lineaarne regressioon aitas sul ennustada muutujate vahelisi seoseid ja teha täpseid prognoose, kuhu uus andmepunkt selle joone suhtes paigutub. Näiteks võisid ennustada kõrvitsa hinda septembris vs. detsembris.
- Logistiline regressioon aitas sul avastada "binaarseid kategooriaid": selle hinnapunkti juures, kas kõrvits on oranž või mitte-oranž?
Klassifikatsioon kasutab erinevaid algoritme, et määrata andmepunkti silt või klass. Töötame selle köögiandmetega, et näha, kas koostisosade rühma jälgides suudame kindlaks teha selle päritoluköögi.
Eel-loengu viktoriin
See õppetund on saadaval ka R-is!
Sissejuhatus
Klassifikatsioon on üks masinõppe teadlase ja andmeteadlase põhitegevusi. Alates binaarse väärtuse ("kas see e-kiri on rämpspost või mitte?") lihtsast klassifikatsioonist kuni keeruka pildiklassifikatsiooni ja segmentatsioonini arvutinägemise abil, on alati kasulik andmeid klassidesse sorteerida ja neilt küsimusi küsida.
Teaduslikumalt öeldes loob sinu klassifikatsioonimeetod ennustava mudeli, mis võimaldab kaardistada sisendmuutujate ja väljundmuutujate vahelisi seoseid.
Binaarsed vs. mitmeklassilised probleemid, mida klassifikatsioonialgoritmid peavad lahendama. Infograafika: Jen Looper
Enne kui alustame andmete puhastamise, visualiseerimise ja ML-ülesannete ettevalmistamise protsessi, õpime veidi erinevaid viise, kuidas masinõpet saab kasutada andmete klassifitseerimiseks.
Klassifikatsioon, mis on tuletatud statistikast, kasutab klassikalise masinõppe raames tunnuseid, nagu smoker, weight ja age, et määrata tõenäosust X haiguse tekkeks. Juhendatud õppe tehnikana, mis sarnaneb varasemate regressiooniharjutustega, on sinu andmed märgistatud ja ML-algoritmid kasutavad neid silte, et klassifitseerida ja ennustada andmekogumi klasse (või 'tunnuseid') ning määrata need rühma või tulemusse.
✅ Kujuta hetkeks ette andmekogumit köökide kohta. Mida võiks mitmeklassiline mudel vastata? Mida võiks binaarne mudel vastata? Mis siis, kui tahaksid kindlaks teha, kas antud köök kasutab tõenäoliselt lambaläätse? Mis siis, kui tahaksid näha, kas saad kingitud toidukotist, mis sisaldab tähtaniisi, artišokki, lillkapsast ja mädarõigast, valmistada tüüpilise India roa?
🎥 Klõpsa ülaloleval pildil, et vaadata videot. Saate 'Chopped' kogu idee seisneb 'müstilises korvis', kus kokad peavad valmistama roa juhuslikult valitud koostisosadest. Kindlasti aitaks ML-mudel!
Tere, 'klassifikaator'
Küsimus, mida tahame selle köögiandmekogumi kohta küsida, on tegelikult mitmeklassiline küsimus, kuna meil on mitu võimalikku rahvuskööki, millega töötada. Arvestades koostisosade kogumit, millisesse nendest paljudest klassidest andmed sobivad?
Scikit-learn pakub mitmeid erinevaid algoritme andmete klassifitseerimiseks, sõltuvalt probleemist, mida soovid lahendada. Järgmistes kahes õppetunnis õpid mitmeid neist algoritmidest.
Harjutus - puhasta ja tasakaalusta oma andmed
Esimene ülesanne enne projekti alustamist on andmete puhastamine ja tasakaalustamine, et saada paremaid tulemusi. Alusta kaustas oleva tühja notebook.ipynb failiga.
Esimene asi, mida installida, on imblearn. See on Scikit-learn pakett, mis võimaldab sul andmeid paremini tasakaalustada (õpid sellest ülesandest rohkem hetkega).
-
imblearni installimiseks käivitapip installjärgmiselt:pip install imblearn -
Impordi paketid, mida vajad andmete importimiseks ja visualiseerimiseks, samuti impordi
SMOTEimblearnist.import pandas as pd import matplotlib.pyplot as plt import matplotlib as mpl import numpy as np from imblearn.over_sampling import SMOTENüüd oled valmis andmeid importima.
-
Järgmine ülesanne on andmete importimine:
df = pd.read_csv('../data/cuisines.csv')read_csv()abil loetakse csv-faili cusines.csv sisu ja paigutatakse see muutujassedf. -
Kontrolli andmete kuju:
df.head()Esimesed viis rida näevad välja sellised:
| | 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 | -
Saa andmete kohta infot, kutsudes
info():df.info()Väljund sarnaneb:
<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
Harjutus - köökide tundmaõppimine
Nüüd muutub töö huvitavamaks. Uurime andmete jaotust köökide kaupa.
-
Joonista andmed ribadena, kutsudes
barh():df.cuisine.value_counts().plot.barh()Kööke on piiratud arv, kuid andmete jaotus on ebaühtlane. Saad selle parandada! Enne seda uurime veidi rohkem.
-
Uuri, kui palju andmeid on saadaval köögi kohta, ja prindi see välja:
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äljund näeb välja selline:
thai df: (289, 385) japanese df: (320, 385) chinese df: (442, 385) indian df: (598, 385) korean df: (799, 385)
Koostisosade avastamine
Nüüd saad sügavamale andmetesse kaevuda ja teada saada, millised on tüüpilised koostisosad köögi kaupa. Peaksid eemaldama korduvad andmed, mis tekitavad segadust köökide vahel, nii et uurime seda probleemi.
-
Loo Pythonis funktsioon
create_ingredient(), et luua koostisosade andmeraam. See funktsioon alustab ebaolulise veeru eemaldamisega ja sorteerib koostisosad nende arvu järgi: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_dfNüüd saad selle funktsiooni abil aimu kümnest kõige populaarsemast koostisosast köögi kaupa.
-
Kutsu
create_ingredient()ja joonista see, kutsudesbarh():thai_ingredient_df = create_ingredient_df(thai_df) thai_ingredient_df.head(10).plot.barh() -
Tee sama jaapani andmete jaoks:
japanese_ingredient_df = create_ingredient_df(japanese_df) japanese_ingredient_df.head(10).plot.barh() -
Nüüd hiina koostisosade jaoks:
chinese_ingredient_df = create_ingredient_df(chinese_df) chinese_ingredient_df.head(10).plot.barh() -
Joonista india koostisosad:
indian_ingredient_df = create_ingredient_df(indian_df) indian_ingredient_df.head(10).plot.barh() -
Lõpuks joonista korea koostisosad:
korean_ingredient_df = create_ingredient_df(korean_df) korean_ingredient_df.head(10).plot.barh() -
Nüüd eemalda kõige levinumad koostisosad, mis tekitavad segadust erinevate köökide vahel, kutsudes
drop():Kõigile meeldib riis, küüslauk ja ingver!
feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) labels_df = df.cuisine #.unique() feature_df.head()
Tasakaalusta andmekogum
Nüüd, kui oled andmed puhastanud, kasuta SMOTE - "Synthetic Minority Over-sampling Technique" - et neid tasakaalustada.
-
Kutsu
fit_resample(), see strateegia genereerib uusi näidiseid interpolatsiooni teel.oversample = SMOTE() transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df)Andmete tasakaalustamine annab paremaid tulemusi nende klassifitseerimisel. Mõtle binaarsele klassifikatsioonile. Kui enamik sinu andmetest kuulub ühte klassi, ennustab ML-mudel seda klassi sagedamini, lihtsalt seetõttu, et selle kohta on rohkem andmeid. Andmete tasakaalustamine eemaldab selle tasakaalustamatuse.
-
Nüüd saad kontrollida silte koostisosa kohta:
print(f'new label count: {transformed_label_df.value_counts()}') print(f'old label count: {df.cuisine.value_counts()}')Väljund näeb välja selline:
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: int64Andmed on kenad ja puhtad, tasakaalustatud ja väga maitsvad!
-
Viimane samm on salvestada tasakaalustatud andmed, sealhulgas sildid ja tunnused, uude andmeraami, mida saab eksportida faili:
transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') -
Võid andmeid veel kord vaadata, kasutades
transformed_df.head()jatransformed_df.info(). Salvesta nende andmete koopia, et kasutada tulevastes õppetundides:transformed_df.head() transformed_df.info() transformed_df.to_csv("../data/cleaned_cuisines.csv")See värske CSV-fail on nüüd leitav juurandmete kaustas.
🚀Väljakutse
See õppekava sisaldab mitmeid huvitavaid andmekogumeid. Uuri data kaustu ja vaata, kas mõni sisaldab andmekogumeid, mis sobiksid binaarseks või mitmeklassiliseks klassifikatsiooniks? Milliseid küsimusi küsiksid selle andmekogumi kohta?
Järel-loengu viktoriin
Ülevaade ja iseseisev õppimine
Uuri SMOTE API-d. Millisteks kasutusjuhtudeks see kõige paremini sobib? Milliseid probleeme see lahendab?
Ülesanne
Uuri klassifikatsioonimeetodeid
Lahtiütlus:
See dokument on tõlgitud AI tõlketeenuse Co-op Translator abil. Kuigi püüame tagada täpsust, palume arvestada, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Algne dokument selle algses keeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitame kasutada professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tulenevate arusaamatuste või valesti tõlgenduste eest.









