# वेब एप निर्माण गरेर ML मोडेल प्रयोग गर्नुहोस् यस पाठमा, तपाईं एक डेटा सेटमा ML मोडेललाई प्रशिक्षण दिनेछौं जुन अद्भुत छ: _पछिल्लो शताब्दीको 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/) प्रयोग गर्ने JavaScript वेब एपहरूमा प्रयोग गर्न सकिन्छ। यो विकल्प भविष्यको पाठमा 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 प्रयोग गरेर JavaScript सन्दर्भमा पनि गर्न सकिन्छ। हाम्रो उद्देश्यका लागि, किनकि हामी Python-आधारित नोटबुकहरूसँग काम गर्दैछौं, नोटबुकबाट Python-निर्मित वेब एपद्वारा पढ्न सकिने फर्म्याटमा प्रशिक्षित मोडेल निर्यात गर्न आवश्यक चरणहरू अन्वेषण गरौं। ## उपकरण यस कार्यका लागि, तपाईंलाई दुई उपकरणहरू आवश्यक छ: Flask र Pickle, दुवै Pythonमा चल्छन्। ✅ [Flask](https://palletsprojects.com/p/flask/) के हो? यसको निर्माताहरूले 'माइक्रो-फ्रेमवर्क' भनेर परिभाषित गरेका Flaskले Python प्रयोग गरेर वेब फ्रेमवर्कहरूको आधारभूत सुविधाहरू प्रदान गर्दछ र वेब पृष्ठहरू निर्माण गर्न टेम्प्लेटिङ इन्जिन प्रयोग गर्दछ। [यो Learn मोड्युल](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 फाइलको suffix `.pkl` हुन्छ। ## अभ्यास - आफ्नो डेटा सफा गर्नुहोस् यस पाठमा तपाईं 80,000 UFO देखाइहरूको डेटा प्रयोग गर्नुहुनेछ, [NUFORC](https://nuforc.org) (The National UFO Reporting Center) द्वारा संकलित। यस डेटामा UFO देखाइहरूको केही रोचक विवरणहरू छन्, उदाहरणका लागि: - **लामो विवरण उदाहरण।** "एक व्यक्ति रातको समयमा घाँसे मैदानमा चम्किरहेको प्रकाशको किरणबाट बाहिर निस्कन्छ र टेक्सास इन्स्ट्रुमेन्ट्सको पार्किङ क्षेत्रमा दौडन्छ।" - **छोटो विवरण उदाहरण।** "बत्तीहरूले हामीलाई पछ्यायो।" [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` इनपुट गर्न चाहनुहुन्छ र देशको id प्राप्त गर्न चाहनुहुन्छ। ```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. आफ्नो मोडेललाई logistic regression प्रयोग गरेर प्रशिक्षण दिनुहोस्: ```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_ JavaScript एपमा, यो फाइलले एपले आवश्यक पर्ने निर्भरता सूचीबद्ध गर्दछ। **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 }}