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.
242 lines
19 KiB
242 lines
19 KiB
# ഭക്ഷണ ശൈലികളുടെ വര്ഗീകരണങ്ങള് 2
|
|
|
|
ഈ രണ്ടാം വര്ഗീകരണ പാഠത്തില്, നമുക്ക് അക്ക സംഖ്യാഗത ഡാറ്റ വര്ഗീകരിക്കാനുള്ള കൂടുതല് വഴികള് പരിശോധിക്കാം. ഓരോ ക്ലാസിഫയറും ഒന്നിനെതിരെയൊരു തിരഞ്ഞെടുപ്പിന് ഉള്ള സ്വാധീനം കുറിച്ചും അറിയാം.
|
|
|
|
## [മുൻ പാഠം പരീക്ഷ](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
### മുൻകൂട്ടി ആവശ്യമായത്
|
|
|
|
മുൻപുള്ള പാഠങ്ങള് കഴിഞ്ഞുകഴിഞ്ഞുവെന്ന് എടുത്ത് ഞങ്ങളുടെ `data` ഫോള്ഡറില് _cleaned_cuisines.csv_ എന്ന ശുദ്ധപ്പെടുത്തിയ ഡാറ്റാസെറ്റ് ഉള്ളതായി കരുതുന്നു, ഈ 4-പാഠ ഫോള്ഡറിന്റെ റൂട്ട് ഫോട്ടില്.
|
|
|
|
### ഒരുക്കം
|
|
|
|
ഞങ്ങള് നിങ്ങളുടെ _notebook.ipynb_ ഫയലില് ശുദ്ധപ്പെടുത്തിയ ഡാറ്റാസെറ്റ് ലോഡ് ചെയ്തിട്ടുണ്ട്, അത് X, y ഡാറ്റാഫ്രെയിമുകളായി വിഭജിച്ചെടുത്തിട്ടുണ്ട്, മോഡല് നിർമ്മാണ പ്രക്രിയയ്ക്ക് തയ്യാറായി.
|
|
|
|
## ഒരു വര്ജ്ശീകരണ ഭൂപടം
|
|
|
|
മുൻപ്, മൈക്രോസോഫ്റ്റ് ചീറ്റ്ഷീറ്റിലെ ഡാറ്റ വര്ഗീകരണത്തിനുള്ള വിവിധ ഓപ്ഷനുകള് കുറിച്ച് പഠിച്ചു. Scikit-learn സമാനമായെങ്കിലും കൂടുതല് സൂക്ഷ്മമായ ഒരു ചീറ്റ്ഷീറ്റ് നല്കുന്നു, ഇത് നിങ്ങളുടെ എസ്റ്റിമേറ്ററുകള് (മറ്റൊരു പദം ക്ലാസിഫയര്) കുറച്ച് കുറയ്ക്കാനായി ഉപകരിക്കും:
|
|
|
|

