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/tl/4-Classification/2-Classifiers-1
localizeflow[bot] b51d0fdbbd
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) 5 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) 5 months ago
notebook.ipynb 🌐 Update translations via Co-op Translator 11 months ago

README.md

Cuisine classifiers 1

Sa leksiyong ito, gagamitin mo ang dataset na iyong in-save mula sa nakaraang leksiyon na puno ng balanseng, malinis na datos tungkol sa mga lutuin.

Gagamitin mo ang dataset na ito sa iba't ibang classifiers upang hulaan ang isang pambansang lutuin batay sa isang grupo ng mga sangkap. Habang ginagawa ito, matututo ka pa tungkol sa ilang paraan kung paano magagamit ang mga algorithm para sa mga classification na gawain.

Pre-lecture quiz

Preparation

Kung natapos mo na ang Lesson 1, siguraduhing may cleaned_cuisines.csv na file sa root /data folder para sa apat na leksiyon na ito.

Exercise - hulaan ang isang pambansang lutuin

  1. Sa paglulunsad ng leksiyon na ito sa notebook.ipynb folder, i-import ang file kasama ng Pandas library:

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

    Ganito ang hitsura ng datos:

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. Ngayon, mag-import ng ilan pang mga library:

    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. Hatiin ang X at y coordinates sa dalawang dataframes para sa training. Ang cuisine ay pwedeng gawing labels dataframe:

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

    Ganito ang magiging hitsura nito:

    0    indian
    1    indian
    2    indian
    3    indian
    4    indian
    Name: cuisine, dtype: object
    
  3. I-drop ang Unnamed: 0 na column at ang cuisine na column gamit ang drop(). I-save ang natitirang data bilang trainable features:

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

    Ganito ang hitsura ng iyong mga features:

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

Handa ka nang i-train ang iyong modelo!

Pagpili ng iyong classifier

Ngayon na malinis at handa na ang iyong datos para sa training, kailangan mong pumili kung anong algorithm ang gagamitin para sa gawain.

Pinasasaklaw ng Scikit-learn ang classification sa ilalim ng Supervised Learning, at sa kategoryang iyon makikita mo ang maraming paraan upang magklasipika. Ang iba't ibang uri ay nakakahilo sa unang tingin. Kasama sa mga sumusunod na paraan ang ibat ibang teknik para sa classification:

  • Linear Models
  • Support Vector Machines
  • Stochastic Gradient Descent
  • Nearest Neighbors
  • Gaussian Processes
  • Decision Trees
  • Ensemble methods (voting Classifier)
  • Multiclass at multioutput algorithms (multiclass at multilabel classification, multiclass-multioutput classification)

Maaari mo ring gamitin ang neural networks para magklasipika ng datos, ngunit ito ay lampas sa saklaw ng leksiyong ito.

Alin ang classifier na pipiliin?

Kaya, alin nga ba ang classifier na pipiliin mo? Madalas, ang pagtakbo ng ilan at paghahanap ng magandang resulta ay isang paraan ng pagsubok. Nagbibigay ang Scikit-learn ng side-by-side comparison sa isang ginawa na dataset, na ikinukumpara ang KNeighbors, SVC sa dalawang paraan, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB at QuadraticDiscrinationAnalysis, na ipinapakita ang mga resulta na na-visualize:

comparison of classifiers

Mga plot na ginawa mula sa dokumentasyon ng Scikit-learn

Nilulutas ng AutoML ang problemang ito nang maayos sa pamamagitan ng pagpapatakbo ng mga paghahambing na ito sa cloud, na nagbibigay-daan sa iyo upang piliin ang pinakamahusay na algorithm para sa iyong datos. Subukan ito dito

Isang mas mabuting pamamaraan

Isang mas mabuting paraan, kaysa sa bulag na paghuhula, ay ang sundin ang mga ideya sa nai-download na ML Cheat sheet. Dito, natuklasan natin na, para sa ating multiclass na problema, may ilang pagpipilian tayo:

cheatsheet for multiclass problems

Isang bahagi ng Microsoft's Algorithm Cheat Sheet, na nagpapaliwanag ng mga pagpipilian para sa multiclass classification

I-download ang cheat sheet na ito, i-print at idikit sa iyong dingding!

Pangangatwiran

Subukan nating hasain ang ating pag-iisip sa iba't ibang pamamaraan sa ibinigay na mga limitasyon natin:

  • Masyadong mabigat ang neural networks. Dahil sa malinis ngunit minimal na dataset, at sapagkat nagpapatakbo tayo ng training nang lokal sa pamamagitan ng mga notebook, masyadong mabigat para sa gawain ito ang neural networks.
  • Walang two-class classifier. Hindi natin ginagamit ang two-class classifier, kaya hindi nito kasama ang one-vs-all.
  • Maaaring gumana ang decision tree o logistic regression. Maaaring gumana ang decision tree, o logistic regression para sa multiclass na datos.
  • Iba ang nilulutas ng Multiclass Boosted Decision Trees. Ang multiclass boosted decision tree ay mas angkop para sa mga nonparametric na gawain, hal. gawain na nilalayong bumuo ng mga ranggo, kaya hindi ito kapaki-pakinabang para sa atin.

