# ഒരു ക്യൂസീൻ ശുപാർശ വെബ് ആപ്പ് നിർമ്മിക്കുക
ഈ പാഠത്തിൽ, നിങ്ങൾ മുമ്പത്തെ പാഠങ്ങളിൽ പഠിച്ച ചില സാങ്കേതിക വിദ്യകൾ ഉപയോഗിച്ച് ക്ലാസിഫിക്കേഷൻ മോഡൽ നിർമ്മിക്കുകയും ഈ പരമ്പരയിൽ മുഴുവൻ ഉപയോഗിച്ച രുചികരമായ ക്യൂസീൻ ഡാറ്റാസെറ്റ് ഉപയോഗിച്ച് അത് നിർമിക്കുകയും ചെയ്യും. കൂടാതെ, Onnx-ന്റെ വെബ് റൺടൈം ഉപയോഗിച്ച് സേവ് ചെയ്ത മോഡൽ ഉപയോഗിക്കുന്ന ഒരു ചെറിയ വെബ് ആപ്പ് നിർമ്മിക്കും.
മെഷീൻ ലേണിങ്ങിന്റെ ഏറ്റവും പ്രയോജനകരമായ പ്രായോഗിക ഉപയോഗങ്ങളിൽ ഒന്നാണ് ശുപാർശാ സംവിധാനങ്ങൾ നിർമ്മിക്കുന്നത്, ഇന്ന് നിങ്ങൾ ആ ദിശയിൽ ആദ്യപടി എടുക്കാം!
[](https://youtu.be/17wdM9AHMfg "Applied ML")
> 🎥 വീഡിയോക്കായി മുകളിൽ ചിത്രത്തിൽ ക്ലിക്ക് ചെയ്യുക: ജെൻ ലൂപ്പർ ക്ലാസിഫൈ ചെയ്ത ക്യൂസീൻ ഡാറ്റ ഉപയോഗിച്ച് വെബ് ആപ്പ് നിർമ്മിക്കുന്നു
## [പ്രീ-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/en/ml/)
ഈ പാഠത്തിൽ നിങ്ങൾ പഠിക്കാനിരിക്കുന്നത്:
- മോഡൽ നിർമ്മിച്ച് Onnx മോഡലായി സേവ് ചെയ്യുന്നത് എങ്ങനെ
- മോഡൽ പരിശോധിക്കാൻ Netron എങ്ങനെ ഉപയോഗിക്കാം
- നിങ്ങളുടെ മോഡൽ വെബ് ആപ്പിൽ ഇൻഫറൻസിനായി എങ്ങനെ ഉപയോഗിക്കാം
## നിങ്ങളുടെ മോഡൽ നിർമ്മിക്കുക
പ്രായോഗിക ML സിസ്റ്റങ്ങൾ നിർമ്മിക്കുന്നത് ഈ സാങ്കേതിക വിദ്യകൾ നിങ്ങളുടെ ബിസിനസ് സിസ്റ്റങ്ങളിൽ പ്രയോജനപ്പെടുത്തുന്നതിന്റെ ഒരു പ്രധാന ഭാഗമാണ്. Onnx ഉപയോഗിച്ച് നിങ്ങൾക്ക് നിങ്ങളുടെ വെബ് ആപ്പുകളിൽ മോഡലുകൾ ഉപയോഗിക്കാം (ആവശ്യമായാൽ ഓഫ്ലൈൻ സാഹചര്യത്തിലും ഉപയോഗിക്കാം).
[മുമ്പത്തെ പാഠത്തിൽ](../../3-Web-App/1-Web-App/README.md), നിങ്ങൾ UFO സൈറ്റിംഗുകളെക്കുറിച്ചുള്ള Regression മോഡൽ നിർമ്മിച്ച്, അത് "പിക്കിൾ" ചെയ്ത് Flask ആപ്പിൽ ഉപയോഗിച്ചിരുന്നു. ഈ ആർക്കിടെക്ചർ അറിയുന്നത് വളരെ പ്രയോജനകരമാണ്, പക്ഷേ അത് ഒരു ഫുൾ-സ്റ്റാക്ക് പൈത്തൺ ആപ്പാണ്, നിങ്ങളുടെ ആവശ്യങ്ങൾ ജാവാസ്ക്രിപ്റ്റ് ആപ്ലിക്കേഷൻ ഉപയോഗിക്കലും ഉൾക്കൊള്ളാം.
ഈ പാഠത്തിൽ, നിങ്ങൾ അടിസ്ഥാന ജാവാസ്ക്രിപ്റ്റ് അടിസ്ഥാനമാക്കിയുള്ള ഇൻഫറൻസ് സിസ്റ്റം നിർമ്മിക്കാം. ആദ്യം, മോഡൽ പരിശീലിപ്പിച്ച് Onnx ഉപയോഗിക്കാൻ മാറ്റണം.
## അഭ്യാസം - ക്ലാസിഫിക്കേഷൻ മോഡൽ പരിശീലിപ്പിക്കുക
ആദ്യം, നാം ഉപയോഗിച്ച ക്ലീനായ ക്യൂസീൻ ഡാറ്റാസെറ്റ് ഉപയോഗിച്ച് ക്ലാസിഫിക്കേഷൻ മോഡൽ പരിശീലിപ്പിക്കുക.
1. പ്രയോജനകരമായ ലൈബ്രറികൾ ഇറക്കുമതി ചെയ്യുക:
```python
!pip install skl2onnx
import pandas as pd
```
നിങ്ങളുടെ Scikit-learn മോഡൽ Onnx ഫോർമാറ്റിലേക്ക് മാറ്റാൻ '[skl2onnx](https://onnx.ai/sklearn-onnx/)' ആവശ്യമാണ്.
1. തുടർന്ന്, മുമ്പത്തെ പാഠങ്ങളിൽ ചെയ്തതുപോലെ `read_csv()` ഉപയോഗിച്ച് CSV ഫയൽ വായിച്ച് ഡാറ്റ കൈകാര്യം ചെയ്യുക:
```python
data = pd.read_csv('../data/cleaned_cuisines.csv')
data.head()
```
1. ആദ്യ രണ്ട് അനാവശ്യ കോളങ്ങൾ നീക്കം ചെയ്ത് ശേഷിക്കുന്ന ഡാറ്റ 'X' ആയി സേവ് ചെയ്യുക:
```python
X = data.iloc[:,2:]
X.head()
```
1. ലേബലുകൾ 'y' ആയി സേവ് ചെയ്യുക:
```python
y = data[['cuisine']]
y.head()
```
### പരിശീലന രീതി ആരംഭിക്കുക
നല്ല കൃത്യതയുള്ള 'SVC' ലൈബ്രറി ഉപയോഗിക്കും.
1. Scikit-learn-ൽ നിന്നുള്ള അനുയോജ്യമായ ലൈബ്രറികൾ ഇറക്കുമതി ചെയ്യുക:
```python
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score
from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report
```
1. പരിശീലനവും ടെസ്റ്റ് സെറ്റുകളും വേർതിരിക്കുക:
```python
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3)
```
1. മുമ്പത്തെ പാഠത്തിൽ ചെയ്തതുപോലെ SVC ക്ലാസിഫിക്കേഷൻ മോഡൽ നിർമ്മിക്കുക:
```python
model = SVC(kernel='linear', C=10, probability=True,random_state=0)
model.fit(X_train,y_train.values.ravel())
```
1. ഇപ്പോൾ, predict() വിളിച്ച് മോഡൽ പരീക്ഷിക്കുക:
```python
y_pred = model.predict(X_test)
```
1. മോഡലിന്റെ ഗുണനിലവാരം പരിശോധിക്കാൻ ക്ലാസിഫിക്കേഷൻ റിപ്പോർട്ട് പ്രിന്റ് ചെയ്യുക:
```python
print(classification_report(y_test,y_pred))
```
മുമ്പ് കണ്ടതുപോലെ, കൃത്യത നല്ലതാണ്:
```output
precision recall f1-score support
chinese 0.72 0.69 0.70 257
indian 0.91 0.87 0.89 243
japanese 0.79 0.77 0.78 239
korean 0.83 0.79 0.81 236
thai 0.72 0.84 0.78 224
accuracy 0.79 1199
macro avg 0.79 0.79 0.79 1199
weighted avg 0.79 0.79 0.79 1199
```
### നിങ്ങളുടെ മോഡൽ Onnx-ലേക്ക് മാറ്റുക
ശരിയായ ടെൻസർ നമ്പർ ഉപയോഗിച്ച് മാറ്റം നടത്തുക. ഈ ഡാറ്റാസെറ്റിൽ 380 ഘടകങ്ങൾ ഉണ്ട്, അതിനാൽ `FloatTensorType`-ൽ ആ നമ്പർ രേഖപ്പെടുത്തണം:
1. 380 എന്ന ടെൻസർ നമ്പർ ഉപയോഗിച്ച് മാറ്റുക.
```python
from skl2onnx import convert_sklearn
from skl2onnx.common.data_types import FloatTensorType
initial_type = [('float_input', FloatTensorType([None, 380]))]
options = {id(model): {'nocl': True, 'zipmap': False}}
```
1. onx സൃഷ്ടിച്ച് **model.onnx** എന്ന ഫയലായി സേവ് ചെയ്യുക:
```python
onx = convert_sklearn(model, initial_types=initial_type, options=options)
with open("./model.onnx", "wb") as f:
f.write(onx.SerializeToString())
```
> ശ്രദ്ധിക്കുക, നിങ്ങളുടെ മാറ്റം സ്ക്രിപ്റ്റിൽ [ഓപ്ഷനുകൾ](https://onnx.ai/sklearn-onnx/parameterized.html) നൽകാം. ഈ കേസിൽ, 'nocl' സത്യം ആക്കുകയും 'zipmap' തെറ്റായി സജ്ജമാക്കുകയും ചെയ്തു. ഇത് ക്ലാസിഫിക്കേഷൻ മോഡലായതിനാൽ ZipMap നീക്കം ചെയ്യാനുള്ള ഓപ്ഷൻ ഉണ്ട് (അവശ്യമായില്ല). `nocl` മോഡലിൽ ക്ലാസ് വിവരങ്ങൾ ഉൾപ്പെടുന്നതിനെ സൂചിപ്പിക്കുന്നു. `nocl` 'True' ആക്കി മോഡലിന്റെ വലിപ്പം കുറയ്ക്കാം.
പൂർണ്ണ നോട്ട്ബുക്ക് റൺ ചെയ്താൽ Onnx മോഡൽ നിർമ്മിച്ച് ഈ ഫോൾഡറിൽ സേവ് ചെയ്യും.
## നിങ്ങളുടെ മോഡൽ കാണുക
Onnx മോഡലുകൾ Visual Studio കോഡിൽ വളരെ ദൃശ്യമായില്ല, പക്ഷേ മോഡൽ ശരിയായി നിർമ്മിച്ചതെന്ന് ഉറപ്പാക്കാൻ പല ഗവേഷകരും ഉപയോഗിക്കുന്ന നല്ല സൗജന്യ സോഫ്റ്റ്വെയർ ഉണ്ട്. [Netron](https://github.com/lutzroeder/Netron) ഡൗൺലോഡ് ചെയ്ത് model.onnx ഫയൽ തുറക്കുക. 380 ഇൻപുട്ടുകളും ക്ലാസിഫയർ ലിസ്റ്റും ഉള്ള ലളിതമായ മോഡൽ ദൃശ്യമായി കാണാം:

Netron നിങ്ങളുടെ മോഡലുകൾ കാണാൻ സഹായിക്കുന്ന ഉപകരണം ആണ്.
ഇപ്പോൾ ഈ മനോഹരമായ മോഡൽ വെബ് ആപ്പിൽ ഉപയോഗിക്കാൻ തയ്യാറാണ്. നിങ്ങളുടെ ഫ്രിഡ്ജിൽ നോക്കി ബാക്കി ഉള്ള ഘടകങ്ങൾ ഉപയോഗിച്ച് ഏത് ക്യൂസീൻ പാചകം ചെയ്യാമെന്ന് കണ്ടെത്താൻ സഹായിക്കുന്ന ഒരു ആപ്പ് നിർമ്മിക്കാം, നിങ്ങളുടെ മോഡൽ നിർദ്ദേശിക്കുന്നതുപോലെ.
## ശുപാർശാ വെബ് ആപ്പ് നിർമ്മിക്കുക
നിങ്ങളുടെ മോഡൽ നേരിട്ട് വെബ് ആപ്പിൽ ഉപയോഗിക്കാം. ഈ ആർക്കിടെക്ചർ ലോക്കലായി പോലും ഓൺലൈൻ അല്ലാതെ പ്രവർത്തിക്കാൻ അനുവദിക്കുന്നു. `model.onnx` ഫയൽ സേവ് ചെയ്ത ഫോൾഡറിൽ `index.html` ഫയൽ സൃഷ്ടിച്ച് തുടങ്ങുക.
1. ഈ _index.html_ ഫയലിൽ താഴെ കാണുന്ന മാർക്കപ്പ് ചേർക്കുക:
```html