|
|
3 months ago | |
|---|---|---|
| .. | ||
| solution | 6 months ago | |
| README.md | 3 months ago | |
| assignment.md | 6 months ago | |
| notebook.ipynb | 10 months ago | |
README.md
Wataalam wa vyakula 1
Katika somo hili, uta tumia seti ya data uliyoihifadhi kutoka somo la mwisho iliyojaa data safi na yenye usawa kuhusu vyakula vya kitaifa.
Utatumia seti hii ya data pamoja na wataalam mbalimbali ili kutabiri aina ya chakula cha kitaifa kulingana na kundi la viungo. Wakati wa kufanya hivyo, utajifunza zaidi kuhusu baadhi ya njia ambazo algorithimu zinaweza kutumika kwa kazi za utambuzi.
Jaribio kabla ya somo
Maandalizi
Kama umekamilisha Somo la 1, hakikisha kwamba faili la cleaned_cuisines.csv lipo katika folda ya mizizi /data kwa masomo haya manne.
Zojo - tabiri aina ya chakula cha kitaifa
-
Ukiwa katika folda ya notebook.ipynb ya somo hili, ingiza faili hilo pamoja na maktaba ya Pandas:
import pandas as pd cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") cuisines_df.head()Data inaonekana kama ifuatavyo:
| 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 |
-
Sasa, ingiza maktaba zaidi:
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 -
Gawanya viwango vya X na y katika dataframes mbili kwa mafunzo.
cuisineitakuwa dataframe ya lebo:cuisines_label_df = cuisines_df['cuisine'] cuisines_label_df.head()Itaonekana hivi:
0 indian 1 indian 2 indian 3 indian 4 indian Name: cuisine, dtype: object -
Futa safu ya
Unnamed: 0na safu yacuisinekwa kutumiadrop(). Hifadhi data inayobaki kama sifa za mafunzo:cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) cuisines_feature_df.head()Sifa zako zinaonekana kama ifuatavyo:
| 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 |
Sasa uko tayari kufundisha mfano wako!
Kuchagua mtambuzi wako
Sasa data yako iko safi na tayari kwa mafunzo, lazima uamue algorithimu gani utumie kwa kazi hii.
Scikit-learn inaweka uainishaji chini ya Mafunzo Yaliyoongozwa (Supervised Learning), na katika kundi hilo utapata njia nyingi za kuainisha. Aina tofauti zinaweza kukufanya machungu mwanzoni. Njia zifuatazo zote zinajumuisha mbinu za uainishaji:
- Mifano ya Mstari
- Mashine za Msaada wa Vektor (Support Vector Machines)
- Kushuka kwa Hatua za Kistokastiki (Stochastic Gradient Descent)
- Majirani Karibu (Nearest Neighbors)
- Mchakato wa Gaussian
- Miti ya Maamuzi (Decision Trees)
- Njia za Kikundi (voting Classifier)
- Algorithimu za Mifumo Mingi na Matokeo Mengi (multiclass and multilabel classification, multiclass-multioutput classification)
Unaweza pia kutumia mitandao ya neva kuainisha data, lakini hiyo iko nje ya wigo wa somo hili.
Mtambuzi gani uchague?
Kwa hiyo, mtambuzi gani unapaswa kuchagua? Mara nyingi, kujaribu kadhaa na kutafuta matokeo mazuri ni njia ya kupima. Scikit-learn inatoa kulinganisha kando kwa kando kwa dataset iliyoanzishwa, ikilinganisha KNeighbors, SVC njia mbili, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB na QuadraticDiscrinationAnalysis, ikionyesha matokeo kwa picha:
Michoro iliyotengenezwa katika nyaraka za Scikit-learn
AutoML inalitatua tatizo hili kwa urahisi kwa kuendesha kulinganisha haya kwenye wingu, ikikupa uwezo wa kuchagua algorithimu bora kwa data yako. Jaribu hapa
Njia bora zaidi
Njia bora zaidi badala ya kubahatisha ni kufuata mawazo yaliyomo katika jarida la ML Cheat sheet ambalo unaweza kupakua. Hapa, tunagundua kwamba kwa tatizo letu la wunaji wengi, tuna chaguzi kadhaa:
Sehemu ya Jarida la Microsoft’s Algorithm Cheat Sheet, likielezea chaguzi za uainishaji wa wunaji wengi
✅ Pakua jarida hili, lipige picha na ulike kwenye ukuta wako!
Sababu
Tuchunguze kama tunaweza kupata muktadha wa njia tofauti ukizingatia vikwazo tulivyonavyo:
- Mitandao ya neva ni mizito sana. Kutokana na seti yetu safi lakini ndogo, na ukweli kwamba tunaendesha mafunzo kwa kutumia notebooks kwa mtaa, mitandao ya neva ni mizito sana kwa kazi hii.
- Hakuna mtambuzi wa aina mbili. Hatutumii mtambuzi wa aina mbili, kwa hiyo hatuwezi tumia one-vs-all.
- Mti wa maamuzi au usambazaji wa logistic unaweza kufanya kazi. Mti wa maamuzi unaweza kufanya kazi, au usambazaji wa logistic kwa data ya wunaji wengi.
- Miti ya Maamuzi yenye Kuimarishwa kwa Wunaji Wengi ni tofauti. Miti ya maamuzi yenye kuimarishwa kwa wunaji wengi ni bora kwa kazi zisizo na kanuni maalum, mfano kazi za kuunda vikundi, kwa hiyo haitatufaa sisi.
Kutumia Scikit-learn
Tutakuwa tunatumia Scikit-learn kuchambua data yetu. Hata hivyo, kuna njia nyingi za kutumia usambazaji wa logistic katika Scikit-learn. Angalia vigezo vya kuingiza.
Kwa ujumla kuna vigezo viwili muhimu - multi_class na solver - ambavyo tunahitaji kubainisha tunapoomba Scikit-learn ifanye usambazaji wa logistic. Thamani ya multi_class hutumia tabia fulani. Thamani ya solver ni algorithimu gani itumike. Sio solvers zote zinaweza kuambatana na thamani zote za multi_class.
Kulingana na nyaraka, katika kesi ya multiclass, algorithimu ya mafunzo:
- Inatumia mpango wa one-vs-rest (OvR), ikiwa chaguo la
multi_classlimewekwa kuwaovr - Inatumia hasara ya msalaba wa entropi, ikiwa chaguo la
multi_classlimewekwa kuwamultinomial. (Kwa sasa chaguo lamultinomiallinaungwa mkono tu na solvers ‘lbfgs’, ‘sag’, ‘saga’ na ‘newton-cg’.)"
🎓 'Mpango' hapa unaweza kuwa 'ovr' (one-vs-rest) au 'multinomial'. Kwa kuwa usambazaji wa logistic umeundwa hasa kusaidia uainishaji wa binary, mipango hii huruhusu kushughulikia vizuri kazi za uainishaji wa wunaji wengi. chanzo
🎓 'Solver' yamefafanuliwa kama "algorithimu inayotumika kwenye tatizo la uboreshaji". chanzo.
Scikit-learn inatoa jedwali hili kuelezea jinsi solvers zinavyoshughulikia changamoto tofauti zinazotokea kwa aina tofauti za muundo wa data:
Zojo - gawanya data
Tunaweza kuzingatia usambazaji wa logistic kwa jaribio letu la kwanza la mafunzo kwa sababu umepata maelezo yake katika somo lililopita.
Gawanya data yako katika makundi ya mafunzo na majaribio kwa kutumia train_test_split():
X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)
Zojo - tumia usambazaji wa logistic
Kwa kuwa unatumia kesi ya multiclass, unahitaji kuchagua mpango utakao tumia na solver utakao weka. Tumia LogisticRegression yenye mpangilio wa multiclass na solver ya liblinear kufundisha.
-
Tengeneza usambazaji wa logistic na multi_class ukiwa
ovrna solver ukiwaliblinear: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))✅ Jaribu solver tofauti kama
lbfgs, ambayo mara nyingi hutumika kwa defaultKumbuka, tumia Pandas
ravelili kurahisisha data yako unapotakiwa.Usahihi ni mzuri, zaidi ya 80%!
-
Unaweza kuona mfano huu ukiwa unafanya jaribio kwa mstari mmoja wa data (#50):
print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') print(f'cuisine: {y_test.iloc[50]}')Matokeo yamechapishwa:
ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') cuisine: indian✅ Jaribu nambari nyingine ya mstari na angalia matokeo yake
-
Kuchunguza zaidi, unaweza kukagua usahihi wa utabiri huu:
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()Matokeo yamechapishwa - vyakula vya India ndicho kinachokadiriwa vyema zaidi, kwa uwezekano mzuri:
0 indian 0.715851 chinese 0.229475 japanese 0.029763 korean 0.017277 thai 0.007634 ✅ Je, unaweza kuelezea kwanini mfano una uhakika mkubwa hii ni chakula cha India?
-
Pata maelezo zaidi kwa kuchapisha ripoti ya uainishaji, kama ulivyofanya katika masomo ya usawa:
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
🚀Changamoto
Katika somo hili, ulitumia data yako safi kujenga mfano wa kujifunza mashine ambao unaweza kutabiri chakula cha kitaifa kulingana na mfululizo wa viungo. Chukua muda kusoma kwa undani chaguzi nyingi Scikit-learn inazotoa kwa ajili ya kuainisha data. Kuchunguza zaidi dhana ya 'solver' ili kuelewa kinachotokea nyuma ya pazia.
Mtihani baada ya mihadhara
Mapitio & Kujisomea
Chunguza kidogo zaidi hesabu nyuma ya usawa wa logistic katika somo hili
Kazi ya nyumbani
Kandiyo: Hati hii imetafsiriwa kwa kutumia huduma ya tafsiri ya AI Co-op Translator. Ingawa tunajitahidi kwa usahihi, tafadhali fahamu kuwa tafsiri za otomatiki zinaweza kuwa na makosa au upungufu wa usahihi. Hati ya asili katika lugha yake ya mama inapaswa kuchukuliwa kama chanzo cha mamlaka. Kwa taarifa muhimu, tafsiri ya kitaalamu ya binadamu inapendekezwa. Hatuna dhamana kwa maelewano au tafsiri potofu zinazotokana na matumizi ya tafsiri hii.


