# Python र Scikit-learn प्रयोग गरेर Regression Models सुरु गर्नुहोस् ![Regression को स्केच नोटमा सारांश](../../../../sketchnotes/ml-regression.png) > स्केच नोट [Tomomi Imura](https://www.twitter.com/girlie_mac) द्वारा ## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) > ### [यो पाठ 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 सेटअप गर्नुहोस्") > > 🎥 माथिको छवि क्लिक गर्नुहोस्: VS Code मा Python प्रयोग गर्ने भिडियो। 3. **Scikit-learn स्थापना गर्नुहोस्**, [यी निर्देशनहरू](https://scikit-learn.org/stable/install.html) पालना गरेर। तपाईंले Python 3 प्रयोग गर्न सुनिश्चित गर्नुपर्ने भएकाले, virtual environment प्रयोग गर्न सिफारिस गरिन्छ। यदि तपाईं M1 Mac मा यो लाइब्रेरी स्थापना गर्दै हुनुहुन्छ भने, माथि लिंक गरिएको पृष्ठमा विशेष निर्देशनहरू छन्। 4. **Jupyter Notebook स्थापना गर्नुहोस्**। तपाईंले [Jupyter package](https://pypi.org/project/jupyter/) स्थापना गर्नुपर्नेछ। ## तपाईंको ML लेखन वातावरण तपाईंले **notebooks** प्रयोग गरेर Python कोड विकास गर्नुहुनेछ र मशीन लर्निङ मोडेलहरू निर्माण गर्नुहुनेछ। यो प्रकारको फाइल डेटा वैज्ञानिकहरूको लागि सामान्य उपकरण हो, र तिनीहरूलाई `.ipynb` विस्तारले चिनिन्छ। Notebooks एक अन्तरक्रियात्मक वातावरण हो जसले विकासकर्तालाई कोड लेख्न र कोडको वरिपरि नोटहरू र दस्तावेजहरू थप्न अनुमति दिन्छ, जुन प्रयोगात्मक वा अनुसन्धान-उन्मुख परियोजनाहरूको लागि धेरै उपयोगी हुन्छ। [![मशीन लर्निङको लागि सुरुवात - Regression मोडेल निर्माण गर्न Jupyter Notebooks सेटअप गर्नुहोस्](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "मशीन लर्निङको लागि सुरुवात - Regression मोडेल निर्माण गर्न Jupyter Notebooks सेटअप गर्नुहोस्") > 🎥 माथिको छवि क्लिक गर्नुहोस्: यो अभ्यासको लागि छोटो भिडियो। ### अभ्यास - Notebook को साथ काम गर्नुहोस् यस फोल्डरमा, तपाईंले _notebook.ipynb_ फाइल पाउनुहुनेछ। 1. _notebook.ipynb_ Visual Studio Code मा खोल्नुहोस्। Jupyter server Python 3+ को साथ सुरु हुनेछ। तपाईंले notebook मा `run` गर्न सकिने कोडका टुक्राहरू पाउनुहुनेछ। तपाईंले प्ले बटन जस्तो देखिने आइकन चयन गरेर कोड ब्लक चलाउन सक्नुहुन्छ। 2. `md` आइकन चयन गर्नुहोस् र केही markdown थप्नुहोस्, र निम्न पाठ लेख्नुहोस् **# Welcome to your notebook**। त्यसपछि, केही Python कोड थप्नुहोस्। 3. कोड ब्लकमा **print('hello notebook')** टाइप गर्नुहोस्। 4. कोड चलाउनको लागि तीर चयन गर्नुहोस्। तपाईंले प्रिन्ट गरिएको कथन देख्नुहुनेछ: ```output hello notebook ``` ![VS Code मा notebook खुला भएको](../../../../2-Regression/1-Tools/images/notebook.jpg) तपाईं आफ्नो कोडलाई टिप्पणीहरूद्वारा स्व-डकुमेन्ट गर्न सक्नुहुन्छ। ✅ एक मिनेट सोच्नुहोस् कि वेब विकासकर्ताको काम गर्ने वातावरण डेटा वैज्ञानिकको वातावरणसँग कति फरक छ। ## Scikit-learn को साथ सुरु गर्नुहोस् अब Python तपाईंको स्थानीय वातावरणमा सेटअप भएको छ, र तपाईं Jupyter notebooks को साथ सहज हुनुहुन्छ, अब Scikit-learn को साथ समान सहज हुनुहोस्। Scikit-learn ले [व्यापक API](https://scikit-learn.org/stable/modules/classes.html#api-ref) प्रदान गर्दछ जसले तपाईंलाई ML कार्यहरू गर्न मद्दत गर्दछ। तिनीहरूको [वेबसाइट](https://scikit-learn.org/stable/getting_started.html) अनुसार, "Scikit-learn एक खुला स्रोत मशीन लर्निङ लाइब्रेरी हो जसले supervised र unsupervised learning समर्थन गर्दछ। यसले मोडेल फिटिंग, डेटा preprocessing, मोडेल चयन र मूल्यांकन, र अन्य धेरै उपयोगिताहरूका लागि विभिन्न उपकरणहरू प्रदान गर्दछ।" यस पाठ्यक्रममा, तपाईंले Scikit-learn र अन्य उपकरणहरू प्रयोग गरेर मशीन लर्निङ मोडेलहरू निर्माण गर्नुहुनेछ जसलाई 'पारम्परिक मशीन लर्निङ' कार्यहरू भनिन्छ। हामीले neural networks र deep learning जस्ता विषयहरूलाई जानबुझेर टाढा राखेका छौं, किनकि तिनीहरू हाम्रो आगामी 'AI for Beginners' पाठ्यक्रममा राम्रोसँग समेटिएका छन्। Scikit-learn ले मोडेलहरू निर्माण गर्न र तिनीहरूलाई मूल्यांकन गर्न सजिलो बनाउँछ। यो मुख्य रूपमा संख्यात्मक डेटा प्रयोगमा केन्द्रित छ र सिक्ने उपकरणको रूपमा प्रयोग गर्न तयार-निर्मित datasets समावेश गर्दछ। यसमा विद्यार्थीहरूले प्रयास गर्न सक्ने पूर्व-निर्मित मोडेलहरू पनि समावेश छन्। अब, prepackaged डेटा लोड गर्ने प्रक्रिया र Scikit-learn को साथ पहिलो ML मोडेलको लागि built-in estimator अन्वेषण गरौं। ## अभ्यास - तपाईंको पहिलो Scikit-learn notebook > यो ट्यूटोरियल 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 परियोजना") > 🎥 माथिको छवि क्लिक गर्नुहोस्: यो अभ्यासको लागि छोटो भिडियो। _नोटबुक.ipynb_ फाइलमा, सबै सेलहरू 'trash can' आइकन दबाएर खाली गर्नुहोस्। यस खण्डमा, तपाईं Scikit-learn मा सिक्ने उद्देश्यका लागि निर्माण गरिएको diabetes dataset को साथ काम गर्नुहुनेछ। कल्पना गर्नुहोस् कि तपाईंले मधुमेहका बिरामीहरूको उपचार परीक्षण गर्न चाहनुहुन्छ। मशीन लर्निङ मोडेलहरूले तपाईंलाई भिन्न चरहरूको संयोजनको आधारमा कुन बिरामीहरूले उपचारमा राम्रो प्रतिक्रिया दिनेछन् भनेर निर्धारण गर्न मद्दत गर्न सक्छ। जब visualization गरिएको एक धेरै आधारभूत regression मोडेलले चरहरूको बारेमा जानकारी देखाउन सक्छ जसले तपाईंलाई सैद्धान्तिक क्लिनिकल परीक्षणहरू व्यवस्थित गर्न मद्दत गर्दछ। ✅ धेरै प्रकारका 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 Scikit-learn मा निर्मित [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` मा असाइन गर्दै हुनुहुन्छ। [tuple](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 के प्रदर्शन गर्दैछ, target दिइएको अवस्थामा? 2. अब, यो dataset को एक भाग चयन गरेर plot गर्नुहोस्। dataset को तेस्रो स्तम्भ चयन गर्न `:` अपरेटर प्रयोग गर्नुहोस् सबै पङ्क्तिहरू चयन गर्न, र त्यसपछि तेस्रो स्तम्भ चयन गर्न index (2) प्रयोग गर्नुहोस्। तपाईंले `reshape(n_rows, n_columns)` प्रयोग गरेर डेटा 2D array मा पुनःआकार दिन सक्नुहुन्छ - plot को लागि आवश्यक रूपमा। यदि कुनै parameter -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. त्यसपछि, परीक्षण डेटा प्रयोग गरेर prediction सिर्जना गर्नुहोस्, `predict()` function प्रयोग गरेर। यो डेटा समूहहरू बीचको लाइन कोर्न प्रयोग गरिनेछ। ```python y_pred = model.predict(X_test) ``` 6. अब डेटा plot मा देखाउने समय हो। Matplotlib यो कार्यको लागि धेरै उपयोगी उपकरण हो। सबै X र y परीक्षण डेटा को scatterplot सिर्जना गर्नुहोस्, र मोडेलको डेटा समूहहरूको बीचमा सबैभन्दा उपयुक्त स्थानमा लाइन कोर्न prediction प्रयोग गर्नुहोस्। ```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() ``` ![मधुमेह सम्बन्धी datapoints देखाउने scatterplot](../../../../2-Regression/1-Tools/images/scatterplot.png) ✅ यहाँ के भइरहेको छ भनेर अलिकति सोच्नुहोस्। धेरै साना डाटाका बिन्दुहरूमा एउटा सीधा रेखा चलिरहेको छ, तर यो वास्तवमा के गरिरहेको छ? के तपाईं देख्न सक्नुहुन्छ कि नयाँ, नदेखिएको डाटा बिन्दु प्लटको y अक्षसँग सम्बन्धित कहाँ फिट हुनुपर्छ भनेर भविष्यवाणी गर्न यो रेखा कसरी प्रयोग गर्न सकिन्छ? यस मोडेलको व्यावहारिक उपयोगलाई शब्दमा व्यक्त गर्न प्रयास गर्नुहोस्। बधाई छ, तपाईंले आफ्नो पहिलो रेखीय प्रतिगमन मोडेल निर्माण गर्नुभयो, यसबाट भविष्यवाणी गर्नुभयो, र प्लटमा प्रदर्शन गर्नुभयो! --- ## 🚀चुनौती यस डेटासेटबाट फरक भेरिएबल प्लट गर्नुहोस्। संकेत: यो लाइन सम्पादन गर्नुहोस्: `X = X[:,2]`। यस डेटासेटको लक्ष्यलाई ध्यानमा राख्दै, मधुमेह रोगको प्रगति बारे तपाईं के पत्ता लगाउन सक्षम हुनुहुन्छ? ## [पोस्ट-व्याख्यान क्विज](https://ff-quizzes.netlify.app/en/ml/) ## समीक्षा र आत्म अध्ययन यस ट्युटोरियलमा, तपाईंले साधारण रेखीय प्रतिगमनसँग काम गर्नुभयो, न कि एकविविध वा बहुविविध रेखीय प्रतिगमनसँग। यी विधिहरूको बीचको भिन्नताहरूको बारेमा अलिकति पढ्नुहोस्, वा [यो भिडियो](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) प्रयोग गरी अनुवाद गरिएको हो। हामी यथासम्भव सटीकता सुनिश्चित गर्न प्रयास गर्छौं, तर कृपया ध्यान दिनुहोस् कि स्वचालित अनुवादहरूमा त्रुटिहरू वा अशुद्धताहरू हुन सक्छन्। यसको मूल भाषामा रहेको मूल दस्तावेज़लाई आधिकारिक स्रोत मानिनुपर्छ। महत्त्वपूर्ण जानकारीका लागि, व्यावसायिक मानव अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न हुने कुनै पनि गलतफहमी वा गलत व्याख्याको लागि हामी जिम्मेवार हुने छैनौं।