|
3 weeks ago | |
---|---|---|
.. | ||
solution | 3 weeks ago | |
README.md | 3 weeks ago | |
assignment.md | 3 weeks ago | |
notebook.ipynb | 3 weeks ago |
README.md
Wainishaji wa vyakula 1
Katika somo hili, utatumia seti ya data uliyohifadhi kutoka somo la mwisho iliyojaa data safi na yenye usawa kuhusu vyakula.
Utatumia seti hii ya data na aina mbalimbali za wainishaji ili kutabiri aina ya chakula cha kitaifa kulingana na kikundi cha viungo. Wakati wa kufanya hivyo, utajifunza zaidi kuhusu baadhi ya njia ambazo algorithimu zinaweza kutumika kwa kazi za uainishaji.
Jaribio la kabla ya somo
Maandalizi
Ukikamilisha Somo la 1, hakikisha kuwa faili cleaned_cuisines.csv ipo katika folda ya mizizi /data
kwa masomo haya manne.
Zoezi - tabiri aina ya chakula cha kitaifa
-
Ukifanya kazi katika folda ya notebook.ipynb ya somo hili, leta 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 hii:
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, leta 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 viwianishi vya X na y katika fremu mbili za data kwa mafunzo.
cuisine
inaweza kuwa fremu ya lebo:cuisines_label_df = cuisines_df['cuisine'] cuisines_label_df.head()
Itaonekana kama hii:
0 indian 1 indian 2 indian 3 indian 4 indian Name: cuisine, dtype: object
-
Ondoa safu ya
Unnamed: 0
na safu yacuisine
, ukitumiadrop()
. Hifadhi data iliyobaki kama vipengele vya mafunzo:cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) cuisines_feature_df.head()
Vipengele vyako vinaonekana kama hii:
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 modeli yako!
Kuchagua wainishaji wako
Sasa data yako ni safi na tayari kwa mafunzo, unapaswa kuamua ni algorithimu gani ya kutumia kwa kazi hiyo.
Scikit-learn inaweka uainishaji chini ya Kujifunza kwa Usimamizi, na katika kategoria hiyo utapata njia nyingi za kuainisha. Aina mbalimbali zinaweza kuwa za kushangaza mwanzoni. Njia zifuatazo zote zinajumuisha mbinu za uainishaji:
- Miundo ya Linear
- Support Vector Machines
- Stochastic Gradient Descent
- Nearest Neighbors
- Gaussian Processes
- Decision Trees
- Mbinu za Ensemble (Voting Classifier)
- Algorithimu za Multiclass na multioutput (uainishaji wa multilabel, uainishaji wa multiclass-multioutput)
Unaweza pia kutumia mitandao ya neva kuainisha data, lakini hiyo iko nje ya wigo wa somo hili.
Ni wainishaji gani wa kuchagua?
Kwa hivyo, ni wainishaji gani unapaswa kuchagua? Mara nyingi, kujaribu kadhaa na kutafuta matokeo mazuri ni njia ya kupima. Scikit-learn inatoa linganisho la kando kwa kando kwenye seti ya data iliyoundwa, ikilinganishwa KNeighbors, SVC kwa njia mbili, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB na QuadraticDiscrinationAnalysis, ikionyesha matokeo kwa njia ya picha:
Mchoro uliotolewa kwenye nyaraka za Scikit-learn
AutoML inatatua tatizo hili kwa urahisi kwa kuendesha kulinganisha hizi kwenye wingu, ikikuruhusu kuchagua algorithimu bora kwa data yako. Jaribu hapa
Njia bora zaidi
Njia bora zaidi kuliko kubahatisha bila mpangilio, hata hivyo, ni kufuata mawazo kwenye ML Cheat sheet inayoweza kupakuliwa. Hapa, tunagundua kuwa, kwa tatizo letu la multiclass, tuna chaguo kadhaa:
Sehemu ya Algorithm Cheat Sheet ya Microsoft, ikielezea chaguo za uainishaji wa multiclass
✅ Pakua cheatsheet hii, ichapishe, na uitundike ukutani kwako!
Mantiki
Hebu tuone kama tunaweza kufikiria njia tofauti kulingana na vikwazo tulivyo navyo:
- Mitandao ya neva ni nzito sana. Kwa kuzingatia seti yetu ya data safi lakini ndogo, na ukweli kwamba tunafanya mafunzo kwa ndani kupitia notebooks, mitandao ya neva ni nzito sana kwa kazi hii.
- Hakuna wainishaji wa darasa mbili. Hatutumii wainishaji wa darasa mbili, kwa hivyo hiyo inatupilia mbali one-vs-all.
- Decision tree au logistic regression inaweza kufanya kazi. Decision tree inaweza kufanya kazi, au logistic regression kwa data ya multiclass.
- Multiclass Boosted Decision Trees hutatua tatizo tofauti. Multiclass boosted decision tree inafaa zaidi kwa kazi zisizo za parametric, mfano kazi zilizoundwa kujenga viwango, kwa hivyo haitufai.
Kutumia Scikit-learn
Tutatumia Scikit-learn kuchambua data yetu. Hata hivyo, kuna njia nyingi za kutumia logistic regression katika Scikit-learn. Angalia vigezo vya kupitisha.
Kimsingi kuna vigezo viwili muhimu - multi_class
na solver
- ambavyo tunahitaji kubainisha, tunapoiomba Scikit-learn kufanya logistic regression. Thamani ya multi_class
inatumia tabia fulani. Thamani ya solver ni algorithimu ya kutumia. Si solvers zote zinaweza kuunganishwa 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_class
limewekwa kuwaovr
- Inatumia hasara ya cross-entropy, ikiwa chaguo la
multi_class
limewekwa kuwamultinomial
. (Kwa sasa chaguo lamultinomial
linasaidiwa tu na solvers ‘lbfgs’, ‘sag’, ‘saga’ na ‘newton-cg’.)"
🎓 'Mpango' hapa unaweza kuwa 'ovr' (one-vs-rest) au 'multinomial'. Kwa kuwa logistic regression imeundwa hasa kusaidia uainishaji wa binary, mipango hii inaiwezesha kushughulikia kazi za uainishaji wa multiclass vizuri zaidi. chanzo
🎓 'Solver' inafafanuliwa kama "algorithimu ya kutumia katika tatizo la uboreshaji". chanzo.
Scikit-learn inatoa jedwali hili kuelezea jinsi solvers zinavyoshughulikia changamoto tofauti zinazotolewa na miundo tofauti ya data:
Zoezi - gawanya data
Tunaweza kuzingatia logistic regression kwa jaribio letu la kwanza la mafunzo kwa kuwa ulijifunza hivi karibuni kuhusu hili katika somo la awali.
Gawanya data yako katika vikundi vya 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)
Zoezi - tumia logistic regression
Kwa kuwa unatumia kesi ya multiclass, unahitaji kuchagua ni mpango gani wa kutumia na ni solver gani wa kuweka. Tumia LogisticRegression na mpangilio wa multiclass na solver liblinear kwa mafunzo.
-
Unda logistic regression na multi_class iliyowekwa kuwa
ovr
na solver iliyowekwa kuwaliblinear
: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 huwekwa kama chaguo-msingi
Kumbuka, tumia Pandas
ravel
kazi ili kulainisha data yako inapohitajika. Usahihi ni mzuri kwa zaidi ya 80%!
-
Unaweza kuona mfano huu ukifanya kazi kwa kujaribu safu moja ya data (#50):
print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') print(f'cuisine: {y_test.iloc[50]}')
Matokeo yanachapishwa:
ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') cuisine: indian
✅ Jaribu namba tofauti ya safu na angalia matokeo
-
Kuchunguza zaidi, unaweza kuangalia 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 yanachapishwa - vyakula vya Kihindi ni dhana bora zaidi, kwa uwezekano mzuri:
0 indian 0.715851 chinese 0.229475 japanese 0.029763 korean 0.017277 thai 0.007634 ✅ Je, unaweza kueleza kwa nini mfano una uhakika kuwa hiki ni chakula cha Kihindi?
-
Pata maelezo zaidi kwa kuchapisha ripoti ya uainishaji, kama ulivyofanya katika masomo ya 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
🚀Changamoto
Katika somo hili, ulitumia data yako iliyosafishwa kujenga mfano wa kujifunza mashine ambao unaweza kutabiri aina ya chakula cha kitaifa kulingana na mfululizo wa viungo. Chukua muda kusoma chaguo nyingi ambazo Scikit-learn inatoa ili kuainisha data. Chunguza zaidi dhana ya 'solver' ili kuelewa kinachotokea nyuma ya pazia.
Maswali baada ya somo
Mapitio & Kujisomea
Chunguza zaidi hesabu nyuma ya logistic regression katika somo hili
Kazi
Kanusho:
Hati hii imetafsiriwa kwa kutumia huduma ya kutafsiri ya AI Co-op Translator. Ingawa tunajitahidi kuhakikisha usahihi, tafadhali fahamu kuwa tafsiri za kiotomatiki zinaweza kuwa na makosa au kutokuwa sahihi. Hati ya asili katika lugha yake ya awali inapaswa kuzingatiwa kama chanzo cha mamlaka. Kwa taarifa muhimu, tafsiri ya kitaalamu ya binadamu inapendekezwa. Hatutawajibika kwa kutoelewana au tafsiri zisizo sahihi zinazotokana na matumizi ya tafsiri hii.