ഈ പാഠത്തിൽ, നിങ്ങൾ ക്യൂസിനുകളെക്കുറിച്ച് സുതാര്യമായ, സഞ്ചിതമായ ഡാറ്റകൾ നിറഞ്ഞ് പൂർത്തിയായ Dataset ഉപയോഗിക്കും.
ഒരു ഗ്രൂപ്പ് ഘടകങ്ങളുടെ അടിസ്ഥാനത്തിൽ ഒരു ന شپുക രാഷ്ട്രീയം ക്യൂസിൻ പ്രവചിക്കാൻ നിങ്ങൾ ഈ Dataset വിവിധ ക്ലാസിഫയറുകളുമായി ഉപയോഗിക്കും. ഇത് നടത്തുമ്പോൾ, ക്ലാസിഫിക്കേഷൻ ടാസ്ക്കുകൾക്കായി ആलगൊരിതങ്ങള пайдаланിക്കപ്പെടാവുന്ന ചില മാർഗങ്ങളെക്കുറിച്ച് നിങ്ങൾ കൂടുതൽ പഠിക്കും.
Lesson 1 പൂർത്തീകരിച്ചിട്ടുണ്ടെന്ന് കരുതി, ഈ നാല് പാഠങ്ങൾക്കായി cleaned_cuisines.csv ഫയൽ റൂട്ട് /data ഫോൾഡറിൽ ഉണ്ടെന്ന് ഉറപ്പാക്കുക.
-
ഈ പാഠത്തിലെ notebook.ipynb ഫോൾഡറിലേക്കു ജോലി ചെയ്ത്, Pandas ലൈബ്രറിയോടൊപ്പം ആ ഫയൽ ഇറക്കുമതി ചെയ്യുക:
import pandas as pd cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") cuisines_df.head()
ഡാറ്റ ഇങ്ങനെ കാണപ്പെടുന്നു:
| 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 |
-
ഇനി, കൂടുതൽ ചില ലൈബ്രറികൾ ഇറക്കുമതി ചെയ്യുക:
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
-
X, y കോര്ഡിനേറ്റുകൾ രണ്ട് Dataframe ആയി പരിശീലനത്തിനായി വിഭജിക്കുക.
cuisineലേബലുകൾ ഉള്ള Dataframe ആയിരിക്കാം:cuisines_label_df = cuisines_df['cuisine'] cuisines_label_df.head()
ഇത് ഇങ്ങനെ പ്രത്യക്ഷപ്പെടും:
0 indian 1 indian 2 indian 3 indian 4 indian Name: cuisine, dtype: object -
ആ
Unnamed: 0കോളവുംcuisineകോളവുംdrop()വഴി തള്ളുക. ശേഷിക്കുന്ന ഡാറ്റ ട്രെയിനിങ്ങിനുള്ള ഫീച്ചറുകളായി സംരക്ഷിക്കുക:cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) cuisines_feature_df.head()
നിങ്ങളുടെ ഫീച്ചറുകൾ ഇങ്ങനെ കാണപ്പെടും:
| 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 |
ഇപ്പോൾ മോഡൽ ട്രെയിനുചെയ്യാൻ നിങ്ങൾ സജ്ജമാണ്!
നിങ്ങളുടെ ഡാറ്റ ക്ലീൻ ആയും പരിശീലനത്തിനുമായി തയ്യാറായതിനുശേഷം, ഏത് ആൽഗോരിതം ഉപയോഗിക്കാമെന്ന് തീരുമാനിക്കേണ്ടതാണ്.
Scikit-learn ക്ലാസിഫിക്കേഷനെ സൂപ്പർവൈസ്ഡ് ലേണിംഗിനായി ഗണിക്കുന്നു, അതിന്റെ കീഴിൽ വിവിധ ക്ലാസിഫിക്കേഷൻ മാർഗങ്ങൾ കാണാൻ കഴിയും. വിധമതങ്ങൾ ആദ്യദൃശ്യത്തിൽ അല്പം ആശയക്കുഴപ്പം വരുത്താം. താഴെപ്പറയുന്ന മാർഗ്ഗങ്ങൾ എല്ലാം ക്ലാസിഫിക്കേഷൻ സാങ്കേതികവിദ്യകൾ ഉൾക്കൊള്ളുന്നു:
- ലിനിയർ മോഡലുകൾ
- സപ്പോർട്ട് വെക്ടർ മെഷീൻസ്
- സ്റ്റോക്കാസ്റ്റിക് ഗ്രേഡിയന്റ് ഡേസന്റ്
- നെയറസ്റ്റ് നെഞ്ചിബേഴ്സ്
- ഗോസിയൻ പ്രോസസ്സ്
- ഡെസിഷൻ ട്രീസ്
- എൻസെംബിൾ മെത്തഡ്സ് (വോട്ടിംഗ് ക്ലാസിഫയർ)
- മൾട്ടിക്ലാസ്, മൾട്ടിഔട്ട്പുട്ട് ആൽഗോരിതങ്ങൾ (മൾട്ടിക്ലാസ്, മൾട്ടിലേബൽ ക്ലാസിഫിക്കേഷൻ, മൾട്ടിക്ലാസ്-മൾട്ടിഔട്ട്പുട്ട് ക്ലാസിഫിക്കേഷൻ)
നിങ്ങൾക്ക് ന്യൂറൽ നെറ്റ്വർക്കുകൾ ഉപയോഗിച്ച് ഡാറ്റ ക്ലാസിഫൈ ചെയ്യാൻ സാധിക്കും, പക്ഷേ അത് ഈ പാഠത്തിന്റെ പരിധിക്ക് പുറത്താണ്.
ഏതു ക്ലാസിഫയർ തിരഞ്ഞെടുക്കണമെന്നു കണ്ടെത്താൻ പലതും പ്രവർത്തിപ്പിച്ച് നല്ല ഫലത്തിന് നോക്കുക സാധാരണ വഴി ആണ്. Scikit-learn ഒരു ഒപ്പം-ഒപ്പം താരതമ്യം Dataset ഉപയോഗിച്ച് KNeighbors, SVC രണ്ട് രീതികളും, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB, QuadraticDiscrinationAnalysis എന്നിവയുടെ ഫലങ്ങൾ ചിത്രീകരിച്ചിരിക്കുന്നു:
പ്ലോട്ടുകൾ Scikit-learn ഡോക്യുമെന്റേഷനിൽ നിന്ന്
AutoML ഈ പ്രശ്നം ക്ലൗഡിൽ ഓടിച്ചുകൊണ്ട് പരിഹരിക്കുന്നു, നിങ്ങളുടെ ഡാറ്റയ്ക്ക് ഏറ്റവും അനുയോജ്യമായ ആൽഗോരിതം തിരഞ്ഞെടുക്കാൻ അനുവദിക്കുന്നു. ഇത് ഇവിടെ പരീക്ഷിക്കുക
മുന്നറിയിപ്പ് ചെയ്യാതെ കരുതിയുള്ള പകരം, ഈ ഡൗൺലോഡുചെയ്യാവുന്ന ML ചീറ്റ് ഷീറ്റ് ര ചുവടെ പറഞ്ഞിരിക്കുന്ന ആശയങ്ങൾ പാലിക്കുക. ഇവിടെ, നമ്മുടെ മൾട്ടിക്ലാസ് പ്രശ്നത്തിന് പലയിടത്തായി തിരഞ്ഞെടുക്കാനാകും:
മൈക്രോസോഫ്റ്റിന്റെ Algorithm Cheat Sheet-ന്റെ ഒരു വകഭാഗം, മൾട്ടിക്ലാസ് ക്ലാസിഫിക്കേഷൻ ഓപ്ഷനുകൾ വിശദീകരിക്കുന്നു
✅ ഈ ചീറ്റ് ഷീറ്റ് ഡൗൺലോഡ് ചെയ്ത് പ്രിന്റ് ചെയ്ത് നിങ്ങളുടെ ഭിത്തിയിൽ അത് തൂക്കുക!
നമുക്ക് പല സമീപനങ്ങളും ഉപയോക്തൃ നിർബന്ധങ്ങൾക്ക് അനുസരിച്ചു ഗണിക്കാമോ നോക്കാം:
- ന്യൂറൽ നെറ്റ്വർക്കുകൾ വളരെ ഭാരമാണ് ന. നമ്മുടെ ക്ലീൻ എന്നാൽ കുറഞ്ഞ ഡാറ്റ സെറ്റ് ഉണ്ട്, ലോക്കലായി നോട്ട്ബുക്കുകൾ വഴി ട്രെയ്നിംഗ് നടത്തുന്നപക്ഷം ന്യൂറൽ നെറ്റ്വർകുകൾ ഭാരമാണ്.
- രണ്ട് ലേബൽ ക്ലാസിഫയറുകൾ ഇല്ല. അതുകൊണ്ട് ഓൺ-വേഴ്സ്-ആൾ ഒരുക്കം ഒഴിവാക്കാം.
- ഡെസിഷൻ ട്രീ അല്ലെങ്കിൽ ലോഗിസ്റ്റിക് റിഗ്രഷൻ പ്രയോജനം കാണിക്കും. മൾട്ടിക്ലാസ് ഡാറ്റയ്ക്ക് ഡെസിഷൻ ട്രീ അല്ലെങ്കിൽ ലോഗിസ്റ്റിക് റിഗ്രഷൻ ഉപയോഗിക്കാവുന്നവിധം.
- മൾട്ടിക്ലാസ് ബൂസ്റ്റഡ് ഡെസിഷൻ ട്രീ വ്യത്യസ്ത പ്രശ്നത്തിന്. മൾട്ടിക്ലാസ് ബൂസ്റ്റഡ് ഡെസിഷൻ ട്രീ പരാമിതിയില്ലാത്ത ടാസ്കുകൾക്കായി ആണ് പറ്റിയത്, പോലെയുള്ള റാങ്കിംഗുകൾ നിർമ്മിക്കുന്നതിനായി, അതിനാൽ അത് നമ്മുടെ പ്രയോഗത്തിന് ഉപയോഗപ്രദമല്ല.
ഡാറ്റ വിശകലനം ചെയ്യാൻ Scikit-learn ഉപയോഗിക്കും. എന്നാൽ Scikit-learn ലോഗിസ്റ്റിക് റിഗ്രഷൻ ഉപയോഗിക്കാൻ പല വഴികളും ഉണ്ട്. പാരാമീറ്ററുകൾ പരിശോധിക്കുക.
പ്രധാനമായും multi_class അതും solver എന്നവയാണ് നിർണായക പാരാമീറ്ററുകൾ. Scikit-learn-നെ ലോഗിസ്റ്റിക് റിഗ്രഷൻ നടത്താൻ കോൾ ചെയ്തത് ഈ രണ്ട് പാരാമീറ്ററുകൾ വ്യക്തമാക്കണം. multi_class മൂല്യം ഒരു പ്രത്യേക പെരുമാറ്റം ഏർപ്പെടുത്തുന്നു. solver എന്നത് ഉപയോഗിക്കുന്ന ആൽഗോരിതമാണ്. എല്ലാ solver-കളും എല്ലാ multi_class മൂല്യങ്ങളോടും പൊരുത്തപ്പെടുവാൻ കഴിയാറില്ല.
ഡോക്സ് പ്രകാരം, മൾട്ടിക്ലാസ് കാര്യത്തിൽ, പരിശീലന ആൽഗോരിതം:
- 'ovr' ആണെങ്കിൽ one-vs-rest (OvR) സ്കീം ഉപയോഗിക്കുന്നു.
- 'multinomial' ആണെങ്കിൽ ക്രോസ്-എൻട്രോപ്പി ലോസ് ഉപയോഗിക്കുന്നു. (
multinomialഇപ്പോൾ 'lbfgs', 'sag', 'saga', 'newton-cg' solver-കൾക്കു മാത്രമേ പിന്തുണയുള്ളു.)
🎓 ഇവിടെ 'സ്കീം' 'ovr' (ഒന്ന്-വേഴ്സ്-റെസ്റ്റ്) അല്ലെങ്കിൽ 'മൾട്ടിനോമിയൽ' ആകാം. ലോഗിസ്റ്റിക് റിഗ്രഷൻ സാധാരണയായി ബൈനറി ക്ലാസിഫിക്കേഷനിനു രൂപപ്പെടുത്തിയിട്ടുള്ളതിനാൽ, ഇതുവഴി മൾട്ടിക്ലാസ് ടാസ്കുകൾ മെച്ചപ്പെട്ടവയായി കൈകാര്യം ചെയ്യപ്പെടുന്നു. മൂലം
🎓 solver എന്ന് പറഞ്ഞാൽ "ഓപ്റ്റിമൈസേഷൻ പ്രശ്നത്തിൽ ഉപയോഗിക്കുന്ന ആൽഗോരിതം" എന്നാണ്. മൂലം.
Scikit-learn solver-കൾ ഓരോ തരത്തിലുള്ള ഡാറ്റ വിവിധ വെല്ലുവിളികൾ എങ്ങനെ കൈകാര്യം ചെയ്യുന്നുവെന്നതിനുള്ള പട്ടിക നൽകുന്നു:
നിങ്ങൾക്ക് മുമ്പത്തെ പാഠത്തിൽ ലോഗിസ്റ്റിക് റിഗ്രഷൻ പഠിച്ചതിനാൽ ആദ്യ ട്രെയിനിങ്ങിനായി അതിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കുക.
train_test_split() വിളിച്ച് ഡാറ്റ ട്രെയിനുകളും ടെസ്റ്റിങ്ങും ആയി വിഭജിക്കുക:
X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)മൾട്ടിക്ലാസ് കേസ് ഉപയോഗിക്കുന്നതുകൊണ്ട്, ഏത് സ്കീം ഉപയോഗിക്കേണ്ടതും ഏത് സോൾവർ സജ്ജീകരിക്കേണ്ടതും തിരഞ്ഞെടുക്കേണ്ടതാണ്. LogisticRegression ഉപയോഗിച്ച് multi_class 'ovr' ആയും solver 'liblinear' ആയും സജ്ജമാക്കി تربീൻ ചെയ്യുക.
-
multi_class പാരാമീറ്റർ
ovrആയും, solverliblinearആയും സെറ്റ് ചെയ്ത് ലോഗിസ്റ്റിക് റിഗ്രഷൻ ഉണ്ടാക്കുക: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))
✅ ഭിന്നമായ ഒരു സോൾവർ പരീക്ഷിക്കുക, ഉദാഹരണത്തിന്
lbfgs, സാധാരണ ഗതിയിൽ ഇത് ഡീഫോൾട്രായി സജ്ജീകരിച്ചിരിക്കുന്നതാണ്ശ്രദ്ധിക്കുക, pandas
ravelഫംഗ്ഷൻ ആവശ്യമുള്ളപ്പോൾ ഡാറ്റ flatten ചെയ്യുന്നതിന് ഉപയോഗിക്കുക.കൃത്യത 80% ലധികം നല്ലതാണ്!
-
ഡാറ്റയിലെ ഒരു പദവി (#50) ടെസ്റ്റ് ചെയ്ത് ഈ മോഡൽ പ്രവർത്തനം പരിശോധിക്കാം:
print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') print(f'cuisine: {y_test.iloc[50]}')
ഫലം അച്ചടിപ്പിച്ചു കാണിക്കുന്നു:
ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') cuisine: indian✅ വ്യത്യസ്ത ഒരു പദവി ഉപയോഗിച്ച് പരീക്ഷിച്ച് ഫലങ്ങൾ പരിശോധിക്കുക
-
കൂടുതൽ ആഴത്തിലുള്ള പരിശോധനയിൽ, ഈ പ്രവചനം സമ്മതിക്കുന്നതിന്റെ കൃത്യത പരിശോധിക്കാം:
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()
ഫലം മুদ্রിക്കപ്പെട്ടിരിക്കുന്നു - ഇന്ത്യയുടെ പാചക ശൈലി ഇതിന്റെ മികച്ച സഹായം, നല്ല സാധ്യതയോടെ:
0 indian 0.715851 chinese 0.229475 japanese 0.029763 korean 0.017277 thai 0.007634 ✅ മോഡൽ എന്തുകൊണ്ട് ഈ പാചക ശൈലി ഇന്ത്യൻ ആണെന്ന് ഉറപ്പുള്ളതായി നിങ്ങൾക്ക് വിശദീകരിക്കാമോ?
-
റെഗ്രഷൻ പാഠങ്ങളിലെ പോലെ ക്ലാസിഫിക്കേഷൻ റിപ്പോർട്ട് പ്രിന്റ് ചെയ്ത് കൂടുതൽ വിശദാംശങ്ങൾ നേടുക:
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
ഈ പാഠത്തിൽ, ഒരുപാട് ഘടകങ്ങൾ അടിസ്ഥാനമാക്കി ഒരു ദേശീയ പാചക ശൈലി പ്രവചിക്കാൻ കഴിവുള്ള മെഷീൻ ലേർണിംഗ് മോഡൽ നിങ്ങൾ കഴിഞ്ഞു നിർമ്മിച്ചു. ഡാറ്റ ക്ലാസിഫൈ ചെയ്യാൻ Scikit-learn നൽകുന്ന വിവിധ ഓപ്ഷനുകൾ വായിക്കാൻ സമയം എടുത്ത് പഠിക്കുക. 'solver' എന്ന ആശയത്തെ കൂടുതൽ ആഴത്തിൽ അറിയാൻ ശ്രമിക്കുക, പിന്നിലെ പ്രക്രിയകൾ അറിയാൻ.
ലോജിസ്റ്റിക് റെഗ്രഷിൻ പിന്നിലുള്ള ഗണിതത്തിൽ ഈ പാഠത്തിൽ കൂടുതൽ ആഴത്തിൽ വെട്ടിവെക്കുക.
ഡിസ്ക്ലെയിമർ:
ഈ ദਸਤാവേസ് AI വിവർത്തന സേവനം Co-op Translator ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതക്കായി പരിശ്രമിക്കുന്നുവെങ്കിലും, സ്വയംപ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിഴവുകളോ അപാകതകളോ ഉണ്ടായിരിക്കാമെന്ന് ദയവായി മനസ്സിലാക്കുക. യഥാർത്ഥ ഭാഷയിലുള്ള ദസ്താവേസ് ഉത്തരവാദിത്വപ്പെടുത്തിയ ഉറവിടമായി കണക്കാക്കേണ്ടതാണ്. നിർണായക വിവരങ്ങൾക്കായി പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം നിർദ്ദേശിക്കുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിനാൽ ഉണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കും തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കും നാം ഉത്തരവാദികളല്ല.


