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.
ML-For-Beginners/translations/pa/4-Classification/4-Applied/README.md

160 lines
12 KiB

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "ad2cf19d7490247558d20a6a59650d13",
"translation_date": "2025-08-29T17:54:02+00:00",
"source_file": "4-Classification/4-Applied/README.md",
"language_code": "pa"
}
-->
# ਖਾਣੇ ਦੀ ਸਿਫਾਰਸ਼ ਕਰਨ ਵਾਲਾ ਵੈੱਬ ਐਪ ਬਣਾਓ
ਇਸ ਪਾਠ ਵਿੱਚ, ਤੁਸੀਂ ਪਿਛਲੇ ਪਾਠਾਂ ਵਿੱਚ ਸਿੱਖੀਆਂ ਕੁਝ ਤਕਨੀਕਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਇੱਕ ਵਰਗੀਕਰਨ ਮਾਡਲ ਬਣਾਉਗੇ ਅਤੇ ਇਸ ਸਿਰੀਜ਼ ਵਿੱਚ ਵਰਤੇ ਗਏ ਸੁਆਦਿਸ਼ਟ ਖਾਣੇ ਦੇ ਡਾਟਾਸੈਟ ਨਾਲ ਕੰਮ ਕਰੋਗੇ। ਇਸ ਤੋਂ ਇਲਾਵਾ, ਤੁਸੀਂ ਇੱਕ ਛੋਟਾ ਵੈੱਬ ਐਪ ਬਣਾਉਗੇ ਜੋ ਸੇਵ ਕੀਤੇ ਮਾਡਲ ਨੂੰ ਵਰਤਦਾ ਹੈ, Onnx ਦੇ ਵੈੱਬ ਰਨਟਾਈਮ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ।
ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਦੇ ਸਭ ਤੋਂ ਉਪਯੋਗ ਅਮਲੀ ਉਪਯੋਗਤਾਵਾਂ ਵਿੱਚੋਂ ਇੱਕ ਸਿਫਾਰਸ਼ੀ ਸਿਸਟਮ ਬਣਾਉਣਾ ਹੈ, ਅਤੇ ਤੁਸੀਂ ਅੱਜ ਉਸ ਦਿਸ਼ਾ ਵਿੱਚ ਪਹਿਲਾ ਕਦਮ ਲੈ ਸਕਦੇ ਹੋ!
> 🎥 ਉਪਰ ਦਿੱਤੀ ਤਸਵੀਰ 'ਤੇ ਕਲਿਕ ਕਰੋ ਇੱਕ ਵੀਡੀਓ ਲਈ: ਜੈਨ ਲੂਪਰ ਵਰਗੀਕ੍ਰਿਤ ਖਾਣੇ ਦੇ ਡਾਟਾ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਇੱਕ ਵੈੱਬ ਐਪ ਬਣਾਉਂਦੀ ਹੈ
## [ਪਾਠ ਤੋਂ ਪਹਿਲਾਂ ਕਵਿਜ਼](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25/)
ਇਸ ਪਾਠ ਵਿੱਚ ਤੁਸੀਂ ਸਿੱਖੋਗੇ:
- ਮਾਡਲ ਬਣਾਉਣਾ ਅਤੇ ਇਸਨੂੰ Onnx ਮਾਡਲ ਵਜੋਂ ਸੇਵ ਕਰਨਾ
- Netron ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਮਾਡਲ ਦੀ ਜਾਂਚ ਕਰਨੀ
- ਆਪਣੇ ਮਾਡਲ ਨੂੰ ਵੈੱਬ ਐਪ ਵਿੱਚ ਇਨਫਰੈਂਸ ਲਈ ਵਰਤਣਾ
## ਆਪਣਾ ਮਾਡਲ ਬਣਾਓ
ਅਮਲੀ ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਸਿਸਟਮ ਬਣਾਉਣਾ ਤੁਹਾਡੇ ਕਾਰੋਬਾਰੀ ਸਿਸਟਮਾਂ ਲਈ ਇਹ ਤਕਨਾਲੋਜੀਆਂ ਦੀ ਵਰਤੋਂ ਕਰਨ ਦਾ ਇੱਕ ਮਹੱਤਵਪੂਰਨ ਹਿੱਸਾ ਹੈ। ਤੁਸੀਂ ਆਪਣੇ ਵੈੱਬ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ ਮਾਡਲਾਂ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ (ਅਤੇ ਜੇ ਲੋੜ ਹੋਵੇ ਤਾਂ ਆਫਲਾਈਨ ਸੰਦਰਭ ਵਿੱਚ ਵੀ) Onnx ਦੀ ਵਰਤੋਂ ਕਰਕੇ।
ਇੱਕ [ਪਿਛਲੇ ਪਾਠ](../../3-Web-App/1-Web-App/README.md) ਵਿੱਚ, ਤੁਸੀਂ UFO ਦੇ ਦ੍ਰਿਸ਼ਾਂ ਬਾਰੇ ਇੱਕ ਰਿਗ੍ਰੈਸ਼ਨ ਮਾਡਲ ਬਣਾਇਆ ਸੀ, ਇਸਨੂੰ "ਪਿਕਲ" ਕੀਤਾ ਸੀ, ਅਤੇ ਇਸਨੂੰ ਇੱਕ Flask ਐਪ ਵਿੱਚ ਵਰਤਿਆ ਸੀ। ਜਦੋਂ ਕਿ ਇਹ ਆਰਕੀਟੈਕਚਰ ਜਾਣਨ ਲਈ ਬਹੁਤ ਹੀ ਲਾਭਦਾਇਕ ਹੈ, ਇਹ ਇੱਕ ਫੁੱਲ-ਸਟੈਕ ਪਾਈਥਨ ਐਪ ਹੈ, ਅਤੇ ਤੁਹਾਡੇ ਜ਼ਰੂਰਤਾਂ ਵਿੱਚ ਜਾਵਾਸਕ੍ਰਿਪਟ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਵਰਤੋਂ ਸ਼ਾਮਲ ਹੋ ਸਕਦੀ ਹੈ।
ਇਸ ਪਾਠ ਵਿੱਚ, ਤੁਸੀਂ ਇਨਫਰੈਂਸ ਲਈ ਇੱਕ ਬੁਨਿਆਦੀ ਜਾਵਾਸਕ੍ਰਿਪਟ-ਅਧਾਰਿਤ ਸਿਸਟਮ ਬਣਾਉਣਗੇ। ਪਹਿਲਾਂ, ਹਾਲਾਂਕਿ, ਤੁਹਾਨੂੰ ਇੱਕ ਮਾਡਲ ਟ੍ਰੇਨ ਕਰਨਾ ਅਤੇ ਇਸਨੂੰ 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 ਵਿੱਚ ਰੂਪਾਂਤਰਿਤ ਕਰੋ
ਸਹੀ ਟੈਂਸਰ ਨੰਬਰ ਨਾਲ ਰੂਪਾਂਤਰਣ ਯਕੀਨੀ ਬਣਾਓ। ਇਸ ਡਾਟਾਸੈਟ ਵਿੱਚ 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. Onnx ਬਣਾਓ ਅਤੇ ਇਸਨੂੰ **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 Code ਵਿੱਚ ਬਹੁਤ ਜ਼ਿਆਦਾ ਦਿਖਾਈ ਨਹੀਂ ਦਿੰਦੇ, ਪਰ ਇੱਕ ਬਹੁਤ ਵਧੀਆ ਮੁਫ਼ਤ ਸੌਫਟਵੇਅਰ ਹੈ ਜੋ ਬਹੁਤ ਸਾਰੇ ਖੋਜਕਰਤਾ ਮਾਡਲ ਨੂੰ ਵੇਖਣ ਲਈ ਵਰਤਦੇ ਹਨ ਤਾਂ ਜੋ ਇਹ ਯਕੀਨੀ ਬਣਾਇਆ ਜਾ ਸਕੇ ਕਿ ਇਹ ਸਹੀ ਤਰੀਕੇ ਨਾਲ ਬਣਾਇਆ ਗਿਆ ਹੈ। [Netron](https://github.com/lutzroeder/Netron) ਡਾਊਨਲੋਡ ਕਰੋ ਅਤੇ ਆਪਣੀ model.onnx ਫਾਈਲ ਖੋਲ੍ਹੋ। ਤੁਸੀਂ ਆਪਣਾ ਸਧਾਰਨ ਮਾਡਲ ਵੇਖ ਸਕਦੇ ਹੋ, ਜਿਸ ਵਿੱਚ 380 ਇਨਪੁਟ ਅਤੇ ਵਰਗੀਕਰਨ ਦਰਸਾਇਆ ਗਿਆ ਹੈ:
Netron ਮਾਡਲਾਂ ਨੂੰ ਵੇਖਣ ਲਈ ਇੱਕ ਮਦਦਗਾਰ ਸੰਦ ਹੈ।
ਹੁਣ ਤੁਸੀਂ ਇਸ ਸ਼ਾਨਦਾਰ ਮਾਡਲ ਨੂੰ ਇੱਕ ਵੈੱਬ ਐਪ ਵਿੱਚ ਵਰਤਣ ਲਈ ਤਿਆਰ ਹੋ। ਆਓ ਇੱਕ ਐਪ ਬਣਾਈਏ ਜੋ ਤੁਹਾਡੇ ਫ੍ਰਿਜ ਵਿੱਚ ਦੇਖਣ ਅਤੇ ਇਹ ਪਤਾ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰੇ ਕਿ ਤੁਹਾਡੇ ਬਚੇ ਹੋਏ ਸਮੱਗਰੀ ਦੇ ਕੌਣ-ਕੌਣ ਦੇ組
---
**ਅਸਵੀਕਾਰਨਾ**:
ਇਹ ਦਸਤਾਵੇਜ਼ AI ਅਨੁਵਾਦ ਸੇਵਾ [Co-op Translator](https://github.com/Azure/co-op-translator) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀਤਾ ਲਈ ਯਤਨਸ਼ੀਲ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁਣੀਕਤਾਵਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਇਸਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ।