# Почетак рада са Python-ом и Scikit-learn-ом за регресионе моделе ![Резиме регресија у скицама](../../../../sketchnotes/ml-regression.png) > Скица од [Tomomi Imura](https://www.twitter.com/girlie_mac) ## [Квиз пре предавања](https://ff-quizzes.netlify.app/en/ml/) > ### [Ова лекција је доступна на R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) ## Увод У овим четири лекције, открићете како да направите регресионе моделе. Ускоро ћемо разговарати о томе за шта они служе. Али пре него што било шта урадите, уверите се да имате одговарајуће алате за почетак процеса! У овој лекцији, научићете како да: - Конфигуришете свој рачунар за локалне задатке машинског учења. - Радите са Jupyter нотебуком. - Користите Scikit-learn, укључујући инсталацију. - Истражите линеарну регресију кроз практичну вежбу. ## Инсталације и конфигурације [![ML за почетнике - Припремите своје алате за прављење модела машинског учења](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML за почетнике - Припремите своје алате за прављење модела машинског учења") > 🎥 Кликните на слику изнад за кратак видео о конфигурисању вашег рачунара за 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-а захтевају једну верзију софтвера, док друге захтевају другу верзију. Због тога је корисно радити у [виртуелном окружењу](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-у током овог курса, па би било добро да се упознате са [конфигурисањем Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) за Python развој. > Упознајте се са Python-ом кроз ову колекцију [Learn модула](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) > > [![Подешавање Python-а са Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Подешавање Python-а са Visual Studio Code") > > 🎥 Кликните на слику изнад за видео: коришћење Python-а унутар VS Code-а. 3. **Инсталирајте Scikit-learn**, пратећи [ова упутства](https://scikit-learn.org/stable/install.html). Пошто треба да осигурате да користите Python 3, препоручује се да користите виртуелно окружење. Напомена, ако инсталирате ову библиотеку на M1 Mac-у, постоје посебна упутства на страници изнад. 4. **Инсталирајте Jupyter Notebook**. Требаће вам [инсталација Jupyter пакета](https://pypi.org/project/jupyter/). ## Ваше окружење за ауторство ML-а Користићете **нотебуке** за развој вашег Python кода и креирање модела машинског учења. Овај тип датотеке је уобичајен алат за научнике о подацима, и могу се идентификовати по њиховом суфиксу или екстензији `.ipynb`. Нотебуци су интерактивно окружење које омогућава програмеру да и кодира и додаје белешке и пише документацију око кода, што је веома корисно за експерименталне или истраживачке пројекте. [![ML за почетнике - Подесите Jupyter Notebooks за почетак прављења регресионе моделе](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML за почетнике - Подесите Jupyter Notebooks за почетак прављења регресионе моделе") > 🎥 Кликните на слику изнад за кратак видео о овом задатку. ### Вежба - рад са нотебуком У овом фолдеру, наћи ћете датотеку _notebook.ipynb_. 1. Отворите _notebook.ipynb_ у Visual Studio Code-у. Jupyter сервер ће се покренути са Python 3+. Наћи ћете области нотебука које могу бити `покренуте`, делове кода. Можете покренути блок кода, тако што ћете изабрати икону која изгледа као дугме за репродукцију. 2. Изаберите икону `md` и додајте мало markdown-а, и следећи текст **# Добродошли у ваш нотебук**. Затим, додајте мало Python кода. 3. Унесите **print('hello notebook')** у блок кода. 4. Изаберите стрелицу да покренете код. Требало би да видите исписану изјаву: ```output hello notebook ``` ![VS Code са отвореним нотебуком](../../../../2-Regression/1-Tools/images/notebook.jpg) Можете испреплетати свој код са коментарима како бисте сами документовали нотебук. ✅ Размислите на тренутак колико је различито радно окружење веб програмера у односу на оно научника о подацима. ## Покретање Scikit-learn-а Сада када је Python подешен у вашем локалном окружењу, и када сте се упознали са Jupyter нотебуком, хајде да се једнако упознамо са Scikit-learn-ом (изговара се `sci` као у `science`). Scikit-learn пружа [опсежан API](https://scikit-learn.org/stable/modules/classes.html#api-ref) који вам помаже да обављате задатке машинског учења. Према њиховом [сајту](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn је библиотека машинског учења отвореног кода која подржава надгледано и ненадгледано учење. Такође пружа разне алате за прилагођавање модела, предобраду података, избор модела и евалуацију, као и многе друге корисне функције." У овом курсу, користићете Scikit-learn и друге алате за прављење модела машинског учења за обављање онога што називамо 'традиционалним задацима машинског учења'. Намерно смо избегли неуронске мреже и дубоко учење, јер су боље покривени у нашем предстојећем курикулуму 'AI за почетнике'. Scikit-learn олакшава прављење модела и њихову евалуацију за употребу. Првенствено је фокусиран на коришћење нумеричких података и садржи неколико готових скупова података за употребу као алате за учење. Такође укључује унапред направљене моделе које студенти могу испробати. Хајде да истражимо процес учитавања унапред припремљених података и коришћења уграђеног проценитеља за први ML модел са Scikit-learn-ом са неким основним подацима. ## Вежба - ваш први Scikit-learn нотебук > Овај туторијал је инспирисан [примером линеарне регресије](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) на Scikit-learn веб сајту. [![ML за почетнике - Ваш први пројекат линеарне регресије у Python-у](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML за почетнике - Ваш први пројекат линеарне регресије у Python-у") > 🎥 Кликните на слику изнад за кратак видео о овој вежби. У датотеци _notebook.ipynb_ повезаној са овом лекцијом, очистите све ћелије притиском на икону 'канта за смеће'. У овом делу, радићете са малим скупом података о дијабетесу који је уграђен у Scikit-learn за потребе учења. Замислите да желите да тестирате третман за пацијенте са дијабетесом. Модели машинског учења могу вам помоћи да одредите који пацијенти би боље реаговали на третман, на основу комбинација променљивих. Чак и веома основни регресиони модел, када се визуализује, може показати информације о променљивим које би вам помогле да организујете своје теоријске клиничке студије. ✅ Постоји много типова метода регресије, и који ћете изабрати зависи од одговора који тражите. Ако желите да предвидите вероватну висину особе одређене старости, користили бисте линеарну регресију, јер тражите **нумеричку вредност**. Ако вас занима да ли одређена врста кухиње треба да се сматра веганском или не, тражите **категоријску доделу**, па бисте користили логистичку регресију. Касније ћете научити више о логистичкој регресији. Размислите мало о неким питањима која можете поставити подацима, и који од ових метода би био прикладнији. Хајде да започнемо овај задатак. ### Увоз библиотека За овај задатак увешћемо неке библиотеке: - **matplotlib**. То је користан [алат за графиконе](https://matplotlib.org/) и користићемо га за креирање линијског графикона. - **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` и увозите `datasets`, `linear_model` и `model_selection` из `sklearn`. `model_selection` се користи за раздвајање података на сетове за обуку и тестирање. ### Скуп података о дијабетесу Уграђени [скуп података о дијабетесу](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) укључује 442 узорка података о дијабетесу, са 10 променљивих карактеристика, од којих неке укључују: - age: старост у годинама - bmi: индекс телесне масе - bp: просечан крвни притисак - s1 tc: Т-ћелије (врста белих крвних зрнаца) ✅ Овај скуп података укључује концепт 'пол' као променљиву карактеристику важну за истраживање о дијабетесу. Многи медицински скупови података укључују ову врсту бинарне класификације. Размислите мало о томе како категоризације попут ове могу искључити одређене делове популације из третмана. Сада, учитајте X и y податке. > 🎓 Запамтите, ово је надгледано учење, и потребан нам је именовани 'y' циљ. У новој ћелији кода, учитајте скуп података о дијабетесу позивајући `load_diabetes()`. Улаз `return_X_y=True` сигнализира да ће `X` бити матрица података, а `y` ће бити циљ регресије. 1. Додајте неке команде за испис како бисте приказали облик матрице података и њен први елемент: ```python X, y = datasets.load_diabetes(return_X_y=True) print(X.shape) print(X[0]) ``` Оно што добијате као одговор је тупл. Оно што радите је да доделите две прве вредности тупла `X` и `y` респективно. Сазнајте више [о тупловима](https://wikipedia.org/wiki/Tuple). Можете видети да ови подаци имају 442 ставке обликоване у низове од 10 елемената: ```text (442, 10) [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 -0.04340085 -0.00259226 0.01990842 -0.01764613] ``` ✅ Размислите мало о односу између података и циљне регресије. Линеарна регресија предвиђа односе између карактеристике X и циљне променљиве y. Можете ли пронаћи [циљ](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) за скуп података о дијабетесу у документацији? Шта овај скуп података показује, с обзиром на циљ? 2. Затим, изаберите део овог скупа података за графикон тако што ћете изабрати трећу колону скупа података. Можете то урадити коришћењем оператора `:` за избор свих редова, а затим избором треће колоне користећи индекс (2). Такође можете променити облик података у 2D низ - како је потребно за графикон - коришћењем `reshape(n_rows, n_columns)`. Ако је један од параметара -1, одговарајућа димензија се рачуна аутоматски. ```python X = X[:, 2] X = X.reshape((-1,1)) ``` ✅ У било ком тренутку, испишите податке да проверите њихов облик. 3. Сада када имате податке спремне за графикон, можете видети да ли машина може помоћи у одређивању логичке поделе између бројева у овом скупу података. Да бисте то урадили, потребно је да поделите и податке (X) и циљ (y) на сетове за тестирање и обуку. Scikit-learn има једноставан начин за то; можете поделити своје тест податке на одређеној тачки. ```python X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) ``` 4. Сада сте спремни да обучите свој модел! Учитајте модел линеарне регресије и обучите га са својим X и y сетовима за обуку користећи `model.fit()`: ```python model = linear_model.LinearRegression() model.fit(X_train, y_train) ``` ✅ `model.fit()` је функција коју ћете видети у многим ML библиотекама као што је TensorFlow. 5. Затим, направите предвиђање користећи тест податке, користећи функцију `predict()`. Ово ће се користити за цртање линије између група података. ```python y_pred = model.predict(X_test) ``` 6. Сада је време да прикажете податке на графикону. Matplotlib је веома користан алат за овај ✅ Размислите мало о томе шта се овде дешава. Права линија пролази кроз много малих тачака података, али шта она заправо ради? Можете ли видети како би требало да будете у могућности да користите ову линију за предвиђање где би нова, непозната тачка података требало да се уклопи у односу на 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) --- **Одрицање од одговорности**: Овај документ је преведен коришћењем услуге за превођење помоћу вештачке интелигенције [Co-op Translator](https://github.com/Azure/co-op-translator). Иако тежимо тачности, молимо вас да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на изворном језику треба сматрати ауторитативним извором. За критичне информације препоручује се професионални превод од стране људи. Не сносимо одговорност за било каква неспоразумевања или погрешна тумачења која могу произаћи из коришћења овог превода.