# Ehita köögi soovitaja veebirakendus
Selles õppetükis ehitad klassifikatsioonimudeli, kasutades mõningaid tehnikaid, mida oled õppinud eelnevates tundides, ja maitsvat köögidatasetit, mida on kasutatud kogu selle sarja jooksul. Lisaks ehitad väikese veebirakenduse, et kasutada salvestatud mudelit, kasutades Onnxi veebiruntime'i.
Masinõppe üks kasulikumaid praktilisi rakendusi on soovitussüsteemide loomine, ja täna saad teha esimese sammu selles suunas!
[](https://youtu.be/17wdM9AHMfg "Rakendatud ML")
> 🎥 Klõpsa ülaloleval pildil, et vaadata videot: Jen Looper ehitab veebirakenduse, kasutades klassifitseeritud köögidatasetit
## [Eeltesti küsimustik](https://ff-quizzes.netlify.app/en/ml/)
Selles õppetükis õpid:
- Kuidas ehitada mudelit ja salvestada see Onnx mudelina
- Kuidas kasutada Netronit mudeli kontrollimiseks
- Kuidas kasutada oma mudelit veebirakenduses järelduste tegemiseks
## Ehita oma mudel
Rakendatud ML-süsteemide ehitamine on oluline osa nende tehnoloogiate kasutamisest ärisüsteemides. Sa saad kasutada mudeleid oma veebirakendustes (ja seega kasutada neid vajadusel ka võrguühenduseta kontekstis), kasutades Onnxi.
[Varasemas õppetükis](../../3-Web-App/1-Web-App/README.md) ehitasid regressioonimudeli UFO vaatlustest, "marineerisid" selle ja kasutasid seda Flaski rakenduses. Kuigi see arhitektuur on väga kasulik, on see täisstack Python rakendus, ja sinu nõuded võivad hõlmata JavaScripti rakenduse kasutamist.
Selles õppetükis saad ehitada lihtsa JavaScript-põhise süsteemi järelduste tegemiseks. Kõigepealt pead aga treenima mudeli ja konverteerima selle Onnxi jaoks.
## Harjutus - treeni klassifikatsioonimudel
Kõigepealt treeni klassifikatsioonimudel, kasutades puhastatud köögidatasetit, mida me kasutasime.
1. Alusta kasulike teekide importimisega:
```python
!pip install skl2onnx
import pandas as pd
```
Vajad '[skl2onnx](https://onnx.ai/sklearn-onnx/)', et aidata oma Scikit-learn mudelit Onnx formaati konverteerida.
1. Seejärel töötle oma andmeid samamoodi nagu eelnevates tundides, lugedes CSV-faili `read_csv()` abil:
```python
data = pd.read_csv('../data/cleaned_cuisines.csv')
data.head()
```
1. Eemalda esimesed kaks mittevajalikku veergu ja salvesta ülejäänud andmed kui 'X':
```python
X = data.iloc[:,2:]
X.head()
```
1. Salvesta sildid kui 'y':
```python
y = data[['cuisine']]
y.head()
```
### Alusta treeningrutiiini
Kasutame 'SVC' teeki, millel on hea täpsus.
1. Impordi sobivad teegid Scikit-learnist:
```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. Eralda treening- ja testkomplektid:
```python
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3)
```
1. Ehita SVC klassifikatsioonimudel nagu tegid eelnevas õppetükis:
```python
model = SVC(kernel='linear', C=10, probability=True,random_state=0)
model.fit(X_train,y_train.values.ravel())
```
1. Nüüd testi oma mudelit, kutsudes `predict()`:
```python
y_pred = model.predict(X_test)
```
1. Prindi välja klassifikatsiooniraport, et kontrollida mudeli kvaliteeti:
```python
print(classification_report(y_test,y_pred))
```
Nagu nägime varem, on täpsus hea:
```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
```
### Konverteeri oma mudel Onnxi formaati
Veendu, et konverteerimine toimub õige tensorarvuga. Selles datasetis on loetletud 380 koostisosa, seega pead märkima selle arvu `FloatTensorType`-is:
1. Konverteeri, kasutades tensorarvuna 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. Loo onx ja salvesta failina **model.onnx**:
```python
onx = convert_sklearn(model, initial_types=initial_type, options=options)
with open("./model.onnx", "wb") as f:
f.write(onx.SerializeToString())
```
> Märkus: Sa saad oma konverteerimisskripti [valikuid](https://onnx.ai/sklearn-onnx/parameterized.html) edastada. Selles näites edastasime 'nocl', et see oleks True, ja 'zipmap', et see oleks False. Kuna tegemist on klassifikatsioonimudeliga, on sul võimalus eemaldada ZipMap, mis toodab loendi sõnastikest (pole vajalik). `nocl` viitab klassiinfo kaasamisele mudelisse. Vähenda oma mudeli suurust, määrates `nocl` väärtuseks 'True'.
Kui käivitad kogu märkmiku, ehitatakse Onnx mudel ja salvestatakse see kausta.
## Vaata oma mudelit
Onnx mudelid ei ole Visual Studio koodis väga nähtavad, kuid on olemas väga hea tasuta tarkvara, mida paljud teadlased kasutavad mudeli visualiseerimiseks, et veenduda selle õiges ehitamises. Laadi alla [Netron](https://github.com/lutzroeder/Netron) ja ava oma model.onnx fail. Näed oma lihtsat mudelit visualiseerituna, koos selle 380 sisendi ja klassifikaatoriga:

Netron on kasulik tööriist mudelite vaatamiseks.
Nüüd oled valmis kasutama seda lahedat mudelit veebirakenduses. Ehita rakendus, mis tuleb kasuks, kui vaatad oma külmkappi ja püüad välja mõelda, millist kombinatsiooni oma ülejäänud koostisosadest saad kasutada, et valmistada mudeli määratud kööki.
## Ehita soovitaja veebirakendus
Sa saad oma mudelit otse veebirakenduses kasutada. See arhitektuur võimaldab seda ka kohapeal ja isegi võrguühenduseta kasutada, kui vaja. Alusta, luues `index.html` faili samasse kausta, kuhu salvestasid oma `model.onnx` faili.
1. Selles failis _index.html_ lisa järgmine märgistus:
```html