# Python र Scikit-learn प्रयोग गरेर Regression Models सुरु गर्नुहोस् ![Regression को स्केच नोटमा सारांश](../../../../translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.ne.png) > स्केच नोट: [Tomomi Imura](https://www.twitter.com/girlie_mac) ## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/) > ### [यो पाठ R मा पनि उपलब्ध छ!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) ## परिचय यी चार पाठहरूमा, तपाईंले regression models कसरी निर्माण गर्ने भनेर सिक्नुहुनेछ। हामी चाँडै नै यी मोडेलहरू केका लागि प्रयोग गरिन्छ भन्ने छलफल गर्नेछौं। तर, कुनै पनि कुरा सुरु गर्नु अघि, प्रक्रिया सुरु गर्नका लागि तपाईंले सही उपकरणहरू तयार गर्नुभएको छ भनेर सुनिश्चित गर्नुहोस्! यस पाठमा, तपाईंले सिक्नुहुनेछ: - आफ्नो कम्प्युटरलाई स्थानीय मशीन लर्निङ कार्यहरूको लागि कन्फिगर गर्ने। - Jupyter notebooks सँग काम गर्ने। - Scikit-learn प्रयोग गर्ने, जसमा यसको स्थापना पनि समावेश छ। - Linear regression को अभ्यास गर्ने। ## स्थापना र कन्फिगरेसनहरू [![मशीन लर्निङका लागि उपकरणहरू सेटअप गर्नुहोस्](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "मशीन लर्निङका लागि उपकरणहरू सेटअप गर्नुहोस्") > 🎥 माथिको छवि क्लिक गरेर ML को लागि कम्प्युटर कन्फिगर गर्ने छोटो भिडियो हेर्नुहोस्। 1. **Python स्थापना गर्नुहोस्।** सुनिश्चित गर्नुहोस् कि [Python](https://www.python.org/downloads/) तपाईंको कम्प्युटरमा स्थापना गरिएको छ। तपाईंले धेरै डेटा साइन्स र मशीन लर्निङ कार्यहरूको लागि Python प्रयोग गर्नुहुनेछ। धेरै कम्प्युटर प्रणालीहरूमा Python पहिले नै समावेश हुन्छ। [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) पनि उपलब्ध छन्, जसले केही प्रयोगकर्ताहरूको लागि सेटअप सजिलो बनाउँछ। यद्यपि, Python को केही प्रयोगहरूले एक संस्करण आवश्यक पर्छ भने अन्यले अर्को संस्करण। यस कारणले, [virtual environment](https://docs.python.org/3/library/venv.html) मा काम गर्नु उपयोगी हुन्छ। 2. **Visual Studio Code स्थापना गर्नुहोस्।** सुनिश्चित गर्नुहोस् कि Visual Studio Code तपाईंको कम्प्युटरमा स्थापना गरिएको छ। [Visual Studio Code स्थापना गर्ने](https://code.visualstudio.com/) निर्देशनहरू पालना गर्नुहोस्। तपाईंले यस पाठक्रममा Python Visual Studio Code मा प्रयोग गर्नुहुनेछ, त्यसैले Python विकासका लागि [Visual Studio Code कन्फिगर गर्ने](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) बारेमा जानकारी लिनुहोस्। > Python सँग सहज हुनका लागि [Learn modules](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) को यो संग्रह प्रयोग गर्नुहोस्। > > [![Visual Studio Code मा Python सेटअप गर्नुहोस्](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Visual Studio Code मा Python सेटअप गर्नुहोस्") > > 🎥 माथिको छवि क्लिक गरेर Python VS Code मा प्रयोग गर्ने भिडियो हेर्नुहोस्। 3. **Scikit-learn स्थापना गर्नुहोस्।** [यी निर्देशनहरू](https://scikit-learn.org/stable/install.html) पालना गरेर Scikit-learn स्थापना गर्नुहोस्। तपाईंले Python 3 प्रयोग गर्नु पर्छ भन्ने सुनिश्चित गर्नुपर्ने भएकाले virtual environment प्रयोग गर्न सिफारिस गरिन्छ। यदि तपाईं M1 Mac मा यो लाइब्रेरी स्थापना गर्दै हुनुहुन्छ भने, माथि दिइएको पृष्ठमा विशेष निर्देशनहरू छन्। 4. **Jupyter Notebook स्थापना गर्नुहोस्।** तपाईंले [Jupyter package](https://pypi.org/project/jupyter/) स्थापना गर्नुपर्नेछ। ## तपाईंको ML लेखन वातावरण तपाईंले **notebooks** प्रयोग गरेर Python कोड विकास गर्नुहुनेछ र मशीन लर्निङ मोडेलहरू निर्माण गर्नुहुनेछ। यो प्रकारको फाइल डेटा वैज्ञानिकहरूको लागि सामान्य उपकरण हो, र तिनीहरूलाई `.ipynb` एक्स्टेन्सनले चिनिन्छ। Notebooks एक अन्तरक्रियात्मक वातावरण हो जसले विकासकर्तालाई कोड लेख्न र कोडको वरिपरि नोटहरू र डकुमेन्टेसन थप्न अनुमति दिन्छ, जुन प्रायः प्रयोगात्मक वा अनुसन्धान-उन्मुख परियोजनाहरूका लागि उपयोगी हुन्छ। [![Jupyter Notebooks सेटअप गर्नुहोस्](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "Jupyter Notebooks सेटअप गर्नुहोस्") > 🎥 माथिको छवि क्लिक गरेर यो अभ्यासको छोटो भिडियो हेर्नुहोस्। ### अभ्यास - नोटबुकसँग काम गर्नुहोस् यस फोल्डरमा, तपाईंले _notebook.ipynb_ फाइल पाउनुहुनेछ। 1. _notebook.ipynb_ Visual Studio Code मा खोल्नुहोस्। Jupyter server Python 3+ सँग सुरु हुनेछ। तपाईंले नोटबुकका क्षेत्रहरू पाउनुहुनेछ जसलाई `run` गर्न सकिन्छ। तपाईंले कोड ब्लक चलाउन, प्ले बटन जस्तो देखिने आइकन चयन गर्न सक्नुहुन्छ। 2. `md` आइकन चयन गर्नुहोस् र केही markdown थप्नुहोस्, जस्तै **# Welcome to your notebook**। त्यसपछि, केही Python कोड थप्नुहोस्। 3. कोड ब्लकमा **print('hello notebook')** टाइप गर्नुहोस्। 4. कोड चलाउनको लागि एरो चयन गर्नुहोस्। तपाईंले प्रिन्ट गरिएको कथन देख्नु पर्नेछ: ```output hello notebook ``` ![VS Code मा खुला नोटबुक](../../../../translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.ne.jpg) तपाईं आफ्नो कोडसँगै नोटहरू थपेर नोटबुकलाई स्व-डकुमेन्ट गर्न सक्नुहुन्छ। ✅ एक मिनेट सोच्नुहोस् कि वेब विकासकर्ताको कार्य वातावरण डेटा वैज्ञानिकको वातावरणभन्दा कति फरक छ। ## Scikit-learn सँग सुरु गर्नुहोस् अब Python तपाईंको स्थानीय वातावरणमा सेटअप भइसकेको छ, र तपाईं Jupyter notebooks सँग सहज हुनुहुन्छ, Scikit-learn सँग पनि सहज बनौं। Scikit-learn ले ML कार्यहरू गर्न मद्दत गर्न [विस्तृत API](https://scikit-learn.org/stable/modules/classes.html#api-ref) प्रदान गर्दछ। तिनीहरूको [वेबसाइट](https://scikit-learn.org/stable/getting_started.html) अनुसार, "Scikit-learn एक खुला स्रोत मशीन लर्निङ लाइब्रेरी हो जसले supervised र unsupervised learning समर्थन गर्दछ। यसले मोडेल फिटिंग, डेटा प्रि-प्रोसेसिङ, मोडेल चयन र मूल्याङ्कन, र अन्य धेरै उपयोगिताहरूका लागि विभिन्न उपकरणहरू प्रदान गर्दछ।" यस पाठक्रममा, तपाईं Scikit-learn र अन्य उपकरणहरू प्रयोग गरेर 'पारम्परिक मशीन लर्निङ' कार्यहरू प्रदर्शन गर्न मोडेलहरू निर्माण गर्नुहुनेछ। हामीले neural networks र deep learning जस्ता विषयहरूलाई जानाजानी समावेश गरेका छैनौं, किनभने ती हाम्रो आगामी 'AI for Beginners' पाठक्रममा राम्रोसँग समेटिनेछन्। Scikit-learn ले मोडेलहरू निर्माण गर्न र तिनीहरूलाई मूल्याङ्कन गर्न सजिलो बनाउँछ। यो मुख्य रूपमा संख्यात्मक डेटा प्रयोगमा केन्द्रित छ र सिकाइ उपकरणको रूपमा प्रयोग गर्नका लागि केही तयार-गरेका datasets समावेश गर्दछ। यसमा विद्यार्थीहरूले प्रयास गर्नका लागि पूर्व-निर्मित मोडेलहरू पनि समावेश छन्। अब, prepackaged डेटा लोड गर्ने र Scikit-learn को पहिलो ML मोडेल प्रयोग गर्ने प्रक्रिया अन्वेषण गरौं। ## अभ्यास - तपाईंको पहिलो Scikit-learn नोटबुक > यो ट्युटोरियल Scikit-learn को वेबसाइटमा रहेको [linear regression example](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) बाट प्रेरित छ। [![Python मा तपाईंको पहिलो Linear Regression प्रोजेक्ट](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "Python मा तपाईंको पहिलो Linear Regression प्रोजेक्ट") > 🎥 माथिको छवि क्लिक गरेर यो अभ्यासको छोटो भिडियो हेर्नुहोस्। यस पाठसँग सम्बन्धित _notebook.ipynb_ फाइलमा, सबै सेलहरू खाली गर्न 'trash can' आइकन थिच्नुहोस्। यस खण्डमा, तपाईं Scikit-learn मा सिकाइ उद्देश्यका लागि निर्मित सानो dataset सँग काम गर्नुहुनेछ। यो dataset मधुमेह (diabetes) सम्बन्धी हो। कल्पना गर्नुहोस् कि तपाईं मधुमेहका बिरामीहरूको उपचार परीक्षण गर्न चाहनुहुन्छ। मशीन लर्निङ मोडेलहरूले तपाईंलाई कुन बिरामीहरूले उपचारमा राम्रो प्रतिक्रिया दिनेछन् भनेर निर्धारण गर्न मद्दत गर्न सक्छ, भिन्न चरहरूको संयोजनको आधारमा। एउटा धेरै आधारभूत regression मोडेलले पनि, जब visualization गरिन्छ, चरहरूको बारेमा जानकारी देखाउन सक्छ जसले तपाईंलाई सैद्धान्तिक क्लिनिकल परीक्षणहरू व्यवस्थित गर्न मद्दत गर्दछ। ✅ धेरै प्रकारका regression विधिहरू छन्, र कुन विधि छनोट गर्ने भन्ने कुरा तपाईंले खोज्न चाहेको उत्तरमा निर्भर गर्दछ। यदि तपाईं कुनै व्यक्तिको उमेरको आधारमा सम्भावित उचाइको भविष्यवाणी गर्न चाहनुहुन्छ भने, तपाईं linear regression प्रयोग गर्नुहुनेछ, किनभने तपाईं **संख्यात्मक मान** खोज्दै हुनुहुन्छ। यदि तपाईं कुनै प्रकारको भोजनलाई vegan मान्नुपर्छ कि हुँदैन भनेर पत्ता लगाउन चाहनुहुन्छ भने, तपाईं **श्रेणी निर्धारण** खोज्दै हुनुहुन्छ, त्यसैले तपाईं logistic regression प्रयोग गर्नुहुनेछ। पछि तपाईं logistic regression को बारेमा थप जान्नुहुनेछ। डेटा सम्बन्धी केही प्रश्नहरू सोच्नुहोस्, र यी विधिहरूमध्ये कुन उपयुक्त हुनेछ भनेर विचार गर्नुहोस्। अब यो कार्य सुरु गरौं। ### लाइब्रेरीहरू आयात गर्नुहोस् यस कार्यका लागि हामी केही लाइब्रेरीहरू आयात गर्नेछौं: - **matplotlib**। यो एक उपयोगी [ग्राफिङ उपकरण](https://matplotlib.org/) हो, र हामी यसलाई line plot बनाउन प्रयोग गर्नेछौं। - **numpy**। [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) Python मा संख्यात्मक डेटा ह्यान्डल गर्न उपयोगी लाइब्रेरी हो। - **sklearn**। यो [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) लाइब्रेरी हो। तपाईंको कार्यहरूमा मद्दत गर्न केही लाइब्रेरीहरू आयात गर्नुहोस्। 1. निम्न कोड टाइप गरेर आयातहरू थप्नुहोस्: ```python import matplotlib.pyplot as plt import numpy as np from sklearn import datasets, linear_model, model_selection ``` माथिको कोडमा, तपाईंले `matplotlib`, `numpy` र `sklearn` बाट `datasets`, `linear_model` र `model_selection` आयात गर्नुभएको छ। `model_selection` डेटा प्रशिक्षण र परीक्षण सेटहरूमा विभाजन गर्न प्रयोग गरिन्छ। ### मधुमेह dataset निर्मित [diabetes dataset](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) मा मधुमेह सम्बन्धी 442 नमूनाहरू छन्, जसमा 10 feature variables छन्। तीमध्ये केही: - age: उमेर (वर्षमा) - bmi: शरीरको मास सूचकांक - bp: औसत रक्तचाप - s1 tc: T-Cells (सेतो रक्त कोशिकाको प्रकार) ✅ यो dataset मा मधुमेह अनुसन्धानका लागि महत्त्वपूर्ण feature variable को रूपमा 'sex' को अवधारणा समावेश छ। धेरै चिकित्सा datasets मा यस्तो binary classification समावेश हुन्छ। यस्तो वर्गीकरणले जनसंख्याको केही भागलाई उपचारबाट कसरी बाहिर राख्न सक्छ भन्ने बारे सोच्नुहोस्। अब, X र y डेटा लोड गर्नुहोस्। > 🎓 सम्झनुहोस्, यो supervised learning हो, र हामीलाई नाम गरिएको 'y' target चाहिन्छ। नयाँ कोड सेलमा, `load_diabetes()` कल गरेर मधुमेह dataset लोड गर्नुहोस्। इनपुट `return_X_y=True` ले संकेत गर्दछ कि `X` डेटा म्याट्रिक्स हुनेछ, र `y` regression target हुनेछ। 1. डेटा म्याट्रिक्सको आकार र यसको पहिलो तत्व देखाउन केही print आदेशहरू थप्नुहोस्: ```python X, y = datasets.load_diabetes(return_X_y=True) print(X.shape) print(X[0]) ``` तपाईंले प्रतिक्रिया स्वरूप पाउनु भएको कुरा tuple हो। तपाईंले tuple का दुई पहिलो मानहरू क्रमशः `X` र `y` मा असाइन गर्दै हुनुहुन्छ। [tuples](https://wikipedia.org/wiki/Tuple) को बारेमा थप जान्नुहोस्। तपाईंले देख्न सक्नुहुन्छ कि यो डेटा 442 वस्तुहरूमा 10 तत्वहरूको array को रूपमा आकारमा छ: ```text (442, 10) [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 -0.04340085 -0.00259226 0.01990842 -0.01764613] ``` ✅ डेटा र regression target बीचको सम्बन्धको बारेमा सोच्नुहोस्। Linear regression ले feature X र target variable y बीचको सम्बन्धको भविष्यवाणी गर्दछ। के तपाईं मधुमेह dataset को [target](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) लाई डकुमेन्टेसनमा फेला पार्न सक्नुहुन्छ? यो dataset के प्रदर्शन गर्दैछ? 2. अब, यो dataset को तेस्रो स्तम्भ चयन गरेर plot गर्नको लागि एउटा भाग चयन गर्नुहोस्। तपाईं `:` अपरेटर प्रयोग गरेर सबै पङ्क्तिहरू चयन गर्न सक्नुहुन्छ, र त्यसपछि तेस्रो स्तम्भ (2) चयन गर्न सक्नुहुन्छ। तपाईं `reshape(n_rows, n_columns)` प्रयोग गरेर डेटा 2D array मा पुनःआकार दिन सक्नुहुन्छ। यदि कुनै एक प्यारामिटर -1 छ भने, सम्बन्धित आयाम स्वचालित रूपमा गणना गरिन्छ। ```python X = X[:, 2] X = X.reshape((-1,1)) ``` ✅ कुनै पनि समयमा, डेटा प्रिन्ट गरेर यसको आकार जाँच गर्नुहोस्। 3. अब तपाईंले डेटा plot गर्न तयार गर्नुभएको छ। अब, तपाईंले यो dataset मा संख्याहरू बीचको तार्किक विभाजन निर्धारण गर्न मेसिनको मद्दत लिन सक्नुहुन्छ। यसका लागि, तपाईंले डेटा (X) र target (y) दुवैलाई परीक्षण र प्रशिक्षण सेटहरूमा विभाजन गर्नुपर्छ। Scikit-learn ले यो गर्न सजिलो तरिका प्रदान गर्दछ; तपाईं आफ्नो परीक्षण डेटा निश्चित बिन्दुमा विभाजन गर्न सक्नुहुन्छ। ```python X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) ``` 4. अब तपाईं आफ्नो मोडेल प्रशिक्षण गर्न तयार हुनुहुन्छ! Linear regression मोडेल लोड गर्नुहोस् र `model.fit()` प्रयोग गरेर आफ्नो X र y प्रशिक्षण सेटहरूसँग यसलाई प्रशिक्षण गर्नुहोस्: ```python model = linear_model.LinearRegression() model.fit(X_train, y_train) ``` ✅ `model.fit()` यस्तो function हो जुन तपाईं TensorFlow जस्ता धेरै ML लाइब्रेरीहरूमा देख्नुहुनेछ। 5. त्यसपछि, परीक्षण डेटा प्रयोग गरेर `predict()` function प्रयोग गरेर भविष्यवाणी सिर्जना गर्नुहोस्। यो डेटा समूहहरू बीचको रेखा कोर्न प्रयोग गरिनेछ। ```python y_pred = model.predict(X_test) ``` 6. अब डेटा plot मा देखाउने समय हो। Matplotlib यो कार्यका लागि धेरै उपयोगी उपकरण हो। सबै X र y परीक्षण डेटा को scatterplot सिर्जना गर्नुहोस्, र मोडेलको डेटा समूहहरू बीचको सबैभन्दा उपयुक्त स्थानमा रेखा कोर्न भविष्यवाणी प्रयोग गर्नुहोस्। ```python plt.scatter(X_test, y_test, color='black') plt.plot(X_test, y_pred, color='blue', linewidth=3) plt.xlabel('Scaled BMIs') plt.ylabel('Disease Progression') plt.title('A Graph Plot Showing Diabetes Progression Against BMI') plt.show() ``` ![मधुमेह सम्बन्धी scatterplot](../../../../translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.ne.png) ✅ यहाँ के भइरहेको छ भनेर अलिकति सोच्नुहोस्। धेरै साना डाटाका बिन्दुहरूमा एउटा सिधा रेखा चलिरहेको छ, तर यो वास्तवमा के गरिरहेको छ? के तपाईं देख्न सक्नुहुन्छ कि यो रेखा प्रयोग गरेर नयाँ, नदेखिएको डाटा बिन्दु प्लटको y अक्षसँग सम्बन्धित कहाँ फिट हुन्छ भनेर भविष्यवाणी गर्न सकिन्छ? यस मोडेलको व्यावहारिक उपयोगलाई शब्दमा व्यक्त गर्न प्रयास गर्नुहोस्। बधाई छ, तपाईंले आफ्नो पहिलो रेखीय प्रतिगमन मोडेल निर्माण गर्नुभयो, यसबाट भविष्यवाणी गर्नुभयो, र प्लटमा प्रदर्शन गर्नुभयो! --- ## 🚀चुनौती यस डेटासेटबाट फरक चर प्लट गर्नुहोस्। संकेत: यो लाइन सम्पादन गर्नुहोस्: `X = X[:,2]`। यस डेटासेटको लक्ष्यलाई ध्यानमा राख्दै, मधुमेह रोगको प्रगति बारे तपाईं के पत्ता लगाउन सक्षम हुनुहुन्छ? ## [पोस्ट-व्याख्यान क्विज](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) ## समीक्षा र आत्म अध्ययन यस ट्युटोरियलमा, तपाईंले साधारण रेखीय प्रतिगमनसँग काम गर्नुभयो, बहुविध वा बहुपरिमाणीय रेखीय प्रतिगमनको सट्टा। यी विधिहरूको बीचको भिन्नताबारे अलिकति पढ्नुहोस्, वा [यो भिडियो](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) हेर्नुहोस्। प्रतिगमनको अवधारणाबारे थप पढ्नुहोस् र यस प्रविधिले उत्तर दिन सक्ने प्रश्नहरूको प्रकारबारे सोच्नुहोस्। आफ्नो बुझाइलाई गहिरो बनाउन यो [ट्युटोरियल](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) लिनुहोस्। ## असाइनमेन्ट [फरक डेटासेट](assignment.md) --- **अस्वीकरण**: यो दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) प्रयोग गरेर अनुवाद गरिएको छ। हामी यथार्थताको लागि प्रयास गर्छौं, तर कृपया ध्यान दिनुहोस् कि स्वचालित अनुवादमा त्रुटि वा अशुद्धता हुन सक्छ। यसको मूल भाषा मा रहेको मूल दस्तावेज़लाई आधिकारिक स्रोत मानिनुपर्छ। महत्वपूर्ण जानकारीको लागि, व्यावसायिक मानव अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न हुने कुनै पनि गलतफहमी वा गलत व्याख्याको लागि हामी जिम्मेवार हुने छैनौं।