# ویب ایپ بنائیں جو مشین لرننگ ماڈل استعمال کرے اس سبق میں، آپ ایک مشین لرننگ ماڈل کو ایک ایسے ڈیٹا سیٹ پر تربیت دیں گے جو واقعی منفرد ہے: _پچھلی صدی کے دوران UFO مشاہدات_، جو NUFORC کے ڈیٹا بیس سے حاصل کیے گئے ہیں۔ آپ سیکھیں گے: - تربیت یافتہ ماڈل کو 'pickle' کیسے کریں - اس ماڈل کو Flask ایپ میں کیسے استعمال کریں ہم نوٹ بکس کا استعمال جاری رکھیں گے تاکہ ڈیٹا کو صاف کریں اور ماڈل کو تربیت دیں، لیکن آپ اس عمل کو ایک قدم آگے لے جا سکتے ہیں اور ماڈل کو "جنگل میں" استعمال کرنے کا تجربہ کر سکتے ہیں، یعنی ایک ویب ایپ میں۔ اس کے لیے، آپ کو Flask استعمال کرتے ہوئے ایک ویب ایپ بنانی ہوگی۔ ## [لیکچر سے پہلے کا کوئز](https://ff-quizzes.netlify.app/en/ml/) ## ایپ بنانا مشین لرننگ ماڈلز کو استعمال کرنے کے لیے ویب ایپس بنانے کے کئی طریقے ہیں۔ آپ کی ویب آرکیٹیکچر اس بات پر اثر ڈال سکتی ہے کہ آپ کا ماڈل کیسے تربیت یافتہ ہے۔ تصور کریں کہ آپ ایک ایسے کاروبار میں کام کر رہے ہیں جہاں ڈیٹا سائنس گروپ نے ایک ماڈل تربیت دیا ہے جسے وہ چاہتے ہیں کہ آپ ایپ میں استعمال کریں۔ ### غور و فکر آپ کو کئی سوالات پوچھنے کی ضرورت ہوگی: - **کیا یہ ویب ایپ ہے یا موبائل ایپ؟** اگر آپ موبائل ایپ بنا رہے ہیں یا ماڈل کو IoT کے تناظر میں استعمال کرنے کی ضرورت ہے، تو آپ [TensorFlow Lite](https://www.tensorflow.org/lite/) استعمال کر سکتے ہیں اور ماڈل کو Android یا iOS ایپ میں استعمال کر سکتے ہیں۔ - **ماڈل کہاں ہوگا؟** کلاؤڈ میں یا مقامی طور پر؟ - **آف لائن سپورٹ۔** کیا ایپ کو آف لائن کام کرنا ہوگا؟ - **ماڈل کو تربیت دینے کے لیے کونسی ٹیکنالوجی استعمال کی گئی؟** منتخب کردہ ٹیکنالوجی اس ٹولنگ پر اثر ڈال سکتی ہے جسے آپ استعمال کریں گے۔ - **TensorFlow کا استعمال۔** اگر آپ TensorFlow استعمال کرتے ہوئے ماڈل تربیت دے رہے ہیں، تو یہ ایکو سسٹم [TensorFlow.js](https://www.tensorflow.org/js/) کے ذریعے ماڈل کو ویب ایپ میں استعمال کے لیے تبدیل کرنے کی صلاحیت فراہم کرتا ہے۔ - **PyTorch کا استعمال۔** اگر آپ [PyTorch](https://pytorch.org/) جیسی لائبریری استعمال کرتے ہوئے ماڈل بنا رہے ہیں، تو آپ اسے [ONNX](https://onnx.ai/) (Open Neural Network Exchange) فارمیٹ میں ایکسپورٹ کر سکتے ہیں تاکہ جاوا اسکرپٹ ویب ایپس میں استعمال کیا جا سکے جو [Onnx Runtime](https://www.onnxruntime.ai/) استعمال کرتی ہیں۔ یہ آپشن ایک آئندہ سبق میں Scikit-learn تربیت یافتہ ماڈل کے لیے دریافت کیا جائے گا۔ - **Lobe.ai یا Azure Custom Vision کا استعمال۔** اگر آپ [Lobe.ai](https://lobe.ai/) یا [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) جیسے ML SaaS (Software as a Service) سسٹم کا استعمال کرتے ہوئے ماڈل تربیت دے رہے ہیں، تو یہ قسم کا سافٹ ویئر کئی پلیٹ فارمز کے لیے ماڈل ایکسپورٹ کرنے کے طریقے فراہم کرتا ہے، بشمول کلاؤڈ میں آپ کی آن لائن ایپلیکیشن کے ذریعے استفسار کرنے کے لیے ایک حسب ضرورت API بنانا۔ آپ کے پاس ایک مکمل Flask ویب ایپ بنانے کا موقع بھی ہے جو خود ماڈل کو ویب براؤزر میں تربیت دے سکتی ہے۔ یہ کام جاوا اسکرپٹ کے تناظر میں TensorFlow.js کا استعمال کرتے ہوئے بھی کیا جا سکتا ہے۔ ہمارے مقصد کے لیے، چونکہ ہم Python پر مبنی نوٹ بکس کے ساتھ کام کر رہے ہیں، آئیے ان مراحل کو دریافت کریں جو آپ کو ایک تربیت یافتہ ماڈل کو ایک ایسے فارمیٹ میں ایکسپورٹ کرنے کے لیے لینے کی ضرورت ہے جو Python سے بنی ویب ایپ کے ذریعے پڑھا جا سکے۔ ## ٹول اس کام کے لیے آپ کو دو ٹولز کی ضرورت ہوگی: Flask اور Pickle، دونوں Python پر چلتے ہیں۔ ✅ [Flask](https://palletsprojects.com/p/flask/) کیا ہے؟ اس کے تخلیق کاروں کے مطابق، Flask ایک 'مائیکرو فریم ورک' ہے جو Python کا استعمال کرتے ہوئے ویب فریم ورک کی بنیادی خصوصیات فراہم کرتا ہے اور ویب صفحات بنانے کے لیے ایک ٹیمپلیٹنگ انجن فراہم کرتا ہے۔ [اس لرن ماڈیول](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) کو دیکھیں تاکہ Flask کے ساتھ کام کرنے کی مشق کریں۔ ✅ [Pickle](https://docs.python.org/3/library/pickle.html) کیا ہے؟ Pickle 🥒 ایک Python ماڈیول ہے جو Python آبجیکٹ کی ساخت کو سیریلائز اور ڈی سیریلائز کرتا ہے۔ جب آپ ماڈل کو 'pickle' کرتے ہیں، تو آپ اس کی ساخت کو ویب پر استعمال کے لیے سیریلائز یا فلیٹ کرتے ہیں۔ محتاط رہیں: pickle بنیادی طور پر محفوظ نہیں ہے، لہذا اگر آپ کو کسی فائل کو 'un-pickle' کرنے کے لیے کہا جائے تو محتاط رہیں۔ ایک pickled فائل کا لاحقہ `.pkl` ہوتا ہے۔ ## مشق - اپنے ڈیٹا کو صاف کریں اس سبق میں آپ 80,000 UFO مشاہدات کے ڈیٹا کا استعمال کریں گے، جو [NUFORC](https://nuforc.org) (The National UFO Reporting Center) کے ذریعے جمع کیے گئے ہیں۔ اس ڈیٹا میں UFO مشاہدات کی دلچسپ تفصیلات شامل ہیں، جیسے: - **لمبی مثال تفصیل۔** "ایک آدمی روشنی کی ایک شعاع سے نکلتا ہے جو رات کے وقت ایک گھاس کے میدان پر چمکتی ہے اور وہ Texas Instruments کی پارکنگ کی طرف بھاگتا ہے"۔ - **مختصر مثال تفصیل۔** "روشنیوں نے ہمارا پیچھا کیا"۔ [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) اسپریڈشیٹ میں `city`, `state`, اور `country` کے کالم شامل ہیں جہاں مشاہدہ ہوا، آبجیکٹ کی `shape` اور اس کے `latitude` اور `longitude`۔ خالی [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb) میں شامل کریں: 1. `pandas`, `matplotlib`, اور `numpy` کو درآمد کریں جیسا کہ آپ نے پچھلے اسباق میں کیا تھا اور ufos اسپریڈشیٹ کو درآمد کریں۔ آپ ڈیٹا سیٹ کا نمونہ دیکھ سکتے ہیں: ```python import pandas as pd import numpy as np ufos = pd.read_csv('./data/ufos.csv') ufos.head() ``` 1. ufos ڈیٹا کو ایک چھوٹے ڈیٹا فریم میں تبدیل کریں جس میں تازہ عنوانات ہوں۔ `Country` فیلڈ میں منفرد اقدار چیک کریں۔ ```python ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) ufos.Country.unique() ``` 1. اب، آپ ان ڈیٹا کو کم کر سکتے ہیں جن سے ہمیں نمٹنے کی ضرورت ہے، کسی بھی null اقدار کو ہٹا کر اور صرف 1-60 سیکنڈ کے درمیان مشاہدات کو درآمد کر کے: ```python ufos.dropna(inplace=True) ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] ufos.info() ``` 1. Scikit-learn کی `LabelEncoder` لائبریری درآمد کریں تاکہ ممالک کے متن کی اقدار کو ایک نمبر میں تبدیل کیا جا سکے: ✅ LabelEncoder ڈیٹا کو حروف تہجی کے لحاظ سے انکوڈ کرتا ہے ```python from sklearn.preprocessing import LabelEncoder ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) ufos.head() ``` آپ کا ڈیٹا اس طرح نظر آنا چاہیے: ```output Seconds Country Latitude Longitude 2 20.0 3 53.200000 -2.916667 3 20.0 4 28.978333 -96.645833 14 30.0 4 35.823889 -80.253611 23 60.0 4 45.582778 -122.352222 24 3.0 3 51.783333 -0.783333 ``` ## مشق - اپنا ماڈل بنائیں اب آپ ڈیٹا کو تربیت اور ٹیسٹنگ گروپ میں تقسیم کر کے ماڈل کو تربیت دینے کے لیے تیار ہو سکتے ہیں۔ 1. تین فیچرز منتخب کریں جن پر آپ تربیت دینا چاہتے ہیں، جو آپ کا X ویکٹر ہوگا، اور y ویکٹر `Country` ہوگا۔ آپ `Seconds`, `Latitude` اور `Longitude` کو ان پٹ کرنا چاہتے ہیں اور ایک ملک کا آئی ڈی حاصل کرنا چاہتے ہیں۔ ```python from sklearn.model_selection import train_test_split Selected_features = ['Seconds','Latitude','Longitude'] X = ufos[Selected_features] y = ufos['Country'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) ``` 1. اپنے ماڈل کو لاجسٹک ریگریشن کا استعمال کرتے ہوئے تربیت دیں: ```python from sklearn.metrics import accuracy_score, classification_report from sklearn.linear_model import LogisticRegression model = LogisticRegression() model.fit(X_train, y_train) predictions = model.predict(X_test) print(classification_report(y_test, predictions)) print('Predicted labels: ', predictions) print('Accuracy: ', accuracy_score(y_test, predictions)) ``` درستگی بری نہیں ہے **(تقریباً 95%)**، جو حیرت انگیز نہیں ہے، کیونکہ `Country` اور `Latitude/Longitude` آپس میں جڑے ہوئے ہیں۔ آپ کا بنایا ہوا ماڈل بہت انقلابی نہیں ہے کیونکہ آپ کو `Latitude` اور `Longitude` سے ایک `Country` کا اندازہ لگانے کے قابل ہونا چاہیے، لیکن یہ ایک اچھا مشق ہے کہ آپ خام ڈیٹا کو صاف کریں، اسے ایکسپورٹ کریں، اور پھر اس ماڈل کو ایک ویب ایپ میں استعمال کریں۔ ## مشق - اپنے ماڈل کو 'pickle' کریں اب، وقت ہے کہ آپ اپنے ماڈل کو _pickle_ کریں! آپ یہ چند لائنوں کے کوڈ میں کر سکتے ہیں۔ ایک بار جب یہ _pickled_ ہو جائے، تو اپنے pickled ماڈل کو لوڈ کریں اور اسے سیکنڈز، latitude اور longitude کے لیے ایک نمونہ ڈیٹا آرے کے خلاف ٹیسٹ کریں، ```python import pickle model_filename = 'ufo-model.pkl' pickle.dump(model, open(model_filename,'wb')) model = pickle.load(open('ufo-model.pkl','rb')) print(model.predict([[50,44,-12]])) ``` ماڈل **'3'** واپس کرتا ہے، جو UK کے لیے ملک کا کوڈ ہے۔ حیرت انگیز! 👽 ## مشق - Flask ایپ بنائیں اب آپ ایک Flask ایپ بنا سکتے ہیں جو آپ کے ماڈل کو کال کرے اور اسی طرح کے نتائج واپس کرے، لیکن زیادہ بصری طور پر خوشنما انداز میں۔ 1. _notebook.ipynb_ فائل کے ساتھ ایک فولڈر **web-app** بنائیں جہاں آپ کی _ufo-model.pkl_ فائل موجود ہے۔ 1. اس فولڈر میں مزید تین فولڈرز بنائیں: **static**, جس کے اندر ایک فولڈر **css** ہو، اور **templates**۔ آپ کے پاس اب درج ذیل فائلیں اور ڈائریکٹریز ہونی چاہئیں: ```output web-app/ static/ css/ templates/ notebook.ipynb ufo-model.pkl ``` ✅ حل فولڈر کا حوالہ دیں تاکہ مکمل ایپ کا نظارہ حاصل کریں 1. _web-app_ فولڈر میں پہلی فائل **requirements.txt** بنائیں۔ جیسے جاوا اسکرپٹ ایپ میں _package.json_، یہ فائل ایپ کے لیے مطلوبہ ڈپینڈنسیز کی فہرست دیتی ہے۔ **requirements.txt** میں درج ذیل لائنیں شامل کریں: ```text scikit-learn pandas numpy flask ``` 1. اب، اس فائل کو _web-app_ میں نیویگیٹ کر کے چلائیں: ```bash cd web-app ``` 1. اپنے ٹرمینل میں `pip install` ٹائپ کریں تاکہ _requirements.txt_ میں درج لائبریریوں کو انسٹال کریں: ```bash pip install -r requirements.txt ``` 1. اب، آپ ایپ کو مکمل کرنے کے لیے مزید تین فائلیں بنانے کے لیے تیار ہیں: 1. **app.py** کو روٹ میں بنائیں۔ 2. _templates_ ڈائریکٹری میں **index.html** بنائیں۔ 3. _static/css_ ڈائریکٹری میں **styles.css** بنائیں۔ 1. _styles.css_ فائل میں چند اسٹائلز شامل کریں: ```css body { width: 100%; height: 100%; font-family: 'Helvetica'; background: black; color: #fff; text-align: center; letter-spacing: 1.4px; font-size: 30px; } input { min-width: 150px; } .grid { width: 300px; border: 1px solid #2d2d2d; display: grid; justify-content: center; margin: 20px auto; } .box { color: #fff; background: #2d2d2d; padding: 12px; display: inline-block; } ``` 1. اگلا، _index.html_ فائل بنائیں: ```html
According to the number of seconds, latitude and longitude, which country is likely to have reported seeing a UFO?
{{ prediction_text }}