# کھانے کی سفارش کرنے والی ویب ایپ بنائیں
اس سبق میں، آپ ایک درجہ بندی ماڈل بنائیں گے، جو آپ نے پچھلے اسباق میں سیکھے گئے تکنیکوں کا استعمال کرتے ہوئے اور اس سیریز میں استعمال ہونے والے مزیدار کھانوں کے ڈیٹا سیٹ کے ساتھ ہوگا۔ اس کے علاوہ، آپ ایک چھوٹی ویب ایپ بنائیں گے جو محفوظ کردہ ماڈل کو استعمال کرے گی، Onnx کے ویب رن ٹائم کا فائدہ اٹھاتے ہوئے۔
مشین لرننگ کے سب سے مفید عملی استعمال میں سے ایک سفارش کرنے والے نظام بنانا ہے، اور آپ آج اس سمت میں پہلا قدم اٹھا سکتے ہیں!
> 🎥 اوپر دی گئی تصویر پر کلک کریں ویڈیو کے لیے: جین لوپر درجہ بند کھانوں کے ڈیٹا کا استعمال کرتے ہوئے ایک ویب ایپ بناتی ہیں
## [سبق سے پہلے کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
اس سبق میں آپ سیکھیں گے:
- ماڈل کیسے بنائیں اور اسے Onnx ماڈل کے طور پر محفوظ کریں
- Netron کا استعمال کرکے ماڈل کا معائنہ کیسے کریں
- اپنے ماڈل کو ویب ایپ میں انفرنس کے لیے کیسے استعمال کریں
## اپنا ماڈل بنائیں
مشین لرننگ کے عملی نظام بنانا ان ٹیکنالوجیز کو آپ کے کاروباری نظاموں کے لیے فائدہ مند بنانے کا ایک اہم حصہ ہے۔ آپ اپنے ویب ایپلیکیشنز میں ماڈلز استعمال کر سکتے ہیں (اور اگر ضرورت ہو تو انہیں آف لائن سیاق و سباق میں بھی استعمال کر سکتے ہیں) Onnx کا استعمال کرتے ہوئے۔
ایک [پچھلے سبق](../../3-Web-App/1-Web-App/README.md) میں، آپ نے UFO مشاہدات کے بارے میں ایک ریگریشن ماڈل بنایا، اسے "پکل" کیا، اور اسے Flask ایپ میں استعمال کیا۔ اگرچہ یہ فن تعمیر جاننا بہت مفید ہے، یہ ایک مکمل اسٹیک Python ایپ ہے، اور آپ کی ضروریات میں JavaScript ایپلیکیشن کا استعمال شامل ہو سکتا ہے۔
اس سبق میں، آپ انفرنس کے لیے ایک بنیادی JavaScript پر مبنی نظام بنا سکتے ہیں۔ لیکن پہلے، آپ کو ایک ماڈل تربیت دینا ہوگا اور اسے Onnx کے ساتھ استعمال کے لیے تبدیل کرنا ہوگا۔
## مشق - درجہ بندی ماڈل کی تربیت کریں
سب سے پہلے، صاف شدہ کھانوں کے ڈیٹا سیٹ کا استعمال کرتے ہوئے ایک درجہ بندی ماڈل تربیت کریں۔
1. مفید لائبریریاں درآمد کریں:
```python
!pip install skl2onnx
import pandas as pd
```
آپ کو '[skl2onnx](https://onnx.ai/sklearn-onnx/)' کی ضرورت ہوگی تاکہ اپنے Scikit-learn ماڈل کو 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 میں تبدیل کریں
یقینی بنائیں کہ تبدیلی مناسب Tensor نمبر کے ساتھ کریں۔ اس ڈیٹا سیٹ میں 380 اجزاء درج ہیں، لہذا آپ کو `FloatTensorType` میں اس نمبر کو نوٹ کرنا ہوگا:
1. 380 کے Tensor نمبر کا استعمال کرتے ہوئے تبدیل کریں۔
```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' کو True اور 'zipmap' کو False پاس کیا۔ چونکہ یہ ایک درجہ بندی ماڈل ہے، آپ کے پاس 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