|
|
> ടിപ്: [ഈ ഭൂപടം ഓൺലൈനിൽ സന്ദർശിക്കുക](https://scikit-learn.org/stable/tutorial/machine_learning_map/) നിന്ന് പാതയിൽ ക്ലിക്ക് ചെയ്ത് ഡോക്യുമെന്റേഷൻ വായിക്കുക.
|
|
|
|
### പദ്ധതി
|
|
|
|
നിങ്ങളുടെ ഡാറ്റയെക്കുറിച്ചും വ്യക്തമായ ധാരണ ഉണ്ടാകുമ്പോഴാണ് ഈ ഭൂപടം വളരെ ഉപകാരപ്രദം, കാരണം നിങ്ങൾ പാതകളിലൂടെ 'നടക്കാൻ' സാദ്ധ്യമാകുന്നു:
|
|
|
|
- ഞങ്ങള്ക്ക് >50 സാമ്പിളുകൾ ഉണ്ട്
|
|
- ഒരു വിഭാഗം സാധ്യം പ്രവചിക്കണം
|
|
- ലേബൽ ചെയ്ത ഡാറ്റ ഉണ്ട്
|
|
- 100K സാമ്പളിൽ കുറവാണ്
|
|
- ✨ Linear SVC തിരഞ്ഞെടുക്കാം
|
|
- അത് പ്രവര്ത്തിക്കാത്ത പക്ഷം, അക്ക സംഖ്യാഗത ഡാറ്റ ഉള്ളതിനാല്
|
|
- ✨ KNeighbors Classifier പരീക്ഷിക്കാം
|
|
- അത് പരാജയപ്പെടുകയാണെങ്കില് ✨ SVC, ✨ Ensemble Classifiers പരീക്ഷിക്കുക
|
|
|
|
ഏറ്റവും സഹായകരമായ ഒരു പാതയാണ് ഇത്.
|
|
|
|
## അഭ്യാസം - ഡാറ്റ വിഭജിക്കുക
|
|
|
|
ഈ പാത പിന്തുടർന്ന്, ചില ലൈബ്രറികൾ ഇറക്കുമതി ചെയ്യുകയായിരിക്കും.
|
|
|
|
1. ആവശ്യമായ ലൈബ്രറികൾ ഇറക്കുമതി ചെയ്യുക:
|
|
|
|
```python
|
|
from sklearn.neighbors import KNeighborsClassifier
|
|
from sklearn.linear_model import LogisticRegression
|
|
from sklearn.svm import SVC
|
|
from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier
|
|
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
|
|
import numpy as np
|
|
```
|
|
|
|
1. നിങ്ങളുടെ പരിശീലനവും പരിശോധനാ ഡാറ്റയും വിഭജിക്കുക:
|
|
|
|
```python
|
|
X_train, X_test, y_train, y_test = train_test_split(cuisines_features_df, cuisines_label_df, test_size=0.3)
|
|
```
|
|
|
|
## ലിനിയർ SVC ക്ലാസിഫയര്
|
|
|
|
Support-Vector clustering (SVC) Support-Vector machines കുടുംബത്തിലെ ഒരു ശാഖയാണ് (ഇവയെ കുറിച്ച് താഴെ പഠിക്കാം). ഈ രീതിയിൽ, ലേബലുകളെ എങ്ങനെ ക്ലസ്റ്റർ ചെയ്യാമെന്ന് തീരുമാനിക്കാനുള്ള ഒരു 'kernel' തിരഞ്ഞെടുക്കാം. 'C' ക്രമേങ്കം പാരാമീറ്ററിന്റെ സ്വാധീനം നിയന്ത്രിക്കുന്ന 'regularization' ഉം സൂചിപ്പിക്കുന്നു. kernel വിവിധ [തരം](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC) ഉള്ളതിൽ നിന്നാണ്; ഇവിടെ 'linear' ആയി വച്ച് linear SVC ഉപയോഗിക്കുന്നത് ഉറപ്പാക്കുന്നു. Probability നിന്റെ മുന്നറിയിപ്പ് 'false' ആണെങ്കിലും, ഇവിടെ 'true' ആയി ക്രമീകരിച്ചിരിക്കുന്നു സാധ്യതാനിരീക്ഷണങ്ങള് ശേഖരിക്കാൻ. ഡാറ്റ ശഫിൾ ചെയ്യാൻ random state '0' ആയി നിശ്ചയിച്ചിട്ടുണ്ട്.
|
|
|
|
### അഭ്യാസം - ലിനിയർ SVC പ്രയോജനം ചെയ്യുക
|
|
|
|
ക്ലാസിഫയറുകളുടെ ഒരു നിര സംരചിക്കുക, ഞങ്ങൾ നിര്ണയം ചെയ്യുമ്പോൾ ഇതിലേക്ക് തുടരെകൂടി ചേർക്കുന്നു.
|
|
|
|
1. Linear SVC ഉം തുടങ്ങുക:
|
|
|
|
```python
|
|
C = 10
|
|
# വ്യത്യസ്ത ക്ലാസിഫയറുകൾ സൃഷ്ടിക്കുക.
|
|
classifiers = {
|
|
'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0)
|
|
}
|
|
```
|
|
|
|
2. Linear SVC ഉപയോഗിച്ച് നിങ്ങളുടെ മോഡല് പരിശീലിപ്പിച്ച് റിപ്പോര്ട്ട് അച്ചടിക്കുക:
|
|
|
|
```python
|
|
n_classifiers = len(classifiers)
|
|
|
|
for index, (name, classifier) in enumerate(classifiers.items()):
|
|
classifier.fit(X_train, np.ravel(y_train))
|
|
|
|
y_pred = classifier.predict(X_test)
|
|
accuracy = accuracy_score(y_test, y_pred)
|
|
print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100))
|
|
print(classification_report(y_test,y_pred))
|
|
```
|
|
|
|
ഫലം വളരെ നല്ലതാണെന്ന് കാണാം:
|
|
|
|
```output
|
|
Accuracy (train) for Linear SVC: 78.6%
|
|
precision recall f1-score support
|
|
|
|
chinese 0.71 0.67 0.69 242
|
|
indian 0.88 0.86 0.87 234
|
|
japanese 0.79 0.74 0.76 254
|
|
korean 0.85 0.81 0.83 242
|
|
thai 0.71 0.86 0.78 227
|
|
|
|
accuracy 0.79 1199
|
|
macro avg 0.79 0.79 0.79 1199
|
|
weighted avg 0.79 0.79 0.79 1199
|
|
```
|
|
|
|
## K-Neighbors ക്ലാസിഫയര്
|
|
|
|
K-Neighbors മെനമ്പരും മഹത്തായ പരമ്പരാഗത ആയ ML രീതികളില്നിന്നാണ്, അവ സൂപ്പർവൈസ്ഡ് ഉം അൺസൂപ്പർവൈസ്ഡ് പഠനത്തിനും ഉപയോഗിക്കാൻ കഴിയും. ഈ രീതിയില്, നിശ്ചിത എണ്ണത്തിലുള്ള പോയിന്റുകള് ഉണ്ടാക്കി ആ പോയിന്റുകളെ ചുറ്റി ഡാറ്റ ശേഖരിച്ച് ആ ഡാറ്റയ്ക്ക് പൊതുവായ ലേബലുകള് പ്രവചിക്കാം.
|
|
|
|
### അഭ്യാസം - K-Neighbors ക്ലാസിഫയറിനെ ബാധിക്കുക
|
|
|
|
മുന്ത്തെ ക്ലാസിഫയര് മികച്ചതു, ഡാറ്റയുമായി വളരെ നന്നായി പ്രവര്ത്തിച്ചു; പക്ഷേ കൃത്യത കുറേക്കൂടി മെച്ചമാകാമെന്ന് കാണാം. K-Neighbors ക്ലാസിഫയറിന് ശ്രമിക്കുക.
|
|
|
|
1. ക്ലാസിഫയർ നിരയിലെ ഒരു വരി ചേർക്കുക (Linear SVC വിഷയം കഴിഞ്ഞ്, ഒരു കോമ ബാധിക്കുക):
|
|
|
|
```python
|
|
'KNN classifier': KNeighborsClassifier(C),
|
|
```
|
|
|
|
ഫലം കൊച്ചുകൂടി മോശമാണ്:
|
|
|
|
```output
|
|
Accuracy (train) for KNN classifier: 73.8%
|
|
precision recall f1-score support
|
|
|
|
chinese 0.64 0.67 0.66 242
|
|
indian 0.86 0.78 0.82 234
|
|
japanese 0.66 0.83 0.74 254
|
|
korean 0.94 0.58 0.72 242
|
|
thai 0.71 0.82 0.76 227
|
|
|
|
accuracy 0.74 1199
|
|
macro avg 0.76 0.74 0.74 1199
|
|
weighted avg 0.76 0.74 0.74 1199
|
|
```
|
|
|
|
✅ [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) കുറിച്ച് ഭേദഗതി നേടുക
|
|
|
|
## Support Vector Classifier
|
|
|
|
Support-Vector ക്ലാസിഫയർ [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) കുടുംബത്തിലെ ML രീതികളിലാണ്, ക്ലാസിഫിക്കേഷൻ, റെഗ്രഷൻ നടപടികള്ക്ക് ഉപയോഗിക്കുന്നു. SVMs "പരിശീലന ഉദാഹരണങ്ങളെ സ്ഥിതികളായി മാപ്പ് ചെയ്യുന്നു" δύο വിഭാഗങ്ങളിലിടയിലെ ദൂരം പരമാവധി വരുത്തുന്നതിനായി. തുടര്ന്നുള്ള ഡാറ്റ ഈ സ്ഥലത്തു മാപ്പ്ചെച് അവരുടെ വിഭാഗം പ്രവചിക്കപ്പെടുന്നു.
|
|
|
|
### അഭ്യാസം - Support Vector Classifier പ്രയോജനം ചെയ്യുക
|
|
|
|
കുറച്ച് മെച്ചപ്പെട്ട കൃത്യതക്കായി Support Vector Classifier പരീക്ഷിക്കാം.
|
|
|
|
1. K-Neighbors വിഷയം കഴിഞ്ഞ് കോമ ചേർത്ത് ഈ വരി ചേർക്കുക:
|
|
|
|
```python
|
|
'SVC': SVC(),
|
|
```
|
|
|
|
ഫലം വളരെ നന്നായിരിക്കുന്നു!
|
|
|
|
```output
|
|
Accuracy (train) for SVC: 83.2%
|
|
precision recall f1-score support
|
|
|
|
chinese 0.79 0.74 0.76 242
|
|
indian 0.88 0.90 0.89 234
|
|
japanese 0.87 0.81 0.84 254
|
|
korean 0.91 0.82 0.86 242
|
|
thai 0.74 0.90 0.81 227
|
|
|
|
accuracy 0.83 1199
|
|
macro avg 0.84 0.83 0.83 1199
|
|
weighted avg 0.84 0.83 0.83 1199
|
|
```
|
|
|
|
✅ [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm) കുറിച്ച് പഠിക്കുക
|
|
|
|
## Ensemble Classifiers
|
|
|
|
മുൻ പരീക്ഷണം നല്ലതായിരുന്നു എന്നാൽ പാതയുടെ അവസാനം വരെ പോകാം, പ്രത്യേകിച്ച് Random Forest ആയും AdaBoost ആയും Ensemble Classifiers ഉപയോഗിക്കുക:
|
|
|
|
```python
|
|
'RFST': RandomForestClassifier(n_estimators=100),
|
|
'ADA': AdaBoostClassifier(n_estimators=100)
|
|
```
|
|
|
|
ഫലം വളരെ നല്ലതാണു, പ്രത്യേകിച്ച് Random Forest ന്:
|
|
|
|
```output
|
|
Accuracy (train) for RFST: 84.5%
|
|
precision recall f1-score support
|
|
|
|
chinese 0.80 0.77 0.78 242
|
|
indian 0.89 0.92 0.90 234
|
|
japanese 0.86 0.84 0.85 254
|
|
korean 0.88 0.83 0.85 242
|
|
thai 0.80 0.87 0.83 227
|
|
|
|
accuracy 0.84 1199
|
|
macro avg 0.85 0.85 0.84 1199
|
|
weighted avg 0.85 0.84 0.84 1199
|
|
|
|
Accuracy (train) for ADA: 72.4%
|
|
precision recall f1-score support
|
|
|
|
chinese 0.64 0.49 0.56 242
|
|
indian 0.91 0.83 0.87 234
|
|
japanese 0.68 0.69 0.69 254
|
|
korean 0.73 0.79 0.76 242
|
|
thai 0.67 0.83 0.74 227
|
|
|
|
accuracy 0.72 1199
|
|
macro avg 0.73 0.73 0.72 1199
|
|
weighted avg 0.73 0.72 0.72 1199
|
|
```
|
|
|
|
✅ [Ensemble Classifiers](https://scikit-learn.org/stable/modules/ensemble.html) കുറിച്ച് പഠിക്കുക
|
|
|
|
ഈ മെഷീൻ ലേണിംഗിലെ രീതി "വിഭിന്ന ബേസ് എസ്റ്റിമേറ്ററുകളുടെ പ്രവചനങ്ങൾ സംയോജിപ്പിച്ച്" മോഡലിന്റെ ഗുണമേൻമ വർദ്ധിപ്പിക്കുന്നു. നമ്മുടെ ഉദാഹരണത്തിൽ, റാൻഡം ട്രീസുകളും AdaBoost ഉം ഉപയോഗിച്ചു.
|
|
|
|
- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), ഒരു ശരാശരി രീതി, 'ഡെസിഷൻ ട്രീസിന്റെ' ' ഫോറസ്റ്റ്' നിർമ്മിക്കുന്നു, overfitting-നെ തടയാൻ യാദൃശ്ചികത ചേർത്തിരിക്കുന്നു. ന_estimators പാരാമീറ്റർ തൈകളുടെ എണ്ണം സ്വരൂപിക്കുന്നു.
|
|
|
|
- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) ഒരു ക്ലാസിഫയറെ ഡാറ്റാസെറ്റിൽ ഒപ്പം ഒത്ത പൊരുത്തപ്പെടുത്തുന്നു, പിന്നീട് അതേ ക്ലാസിഫയറിന്റെ പകർപ്പുകൾ സമാന ഡാറ്റയിൽ फिट് ചെയ്യുന്നു. തെറ്റായി ക്ലാസിഫൈ ചെയ്ത അംശങ്ങളുടെ ഭാരങ്ങളിൽ കേന്ദ്രീകരിക്കുന്നു, പിന്നിലെ ക്ലാസിഫയർക്ക് ശരിയാക്കി പരിഹരിക്കാനായി.
|
|
|
|
---
|
|
|
|
## 🚀ചിലവിടുന്നൊരു വെല്ലുവിളി
|
|
|
|
ഈ എല്ലാ സാങ്കേതിക രീതി പരമീറ്ററുകളുടെ ഒരു വലിയ എണ്ണം ഉണ്ട്, അതിനെ നിങ്ങൾ തിളക്കത്തിനായി ക്രമീകരിക്കാം. ഓരോവയുടെയും ഡീഫോൾട്ട് പാരാമീറ്ററുകൾ അന്വേഷിച്ച് എന്നാലും ഈ പാരാമീറ്ററുകൾ ക്രമീകരിക്കാൻ മോഡലിന്റെ ഗുണമേൻമയ്ക്ക് എന്തെല്ലാം പ്രഭാവമാകും എന്ന് ചിന്തിച്ചുകൊണ്ട് പഠിക്കുക.
|
|
|
|
## [പോസ്റ്റ്-ലെക്ഷർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
## അവലോകനം & സ്വയം പഠനം
|
|
|
|
ഈ പാഠങ്ങളിൽ ജെർഗൺ വളരെ ഉണ്ടാകുന്നു, കൃത്യമായി സമീക്ഷിക്കാൻ [ഈ പട്ടിക](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) പരിശോധിക്കുക!
|
|
|
|
## അസൈൻമെന്റ്
|
|
|
|
[പാരാമീറ്റർ പ്ലേ](assignment.md)
|
|
|
|
---
|
|
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
|
**പ്രതിഭാസവ്യവസ്ഥ**:
|
|
ഈ രേഖ AI വിവർത്തന സേവനമായ [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. ഞങ്ങൾ ശരിയായ വിവർത്തനം നൽകാൻ ശ്രമിച്ചുവെങ്കിലും, യാന്ത്രിക വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ സാധുവല്ലാത്ത വിശദാംശങ്ങൾ ഉണ്ടാകാമെന്നും ശ്രദ്ധിക്കണം. നാടൻ ഭാഷയിലുള്ള നിലവിലുള്ള രേഖയാണ് അധികാരപരമായ ഉറവിടം എന്നുള്ള കാര്യം മനസ്സിലാക്കുക. അത്യാവശ്യമുള്ള വിവരങ്ങൾക്കായി പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം നിർദ്ദേശിക്കപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിച്ചതിൽ നിന്നുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER END --> |