# Construire une application web de recommandation de cuisine
Dans cette leçon, vous allez créer un modèle de classification en utilisant certaines des techniques apprises dans les leçons précédentes, ainsi que le délicieux ensemble de données sur les cuisines utilisé tout au long de cette série. De plus, vous allez construire une petite application web pour utiliser un modèle sauvegardé, en exploitant le runtime web d'Onnx.
L'un des usages pratiques les plus utiles de l'apprentissage automatique est la création de systèmes de recommandation, et vous pouvez faire le premier pas dans cette direction dès aujourd'hui !
[](https://youtu.be/17wdM9AHMfg "ML appliqué")
> 🎥 Cliquez sur l'image ci-dessus pour une vidéo : Jen Looper construit une application web en utilisant des données de cuisine classifiées
## [Quiz avant la leçon](https://ff-quizzes.netlify.app/en/ml/)
Dans cette leçon, vous apprendrez :
- Comment construire un modèle et le sauvegarder au format Onnx
- Comment utiliser Netron pour inspecter le modèle
- Comment utiliser votre modèle dans une application web pour effectuer des inférences
## Construisez votre modèle
Construire des systèmes d'apprentissage automatique appliqué est une partie importante de l'exploitation de ces technologies pour vos systèmes d'entreprise. Vous pouvez utiliser des modèles dans vos applications web (et donc les utiliser hors ligne si nécessaire) en utilisant Onnx.
Dans une [leçon précédente](../../3-Web-App/1-Web-App/README.md), vous avez construit un modèle de régression sur les observations d'OVNI, l'avez "picklé" et utilisé dans une application Flask. Bien que cette architecture soit très utile à connaître, il s'agit d'une application Python full-stack, et vos besoins peuvent inclure l'utilisation d'une application JavaScript.
Dans cette leçon, vous pouvez construire un système de base basé sur JavaScript pour effectuer des inférences. Cependant, vous devez d'abord entraîner un modèle et le convertir pour une utilisation avec Onnx.
## Exercice - entraîner un modèle de classification
Commencez par entraîner un modèle de classification en utilisant l'ensemble de données nettoyé sur les cuisines que nous avons utilisé.
1. Commencez par importer des bibliothèques utiles :
```python
!pip install skl2onnx
import pandas as pd
```
Vous avez besoin de '[skl2onnx](https://onnx.ai/sklearn-onnx/)' pour aider à convertir votre modèle Scikit-learn au format Onnx.
1. Ensuite, travaillez avec vos données de la même manière que dans les leçons précédentes, en lisant un fichier CSV avec `read_csv()` :
```python
data = pd.read_csv('../data/cleaned_cuisines.csv')
data.head()
```
1. Supprimez les deux premières colonnes inutiles et sauvegardez les données restantes sous 'X' :
```python
X = data.iloc[:,2:]
X.head()
```
1. Sauvegardez les étiquettes sous 'y' :
```python
y = data[['cuisine']]
y.head()
```
### Commencez la routine d'entraînement
Nous utiliserons la bibliothèque 'SVC' qui offre une bonne précision.
1. Importez les bibliothèques appropriées de 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. Séparez les ensembles d'entraînement et de test :
```python
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3)
```
1. Construisez un modèle de classification SVC comme vous l'avez fait dans la leçon précédente :
```python
model = SVC(kernel='linear', C=10, probability=True,random_state=0)
model.fit(X_train,y_train.values.ravel())
```
1. Maintenant, testez votre modèle en appelant `predict()` :
```python
y_pred = model.predict(X_test)
```
1. Affichez un rapport de classification pour vérifier la qualité du modèle :
```python
print(classification_report(y_test,y_pred))
```
Comme nous l'avons vu précédemment, la précision est bonne :
```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
```
### Convertissez votre modèle en Onnx
Assurez-vous de faire la conversion avec le bon nombre de tenseurs. Cet ensemble de données contient 380 ingrédients listés, donc vous devez noter ce nombre dans `FloatTensorType` :
1. Convertissez en utilisant un nombre de tenseurs de 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. Créez le fichier onx et sauvegardez-le sous **model.onnx** :
```python
onx = convert_sklearn(model, initial_types=initial_type, options=options)
with open("./model.onnx", "wb") as f:
f.write(onx.SerializeToString())
```
> Notez que vous pouvez passer des [options](https://onnx.ai/sklearn-onnx/parameterized.html) dans votre script de conversion. Dans ce cas, nous avons passé 'nocl' à True et 'zipmap' à False. Étant donné qu'il s'agit d'un modèle de classification, vous avez l'option de supprimer ZipMap qui produit une liste de dictionnaires (non nécessaire). `nocl` fait référence à l'inclusion des informations de classe dans le modèle. Réduisez la taille de votre modèle en définissant `nocl` sur 'True'.
Exécuter l'ensemble du notebook permettra maintenant de construire un modèle Onnx et de le sauvegarder dans ce dossier.
## Visualisez votre modèle
Les modèles Onnx ne sont pas très visibles dans Visual Studio Code, mais il existe un excellent logiciel gratuit que de nombreux chercheurs utilisent pour visualiser le modèle et s'assurer qu'il est correctement construit. Téléchargez [Netron](https://github.com/lutzroeder/Netron) et ouvrez votre fichier model.onnx. Vous pouvez voir votre modèle simple visualisé, avec ses 380 entrées et son classificateur listé :

Netron est un outil utile pour visualiser vos modèles.
Vous êtes maintenant prêt à utiliser ce modèle dans une application web. Construisons une application qui sera utile lorsque vous regardez dans votre réfrigérateur et essayez de déterminer quelle combinaison de vos ingrédients restants vous pouvez utiliser pour cuisiner une cuisine donnée, comme déterminé par votre modèle.
## Construisez une application web de recommandation
Vous pouvez utiliser votre modèle directement dans une application web. Cette architecture permet également de l'exécuter localement et même hors ligne si nécessaire. Commencez par créer un fichier `index.html` dans le même dossier où vous avez sauvegardé votre fichier `model.onnx`.
1. Dans ce fichier _index.html_, ajoutez le balisage suivant :
```html