Paggamit ng Scikit-learn

Gagamitin natin ang Scikit-learn para suriin ang ating datos. Gayunpaman, maraming paraan upang gamitin ang logistic regression sa Scikit-learn. Tingnan ang mga parameter na ipapasa.

Sa pangkalahatan may dalawang mahahalagang parameter - multi_class at solver - na kailangang tukuyin kapag hilingin natin sa Scikit-learn na magsagawa ng logistic regression. Ang halaga ng multi_class ay nag-aaplay ng isang tiyak na pag-uugali. Ang halaga ng solver ay kung anong algorithm ang gagamitin. Hindi lahat ng solvers ay maaaring gamitin sa lahat ng multi_class na halaga.

Ayon sa dokumentasyon, sa multiclass na kaso, ang training algorithm:

  • Gumagamit ng one-vs-rest (OvR) scheme, kung ang multi_class ay naka-set sa ovr
  • Gumagamit ng cross-entropy loss, kung ang multi_class ay naka-set sa multinomial. (Sa kasalukuyan, ang multinomial ay sinusuportahan lamang ng lbfgs, sag, saga at newton-cg na solvers.)"

🎓 Ang 'scheme' dito ay maaaring 'ovr' (one-vs-rest) o 'multinomial'. Dahil ang logistic regression ay dinisenyo talaga para sa binary classification, pinahihintulutan ng mga scheme na ito na mas mahusay itong makayanan ang multiclass classification tasks. source

🎓 Ang 'solver' ay tinukoy bilang "ang algorithm na gagamitin sa optimization problem". source.

Nag-aalok ang Scikit-learn ng talahanayan upang ipaliwanag kung paano hinahandle ng mga solvers ang iba't ibang hamon na dala ng iba't ibang uri ng istruktura ng datos:

solvers

Exercise - hatiin ang datos

Maaari tayong magpokus sa logistic regression para sa ating unang trial ng training dahil kamakailan mo lang itong natutunan sa isang naunang leksiyon. Hatiin ang iyong datos sa training at testing na mga grupo gamit ang train_test_split():

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

Exercise - ilapat ang logistic regression

Dahil ginagamit mo ang multiclass na kaso, kailangan mong pumili kung anong scheme ang gagamitin at anong solver ang ise-set. Gamitin ang LogisticRegression na may multiclass setting at ang liblinear solver para mag-train.

  1. Gumawa ng logistic regression na naka-set ang multi_class sa ovr at ang solver sa 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))
    

    Subukan ang ibang solver tulad ng lbfgs, na madalas na default na ginagamit

    Tandaan, gamitin ang Pandas ravel function para i-flatten ang iyong datos kapag kailangan.

    Maganda ang accuracy, higit sa 80%!

  2. Maaari mong makita ang modelong ito na gumagana sa pamamagitan ng pag-test ng isang row ng datos (#50):

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

    Ang resulta ay ipi-print:

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

    Subukan ang ibang bilang ng row at suriin ang mga resulta

  3. Masusing suriin, maaari mong tingnan ang katumpakan ng prediksyon na ito:

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

    Ipinapakita ang resulta - ang Indian na lutuing pagkain ang pinakamalapit na hula, na may magandang probabilidad:

    0
    indian 0.715851
    chinese 0.229475
    japanese 0.029763
    korean 0.017277
    thai 0.007634

    Maaari mo bang ipaliwanag kung bakit medyo sigurado ang modelo na ito ay isang Indian na lutuing pagkain?

  4. Kunin ang mas detalyadong impormasyon sa pamamagitan ng pagprint ng classification report, tulad ng ginawa mo sa mga aralin sa regression:

    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

🚀Hamunin

Sa araling ito, ginamit mo ang malinis mong data upang bumuo ng machine learning model na maaaring hulaan ang isang pambansang lutuing pagkain base sa serye ng mga sangkap. Maglaan ng oras upang basahin ang maraming opsyon na inaalok ng Scikit-learn para mag-classify ng data. Masusing pag-aralan ang konsepto ng 'solver' upang maunawaan kung ano ang nangyayari sa likod ng mga tagpo.

Post-lecture quiz

Review & Pag-aaral sa Sarili

Suriin pa nang mas malalim ang matematika sa likod ng logistic regression sa araling ito

Takdang Aralin

Pag-aralan ang mga solvers


Pagsusuri: Ang dokumentong ito ay isinalin gamit ang AI translation service na Co-op Translator. Habang nagsusumikap kami para sa katumpakan, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o di pagkakatugma. Ang orihinal na dokumento sa kanyang sariling wika ang dapat ituring na opisyal na sanggunian. Para sa mahahalagang impormasyon, inirerekomenda ang propesyonal na salin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na nagmula sa paggamit ng pagsasaling ito.