chore(i18n): sync translations with latest source changes (chunk 1/1, 12 changes)

pull/974/head
localizeflow[bot] 3 months ago
parent f4262644f3
commit 7d70d5f0a6

@ -36,8 +36,8 @@
"language_code": "bg"
},
"1-Introduction/4-techniques-of-ML/README.md": {
"original_hash": "9d91f3af3758fdd4569fb410575995ef",
"translation_date": "2025-09-05T00:26:03+00:00",
"original_hash": "84b1715a6be62ef1697351dcc5d7b567",
"translation_date": "2026-04-26T19:12:00+00:00",
"source_file": "1-Introduction/4-techniques-of-ML/README.md",
"language_code": "bg"
},
@ -90,8 +90,8 @@
"language_code": "bg"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "26c53a922f1f1e8542b0ea41ff52221a",
"translation_date": "2026-04-20T20:41:43+00:00",
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T19:11:25+00:00",
"source_file": "2-Regression/3-Linear/README.md",
"language_code": "bg"
},
@ -107,6 +107,12 @@
"source_file": "2-Regression/3-Linear/solution/Julia/README.md",
"language_code": "bg"
},
"2-Regression/3-Linear/solution/notebook.ipynb": {
"original_hash": "6781223ffbe8cfdaa38d0200f08e1288",
"translation_date": "2026-04-26T19:07:21+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "bg"
},
"2-Regression/4-Logistic/README.md": {
"original_hash": "abf86d845c84330bce205a46b382ec88",
"translation_date": "2025-09-04T23:26:51+00:00",

@ -1,13 +1,13 @@
# Техники на машинното обучение
Процесът на създаване, използване и поддържане на модели за машинно обучение и данните, които те използват, е много различен от много други работни потоци за разработка. В този урок ще разясним процеса и ще очертаем основните техники, които трябва да знаете. Ще:
Процесът на създаване, използване и поддръжка на модели за машинно обучение и данните, които използват, е много различен процес от много други работни потоци за разработка. В този урок ще разсеем мистерията около процеса и ще очертаем основните техники, които трябва да знаете. Вие ще:
- Разберете процесите, които стоят в основата на машинното обучение на високо ниво.
- Изследвате основни концепции като „модели“, „предсказания“ и „обучаващи данни“.
- Изследвате базови понятия като „модели“, „прогнози“ и „обучаващи данни“.
## [Тест преди лекцията](https://ff-quizzes.netlify.app/en/ml/)
## [Квиз преди лекция](https://ff-quizzes.netlify.app/en/ml/)
[![ML за начинаещи - Техники на машинното обучение](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML за начинаещи - Техники на машинното обучение")
[![ML for beginners - Techniques of Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning")
> 🎥 Кликнете върху изображението по-горе за кратко видео, което разглежда този урок.
@ -15,109 +15,111 @@
На високо ниво, изкуството на създаване на процеси за машинно обучение (ML) се състои от няколко стъпки:
1. **Определете въпроса**. Повечето процеси за ML започват с въпрос, който не може да бъде отговорен чрез проста условна програма или система, базирана на правила. Тези въпроси често се въртят около предсказания, базирани на съвкупност от данни.
2. **Съберете и подгответе данни**. За да можете да отговорите на въпроса си, ви трябват данни. Качеството и, понякога, количеството на вашите данни ще определят колко добре можете да отговорите на първоначалния си въпрос. Визуализирането на данни е важен аспект на тази фаза. Тази фаза включва и разделяне на данните на групи за обучение и тестване, за да се изгради модел.
3. **Изберете метод за обучение**. В зависимост от въпроса ви и естеството на данните, трябва да изберете как искате да обучите модел, за да отразява най-добре данните и да прави точни предсказания. Това е частта от процеса на ML, която изисква специфична експертиза и често значително количество експериментиране.
4. **Обучете модела**. Използвайки обучаващите си данни, ще използвате различни алгоритми, за да обучите модел да разпознава модели в данните. Моделът може да използва вътрешни тегла, които могат да бъдат коригирани, за да се даде предимство на определени части от данните пред други, за да се изгради по-добър модел.
5. **Оценете модела**. Използвате данни, които моделът никога не е виждал преди (вашите тестови данни), за да видите как се представя моделът.
6. **Настройка на параметри**. Въз основа на представянето на модела, можете да повторите процеса, използвайки различни параметри или променливи, които контролират поведението на алгоритмите, използвани за обучение на модела.
7. **Предсказание**. Използвайте нови входни данни, за да тествате точността на модела.
1. **Определете въпроса**. Повечето ML процеси започват с поставяне на въпрос, на който не може да се отговори чрез прост условен програмен код или основан на правила двигател. Тези въпроси често се въртят около прогнози, базирани на колекция от данни.
2. **Събиране и подготовка на данните**. За да можете да отговорите на въпроса си, ви трябват данни. Качеството и понякога количеството на вашите данни ще определят колко добре можете да отговорите на първоначалния въпрос. Визуализацията на данните е важен аспект на тази фаза. Тази фаза също включва разделяне на данните на обучаваща и тестова група за създаване на модел.
3. **Изберете метод за обучение**. В зависимост от вашия въпрос и природата на данните, трябва да изберете как искате да обучите модел, за да отрази най-добре данните и да направи точни прогнози спрямо тях. Това е частта от вашия ML процес, която изисква специфичен опит и често значително количество експериментиране.
4. **Обучете модела**. Използвайки обучаващите си данни, ще използвате различни алгоритми, за да обучите модел да разпознава шаблони в данните. Моделът може да използва вътрешни тежести, които да се регулират, за да придават приоритети на определени части от данните пред други, за да се създаде по-добър модел.
5. **Оценете модела**. Използвате данни, които моделът не е виждал преди (вашите тестови данни) от събраните, за да видите как моделът се представя.
6. **Настройка на параметрите**. Въз основа на представянето на модела можете да повторите процеса, използвайки различни параметри или променливи, които контролират поведението на алгоритмите, използвани за обучението на модела.
7. **Прогнозирайте**. Използвайте нови входни данни, за да тествате точността на модела си.
## Какъв въпрос да зададете
Компютрите са особено добри в откриването на скрити модели в данните. Тази способност е много полезна за изследователи, които имат въпроси за дадена област, които не могат лесно да бъдат отговорени чрез създаване на система, базирана на правила. Например, при актюерска задача, специалист по данни може да създаде ръчно изработени правила за смъртността на пушачи спрямо непушачи.
Компютрите са особено добри в откриването на скрити модели в данните. Тази полезност е много полезна за изследователи, които имат въпроси за дадена област, на които не може лесно да се отговори чрез създаване на условен двигател базиран на правила. Например, при актуарна задача, специалист по данни може да създаде ръчно изработени правила относно смъртността на пушачи срещу непушачи.
Когато в уравнението се включат много други променливи, обаче, модел за ML може да се окаже по-ефективен за предсказване на бъдещи нива на смъртност, базирани на предишна здравна история. По-радостен пример може да бъде правенето на прогнози за времето за месец април на дадено място, базирани на данни, които включват географска ширина, дължина, климатични промени, близост до океана, модели на струйния поток и други.
Когато в уравнението се включат много други променливи, обаче, ML модел може да се окаже по-ефективен за прогнозиране на бъдещи нива на смъртност въз основа на минала здравна история. По-радостен пример може да бъде правене на прогнози за времето през месец април в дадено място, базирани на данни, които включват ширина, дължина, изменение на климата, близост до океана, модели на струята на въздуха и още много.
✅ Тази [презентация](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) за модели на времето предлага историческа перспектива за използването на ML в анализа на времето.
✅ Тази [презентация](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) за модели за времето предлага историческа перспектива за използването на ML в анализа на времето.
## Задачи преди изграждането
## Подготвителни задачи
Преди да започнете да изграждате модела си, има няколко задачи, които трябва да изпълните. За да тествате въпроса си и да формирате хипотеза, базирана на предсказанията на модела, трябва да идентифицирате и конфигурирате няколко елемента.
Преди да започнете да изграждате модела си, има няколко задачи, които трябва да завършите. За да тествате вашия въпрос и да формирате хипотеза въз основа на прогнози на модела, трябва да идентифицирате и конфигурирате няколко елемента.
### Данни
За да можете да отговорите на въпроса си с някаква сигурност, ви е необходим достатъчен обем данни от правилния тип. На този етап трябва да направите две неща:
За да можете да отговорите на въпроса си с някаква сигурност, ви е необходимо голямо количество данни от правилния тип. Тук трябва да направите две неща:
- **Съберете данни**. Имайки предвид предишния урок за справедливостта в анализа на данни, събирайте данните си внимателно. Бъдете наясно с източниците на тези данни, всякакви присъщи пристрастия, които може да имат, и документирайте техния произход.
- **Подгответе данни**. Има няколко стъпки в процеса на подготовка на данни. Може да се наложи да съберете данни и да ги нормализирате, ако идват от различни източници. Можете да подобрите качеството и количеството на данните чрез различни методи, като например преобразуване на текстови низове в числа (както правим в [Клъстеризация](../../5-Clustering/1-Visualize/README.md)). Може също да генерирате нови данни, базирани на оригиналните (както правим в [Класификация](../../4-Classification/1-Introduction/README.md)). Можете да почистите и редактирате данните (както ще направим преди урока за [Уеб приложение](../../3-Web-App/README.md)). Накрая, може да се наложи да ги рандомизирате и разбъркате, в зависимост от техниките за обучение.
- **Съберете данни**. Имайки предвид предишния урок за справедливост в анализа на данни, събирайте данните си внимателно. Бъдете наясно с източниците на тези данни, каквито и да са техните присъщи пристрастия, и документирайте тяхното произход.
- **Подгответе данните**. Процесът на подготовка на данните включва няколко стъпки. Може да се наложи да обедините данни и да ги нормализирате, ако идват от различни източници. Можете да подобрите качеството и количеството на данните чрез различни методи, като например преобразуване на низове в числа (както правим в [Групиране](../../5-Clustering/1-Visualize/README.md)). Можете също да генерирате нови данни, базирани на оригиналните (както правим в [Класификация](../../4-Classification/1-Introduction/README.md)). Можете да почистите и редактирате данните (както ще направим преди урока за [Уеб приложение](../../3-Web-App/README.md)). Накрая, може да се наложи да ги разбъркате и премесите, в зависимост от техниките ви за обучение.
✅ След като съберете и обработите данните си, отделете момент, за да видите дали тяхната структура ще ви позволи да адресирате въпроса си. Възможно е данните да не се представят добре в дадената задача, както откриваме в нашите уроци за [Клъстеризация](../../5-Clustering/1-Visualize/README.md)!
✅ След събирането и обработката на данните, отделете момент да прецените дали тяхната форма ще ви позволи да се справите с поставения въпрос. Възможно е данните да не се представят добре в задачата, както ще открием в нашите уроци по [Групиране](../../5-Clustering/1-Visualize/README.md)!
### Характеристики и цел
### Променливи и целева променлива
[Характеристика](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) е измерима собственост на вашите данни. В много набори от данни тя е изразена като заглавие на колона, като „дата“, „размер“ или „цвят“. Вашата променлива за характеристика, обикновено представена като `X` в кода, представлява входната променлива, която ще се използва за обучение на модела.
[Функция (променлива)](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) е измеримо свойство на вашите данни. В много набори от данни тя се изразява като заглавие на колона, като „дата“, „размер“ или „цвят“. Вашата променлива функция, обикновено представена като `X` в кода, представлява входната променлива, която ще се използва за обучение на модел.
Целта е това, което се опитвате да предскажете. Целта, обикновено представена като `y` в кода, представлява отговора на въпроса, който се опитвате да зададете на данните: през декември, какъв **цвят** тикви ще бъдат най-евтини? В Сан Франциско, кои квартали ще имат най-добри цени на недвижими имоти? Понякога целта се нарича и атрибут на етикета.
Целта е нещо, което се опитвате да прогнозирате. Целевата променлива, обикновено представена като `y` в кода, представлява отговора на въпроса, който задавате на данните си: през декември, какъв **цвят** ще са най-евтините тикви? В Сан Франциско, кои квартали ще имат най-добра цена на недвижими имоти? Понякога целта се нарича и етикет.
### Избор на променлива за характеристика
### Избиране на променливата Функция
🎓 **Избор на характеристики и извличане на характеристики** Как да разберете коя променлива да изберете при изграждането на модел? Вероятно ще преминете през процес на избор на характеристики или извличане на характеристики, за да изберете правилните променливи за най-добре представящия се модел. Те обаче не са едно и също: „Извличането на характеристики създава нови характеристики от функции на оригиналните характеристики, докато изборът на характеристики връща подмножество от характеристиките.“ ([източник](https://wikipedia.org/wiki/Feature_selection))
🎓 **Избор на функции и извличане на функции** Как да знаете коя променлива да изберете при създаване на модел? Вероятно ще преминете през процес на избор на функции или извличане на функции, за да изберете правилните променливи за най-добър модел. Те обаче не са едно и също: „Извличането на функции създава нови функции от функции на оригиналните функции, докато изборът на функции връща подмножество от функциите.“ ([източник](https://wikipedia.org/wiki/Feature_selection))
### Визуализирайте данните си
Важен аспект от инструментариума на специалиста по данни е способността да визуализира данни, използвайки няколко отлични библиотеки като Seaborn или MatPlotLib. Представянето на данните визуално може да ви позволи да откриете скрити корелации, които можете да използвате. Вашите визуализации може също да ви помогнат да откриете пристрастия или небалансирани данни (както откриваме в [Класификация](../../4-Classification/2-Classifiers-1/README.md)).
Важен аспект от инструментария на специалиста по данни е възможността да визуализира данни с помощта на няколко отлични библиотеки като Seaborn или MatPlotLib. Визуалното представяне на данните може да ви позволи да откриете скрити корелации, които можете да използвате. Вашите визуализации също могат да ви помогнат да откриете пристрастия или небалансирани данни (както ще открием в [Класификация](../../4-Classification/2-Classifiers-1/README.md)).
### Разделете набора си от данни
Преди обучението трябва да разделите набора си от данни на две или повече части с неравни размери, които все пак добре представят данните.
Преди обучението трябва да разделите своя набор от данни на две или повече части с неравномерен размер, които все пак добре представят данните.
- **Обучение**. Тази част от набора от данни се използва за обучение на модела. Този набор представлява по-голямата част от оригиналния набор от данни.
- **Тестване**. Тестовият набор от данни е независима група от данни, често събрана от оригиналните данни, която използвате, за да потвърдите представянето на изградения модел.
- **Валидация**. Наборът за валидация е по-малка независима група от примери, която използвате, за да настроите хиперпараметрите или архитектурата на модела, за да го подобрите. В зависимост от размера на данните и въпроса, който задавате, може да не е необходимо да изграждате този трети набор (както отбелязваме в [Прогнозиране на времеви серии](../../7-TimeSeries/1-Introduction/README.md)).
- **Обучение**. Тази част от набора от данни се приспособява към вашия модел, за да го обучи. Този набор съставлява по-голямата част от оригиналния набор данни.
- **Тестване**. Тестовият набор е независима група данни, често събрана от оригиналните данни, която използвате, за да потвърдите представянето на създадения модел.
- **Валидация**. Валидиращият набор е по-малка независима група примери, която използвате, за да настроите хиперпараметрите или архитектурата на модела, за да го подобрите. В зависимост от размера на данните и въпроса, който задавате, може да не ви е нужно да създавате този трети набор (както отбелязваме в [Прогнозиране на времеви серии](../../7-TimeSeries/1-Introduction/README.md)).
## Изграждане на модел
## Създаване на модел
Използвайки обучаващите си данни, целта ви е да изградите модел, или статистическо представяне на данните, използвайки различни алгоритми за **обучение**. Обучението на модел го излага на данни и му позволява да прави предположения за възприети модели, които открива, валидира и приема или отхвърля.
Използвайки обучаващите си данни, вашата цел е да създадете модел, или статистическо представяне на вашите данни, като използвате различни алгоритми, за да го **обучите**. Обучението на модел го излага на данни и му позволява да прави предположения за възприетите от него шаблони, които открива, валидира, приема или отхвърля.
### Изберете метод за обучение
В зависимост от въпроса ви и естеството на данните, ще изберете метод за обучение. Преглеждайки [документацията на Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - която използваме в този курс - можете да изследвате много начини за обучение на модел. В зависимост от опита ви, може да се наложи да опитате няколко различни метода, за да изградите най-добрия модел. Вероятно ще преминете през процес, при който специалистите по данни оценяват представянето на модела, като му подават невиждани данни, проверяват за точност, пристрастия и други проблеми, които намаляват качеството, и избират най-подходящия метод за обучение за дадената задача.
В зависимост от въпроса и природата на данните, ще изберете метод за обучението им. Преглеждайки [документацията на Scikit-learn](https://scikit-learn.org/stable/user_guide.html) библиотеката, която използваме в този курс можете да проучите много начини за обучение на модел. Възможно е да се наложи да изпробвате няколко различни метода, за да създадете най-добрия модел. Вероятно ще преминете през процес, при който специалистите по данни оценяват представянето на модел, като му подават невиждани преди това данни, проверяват точността, пристрастията и други проблеми, които влошават качеството, и избират най-подходящия метод за обучение за конкретната задача.
### Обучете модел
С обучаващите си данни сте готови да ги „поставите“ в модела, за да го създадете. Ще забележите, че в много библиотеки за ML ще намерите кода 'model.fit' - това е моментът, когато подавате променливата за характеристика като масив от стойности (обикновено 'X') и целевата променлива (обикновено 'y').
Въоръжени с обучаващите си данни, сте готови да ги 'приспособите' за създаване на модел. Ще забележите, че в много библиотеки за ML ще намерите код 'model.fit' именно тогава подавате своята променлива функция като масив от стойности (обикновено 'X') и целевата променлива (обикновено 'y').
### Оценете модела
След като процесът на обучение приключи (може да отнеме много итерации, или „епохи“, за да се обучи голям модел), ще можете да оцените качеството на модела, като използвате тестови данни, за да прецените представянето му. Тези данни са подмножество на оригиналните данни, които моделът не е анализирал преди. Можете да отпечатате таблица с метрики за качеството на модела.
След като обучението приключи (може да отнеме много итерации или 'епохи', за да се обучи голям модел), ще можете да оцените качеството на модела, като използвате тестови данни, за да измерите представянето му. Тези данни са подмножество от оригиналните данни, които моделът не е анализирал преди. Можете да изведете таблица с метрики за качеството на модела.
🎓 **Приспособяване на модела**
🎓 **Приспособяване на модел**
В контекста на машинното обучение, приспособяването на модела се отнася до точността на основната функция на модела, докато той се опитва да анализира данни, с които не е запознат.
В контекста на машинното обучение, приспособяването на модел се отнася до точността на функцията под модела, докато тя се опитва да анализира данни, с които не е запозната.
🎓 **Недостатъчно обучение** и **прекомерно обучение** са често срещани проблеми, които намаляват качеството на модела, тъй като моделът се приспособява или недостатъчно добре, или прекалено добре. Това води до предсказания, които са или твърде тясно свързани, или твърде свободно свързани с обучаващите данни. Прекомерно обучен модел предсказва обучаващите данни твърде добре, защото е научил детайлите и шума в данните твърде добре. Недостатъчно обучен модел не е точен, тъй като не може нито точно да анализира обучаващите данни, нито данни, които не е „виждал“.
🎓 **Недообучение** и **преобучение** са често срещани проблеми, които влошават качеството на модела, тъй като той пасва или недостатъчно, или твърде добре. Това кара модела да прави прогнози, които са твърде близки или твърде далеч от обучаващите му данни. Преобученият модел предсказва обучаващите данни прекалено добре, защото е научил детайлите и шума в тях твърде добре. Недообученият модел не е точен, тъй като не може нито да анализира точно обучаващите си данни, нито непознати за него данни.
![модел с прекомерно обучение](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png)
![overfitting model](../../../../translated_images/bg/overfitting.1c132d92bfd93cb6.webp)
> Инфографика от [Jen Looper](https://twitter.com/jenlooper)
## Настройка на параметри
## Настройка на параметрите
След като първоначалното обучение приключи, наблюдавайте качеството на модела и обмислете подобряването му чрез настройка на неговите „хиперпараметри“. Прочетете повече за процеса [в документацията](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
След като първоначалното обучение приключи, наблюдавайте качеството на модела и обмислете да го подобрите, като коригирате неговите „хиперпараметри“. Прочетете повече за процеса [в документацията](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
## Предсказание
## Прогноза
Това е моментът, в който можете да използвате напълно нови данни, за да тествате точността на модела. В „практическа“ среда за ML, където изграждате уеб активи за използване на модела в продукция, този процес може да включва събиране на потребителски вход (например натискане на бутон), за да зададете променлива и да я изпратите на модела за извод или оценка.
Това е моментът, в който можете да използвате напълно нови данни, за да тествате точността на модела си. В „приложен“ ML контекст, където изграждате уеб ресурси за използване на модела в продукция, този процес може да включва събиране на вход от потребител (например натискане на бутон) за задаване на променлива и изпращането ѝ към модела за извод или оценка.
В тези уроци ще откриете как да използвате тези стъпки, за да подготвите, изградите, тествате, оцените и предскажете - всички жестове на специалист по данни и още, докато напредвате в пътуването си да станете „пълен стек“ инженер за ML.
В тези уроци ще откриете как да използвате тези стъпки за подготовка, изграждане, тестване, оценка и прогнозиране - всички жестове на специалист по данни и още, докато напредвате в пътешествието си да станете 'full stack' ML инженер.
---
## 🚀Предизвикателство
Начертайте диаграма на потока, отразяваща стъпките на специалист по ML. Къде виждате себе си в процеса в момента? Къде предвиждате, че ще срещнете трудности? Какво ви изглежда лесно?
Начертайте блок-схема, отразяваща стъпките на ML практикуващия. Къде се намирате в процеса в момента? Къде предвиждате да срещнете трудности? Какво ви изглежда лесно?
## [Тест след лекцията](https://ff-quizzes.netlify.app/en/ml/)
## [Квиз след лекция](https://ff-quizzes.netlify.app/en/ml/)
## Преглед и самостоятелно обучение
## Преглед и самостоятелно учене
Търсете онлайн интервюта със специалисти по данни, които обсъждат ежедневната си работа. Ето [едно](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
Потърсете онлайн интервюта с специалисти по данни, които говорят за ежедневната си работа. Ето [едно](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
## Задание
## Задача
[Интервюирайте специалист по данни](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Отказ от отговорност**:
Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматичните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод.
Този документ е преведен с помощта на AI преводаческа услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,135 +1,136 @@
# Изграждане на регресионен модел с помощта на Scikit-learn: регресия по четири начина
# Създаване на регресионен модел с Scikit-learn: регресия по четири начина
## Забележка за начинаещи
## Бележка за начинаещи
Линейната регресия се използва, когато искаме да предскажем **числена стойност** (например цена на къща, температура или продажби). Тя работи чрез намиране на права линия, която най-добре представя връзката между входните характеристики и изхода.
Линейната регресия се използва, когато искаме да предскажем **числова стойност** (например цена на къща, температура или продажби).
Тя работи чрез намиране на права линия, която най-добре представя връзката между входните признаци и изхода.
В този урок се фокусираме върху разбирането на концепцията, преди да разгледаме по-сложни регресионни техники.
В този урок се фокусираме върху разбирането на концепцията, преди да разгледаме по-усъвършенствани регресионни техники.
![Линейна срещу полиномиална регресия инфографика](../../../../translated_images/bg/linear-polynomial.5523c7cb6576ccab.webp)
> Инфографика от [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [Предварителен тест](https://ff-quizzes.netlify.app/en/ml/)
## [Кратък тест преди лекцията](https://ff-quizzes.netlify.app/en/ml/)
> ### [Този урок е наличен и на R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### Въведение
> ### [Този урок е достъпен и на R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### Въведение
Досега разгледахте какво е регресия чрез примерни данни от набора с цени на тикви, който ще използваме през целия урок. Също така го визуализирахте с помощта на Matplotlib.
Досега разгледахте какво е регресия с примерни данни, събрани от набора от данни за цени на тикви, който ще използваме в целия урок. Също така ги визуализирахте с помощта на Matplotlib.
Сега сте готови да навлезете по-дълбоко в регресията за ML. Докато визуализацията ви позволява да разберете данните, истинската сила на Машинното обучение идва от _обучението на модели_. Моделите се обучават върху исторически данни, за да уловят автоматично зависимостите в данните, и ви позволяват да предсказвате резултати за нови данни, които моделът не е виждал досега.
Сега сте готови да навлезете по-дълбоко в регресията за машинно обучение. Визуализацията ви позволява да разберете данните, но истинската сила на машинното обучение идва от _обучението на модели_. Моделите се обучават върху исторически данни, за да заснемат автоматично зависимостите в данните, и ви позволяват да предсказвате резултати при нови данни, които моделът не е виждал преди.
В този урок ще научите повече за два вида регресия: _основна линейна регресия_ и _полиномиална регресия_, заедно с част от математиката зад тези техники. Тези модели ще ни позволят да предсказваме цените на тиквите в зависимост от различни входни данни.
В този урок ще научите повече за два вида регресия: _основна линейна регресия_ и _полиномиална регресия_, заедно с част от математиката, лежаща в основата на тези техники. Тези модели ще ни позволят да предсказваме цените на тиквите в зависимост от различни входни данни.
[![ML за начинаещи - Разбиране на линейната регресия](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML за начинаещи - Разбиране на линейната регресия")
> 🎥 Кликнете върху изображението по-горе за кратко видео с обобщение на линейната регресия.
> 🎥 Кликнете върху изображението по-горе за кратко видео с обзор на линейната регресия.
> В целия този учебен план предполагаме минимални знания по математика и се стремим да го направим достъпен за студенти от други области, затова внимавайте за бележки, 🧮 извадки, схеми и други учебни средства, които подпомагат разбирането.
> В целия този учебен курс приемаме минимални познания по математика и се стараем да го направим достъпен за студенти от други области, затова обръщайте внимание на бележките, 🧮 математическите обръщения, диаграмите и други учебни средства за улеснение на разбирането.
### Предварителни умения
### Изисквания
До момента трябва да сте запознати със структурата на данните за тиквите, които разглеждаме. Можете да ги намерите предварително заредени и почистени във файла _notebook.ipynb_ за този урок. Във файла цената на тиквите се показва на бушел в нов DataFrame. Уверете се, че можете да стартирате тези тетрадки (notebooks) в ядра (kernels) в Visual Studio Code.
Към момента трябва да сте запознати със структурата на данните за тиквите, които разглеждаме. Можете да ги намерите предварително заредени и почистени в _notebook.ipynb_ файла за този урок. Във файла цената на тиквите е показана на бушел в нов dataframe. Уверете се, че можете да стартирате тези ноутбуци в kernel на Visual Studio Code.
### Подготовка
Като напомняне, зареждате тези данни, за да можете да задавате въпроси спрямо тях.
Напомняме, че зареждате тези данни, за да можете да задавате въпроси към тях.
- Кога е най-доброто време да се купуват тикви?
- Каква цена мога да очаквам за кутия с мини тикви?
- Трябва ли да ги купувам в кошници по половин бушел или в кутии по 1 1/9 бушел?
Нека продължим да изследваме тези данни.
- Кога е най-доброто време за покупка на тикви?
- Каква цена мога да очаквам за кашон миниатюрни тикви?
- Трябва ли да ги купувам в полубушелен кош или в кутия от 1 1/9 бушела?
Нека продължим да разглеждаме тези данни.
В предишния урок създадохте Pandas DataFrame и го запълнихте с част от оригиналния набор от данни, стандартизирайки цените на бушел. По този начин обаче събрахте само около 400 точки данни и то само за есенните месеци.
В предишния урок създадохте Pandas dataframe и го попълнихте с част от оригиналния набор от данни, стандартизирайки цените според бушел. Като направихте това, обаче събрахте само около 400 точки с данни и само за есенните месеци.
Вижте данните, които предварително заредихме в съпровождащата тетрадка за този урок. Данните са предварително заредени и е начертан първоначален разсейващ (scatter) график за данните по месеци. Може би можем да добавим малко повече детайли за естеството на данните чрез по-добро почистване.
Погледнете данните, които заредихме предварително в ноутбука за този урок. Данните са предварително заредени и е начертан начален scatterplot, показващ месечните данни. Може би можем да получим малко повече информация за характера на данните чрез по-добро почистване.
## Линия на линейната регресия
## Линия на линейна регресия
Както научихте в Урок 1, целта на упражнение по линейна регресия е да можете да начертаете линия, която да:
Както научихте в Урок 1, целта на упражнението с линейна регресия е да можем да начертаем линия, която:
- **Показва взаимовръзки между променливи**. Показва връзката между променливите
- **Прави прогнози**. Прави точни прогнози за това къде нова точка данни би попаднала в съотношение с линията.
- **Показва връзките между променливите**. Показва връзката между променливите
- **Прави предсказания**. Прави точни прогнози къде новата точка ще попадне спрямо тази линия.
Точно такава линия обичайно се чертае с помощта на **регресия с минимални квадрати** (Least-Squares Regression). Терминът "минимални квадрати" се отнася до процеса на минимизиране на общата грешка в нашия модел. За всяка точка данни измерваме вертикалното разстояние (наречено остатък) между действителната точка и нашата регресионна линия.
Обичайно за **Регресия по метод на най-малките квадрати** е да се изчертае този тип линия. Терминът „най-малки квадрати“ се отнася до процеса на минимизиране на общата грешка в нашия модел. За всяка точка измерваме вертикалното разстояние (наречено остатък) между реалната точка и нашата регресионна линия.
Тези разстояния се повдигат на квадрат по две основни причини:
Квадратираме тези разстояния по две основни причини:
1. **Величина пред посока:** Искаме да третираме грешка -5 същo като грешка +5. Квaдратирането превръща всички стойности в положителни.
1. **Модул пред посока:** Искаме да третираме грешка от -5 по същия начин, както грешка от +5. Квадратирането прави всички стойности положителни.
2. **Накaзване на екстремни стойности:** Квaдратирането придава по-голяма тежест на по-големите грешки, принуждавайки линията да стои по-близо до точки, които са далеч.
2. **Наказване на изходящи стойности:** Квадратирането придава по-голяма тежест на по-големите грешки, принуждавайки линията да стои по-близо до отдалечените точки.
След това събираме всички тези квадратирани стойности. Целта ни е да намерим конкретна линия, при която тази крайна сума е най-малка (най-малката възможна стойност) — откъдето идва и името "минимални квадрати".
Сумираме всички тези квадратирани стойности. Целта ни е да намерим конкретната линия, при която тази крайна сума е най-малка (най-малката възможна стойност) — оттук идва името „най-малки квадрати“.
> **🧮 Покажи ми математиката**
> **🧮 Покажете ми математиката**
>
> Тази линия, наречена _линия на най-добро прилягане_, може да бъде изразена с [уравнение](https://en.wikipedia.org/wiki/Simple_linear_regression):
> Тази линия, наречена _линия на най-добро приспособление_, може да се опише с [уравнение](https://en.wikipedia.org/wiki/Simple_linear_regression):
>
> ```
> Y = a + bX
> ```
>
> `X` е 'обяснителна променлива'. `Y` е 'зависима променлива'. Наклонът на линията е `b`, а `a` е сечението по оста y, което означава стойността на `Y` когато `X = 0`.
> `X` е 'обяснителната променлива'. `Y` е 'зависимата променлива'. Наклонът на линията е `b`, а `a` е пресечната точка с оста Y, която означава стойността на `Y`, когато `X = 0`.
>
>![изчисляване на наклона](../../../../translated_images/bg/slope.f3c9d5910ddbfcf9.webp)
>
> Първо изчислете наклона `b`. Инфографика от [Jen Looper](https://twitter.com/jenlooper)
> Първо, изчислете наклона `b`. Инфографика от [Jen Looper](https://twitter.com/jenlooper)
>
> С други думи, и във връзка с първоначалния въпрос в нашите данни за тиквите: "предскажи цената на тиква на бушел по месеци", `X` ще се отнася до цената, а `Y` до месеца на продажбата.
> С други думи, и с оглед на първоначалния въпрос за нашите тиквени данни: "предскажете цената на тиква на бушел по месеци", `X` би означавало цената, а `Y` би било месецът на продажба.
>
>![завърши уравнението](../../../../translated_images/bg/calculation.a209813050a1ddb1.webp)
>![завършване на уравнението](../../../../translated_images/bg/calculation.a209813050a1ddb1.webp)
>
> Изчислете стойността на Y. Ако плащате около 4 долара, трябва да е април! Инфографика от [Jen Looper](https://twitter.com/jenlooper)
> Изчислете стойността на `Y`. Ако плащате около 4 долара, значи е април! Инфографика от [Jen Looper](https://twitter.com/jenlooper)
>
> Математиката зад изчисляването на линията трябва да отрази наклона на линията, който също зависи от сечението, т.е. къде е `Y` когато `X = 0`.
> Математиката, която изчислява линията, трябва да демонстрира наклона на линията, който зависи и от пресечната точка, или къде се намира `Y` когато `X = 0`.
>
> Можете да видите начина на изчисление за тези стойности на уебсайта [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Посетете също [този калкулатор за минимални квадрати](https://www.mathsisfun.com/data/least-squares-calculator.html), за да проследите как стойностите влияят на линията.
> Можете да проследите метода на изчисление за тези стойности на [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Посетете и [тотова най-малки квадрати калкулатор](https://www.mathsisfun.com/data/least-squares-calculator.html), за да видите как стойностите влияят на линията.
## Корелация
Още един термин, който да разберете, е **коефициентът на корелация** между дадени променливи X и Y. Използвайки разсейващ (scatter) график, може бързо да визуализирате този коефициент. Графика с точки, подредени в чиста линия, показва висока корелация, докато графика с точки разпръснати навсякъде между X и Y показва ниска корелация.
Още един термин, който трябва да разберем е **коефициентът на корелация** между дадени променливи X и Y. С помощта на scatterplot можете бързо да визуализирате този коефициент. Графика с точки, разположени по красива права линия, има висока корелация, а графика с точки, разпръснати навсякъде между X и Y, има ниска корелация.
Добър линейно регресионен модел е този, който има висок (по-близо до 1 отколкото до 0) коефициент на корелация при приложена метода на регресия с минимални квадрати с линия на регресия.
Добър модел за линейна регресия ще има висок (по-близък до 1 отколкото до 0) коефициент на корелация, използвайки метода на най-малките квадрати с регресионна линия.
✅ Стартирайте тетрадката, придружаваща този урок, и разгледайте разсейващия график Месец към Цена. Изглежда ли асоциацията между Месец и Цена за продажбата на тикви с висока или ниска корелация според вашата визуална интерпретация на графиката? Променя ли се това, ако използвате по-фина мярка вместо `Месец`, напр. *ден от годината* (т.е. брой дни от началото на годината)?
✅ Стартирайте ноутбука, придружаващ този урок, и погледнете scatterplot на Месец спрямо Цена. Изглежда ли данните, свързващи Месец с Цена за продажбите на тиквите, имат висока или ниска корелация, според вашата визуална интерпретация на scatterplot? Променя ли се това, ако използвате по-фино измерване вместо `Month`, напр. *ден от годината* (т.е. брой дни отначалото на годината)?
В следващия код ще приемем, че сме почистили данните и сме получили DataFrame, наречен `new_pumpkins`, подобен на следния:
В кода по-долу ще приемем, че сме почистили данните и сме получили data frame с име `new_pumpkins`, подобен на следния:
ID | Месец | ДенОтГодината | Вид | Град | Опаковка | Минимална цена | Максимална цена | Цена
ID | Месец | ДенОтГодината | Вид | Град | Опаковка | Ниска Цена | Висока Цена | Цена
---|-------|-----------|---------|------|---------|-----------|------------|-------
70 | 9 | 267 | ПАЙ ТИП | БАЛТИМОР | 1 1/9 бушелови кутии | 15.0 | 15.0 | 13.636364
71 | 9 | 267 | ПАЙ ТИП | БАЛТИМОР | 1 1/9 бушелови кутии | 18.0 | 18.0 | 16.363636
72 | 10 | 274 | ПАЙ ТИП | БАЛТИМОР | 1 1/9 бушелови кутии | 18.0 | 18.0 | 16.363636
73 | 10 | 274 | ПАЙ ТИП | БАЛТИМОР | 1 1/9 бушелови кутии | 17.0 | 17.0 | 15.454545
74 | 10 | 281 | ПАЙ ТИП | БАЛТИМОР | 1 1/9 бушелови кутии | 15.0 | 15.0 | 13.636364
70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 бушел картонени кутии | 15.0 | 15.0 | 13.636364
71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 бушел картонени кутии | 18.0 | 18.0 | 16.363636
72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 бушел картонени кутии | 18.0 | 18.0 | 16.363636
73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 бушел картонени кутии | 17.0 | 17.0 | 15.454545
74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 бушел картонени кутии | 15.0 | 15.0 | 13.636364
> Кодът за почистване на данните е наличен във [`notebook.ipynb`](notebook.ipynb). Извършихме същите стъпки по почистване както в предишния урок и изчислихме колоната `DayOfYear` с помощта на следното изражение:
> Кодът за почистване на данните е наличен в [`notebook.ipynb`](notebook.ipynb). Извършихме същите стъпки за почистване както в предишния урок и изчислихме колоната `DayOfYear` със следното изражение:
```python
day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)
```
Сега, когато разбирате математиката зад линейната регресия, нека създадем регресионен модел, за да видим дали можем да предскажем коя опаковка тикви ще има най-добри цени. Някой, който купува тикви за празничен тиквен етикет, може да иска тази информация, за да оптимизира покупките на опаковки тикви за етикета.
Сега, когато разбирате математиката зад линейната регресия, нека създадем регресионен модел, за да видим дали можем да предскажем коя опаковка тикви ще има най-добра цена. Някой, който купува тикви за празнична градина с тикви, би искал тази информация, за да оптимизира покупките си на опаковки тикви.
## Търсене на корелация
[![ML за начинаещи - Търсене на корелация: Ключът към линейната регресия](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML за начинаещи - Търсене на корелация: Ключът към линейната регресия")
[![ML за начинаещи - Търсене на корелация: ключът към линейната регресия](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML за начинаещи - Търсене на корелация: ключът към линейната регресия")
> 🎥 Кликнете върху изображението по-горе за кратко видео с обобщение на корелацията.
> 🎥 Кликнете върху изображението по-горе за кратко видео с обзор на корелацията.
От предишния урок вероятно сте видели, че средната цена за различните месеци изглежда така:
От предишния урок вероятно сте забелязали, че средната цена за различните месеци изглежда така:
<img alt="Средна цена по месеци" src="../../../../translated_images/bg/barchart.a833ea9194346d76.webp" width="50%"/>
Това предполага, че трябва да има някаква корелация и можем да пробваме да обучим модел на линейна регресия за прогнозиране на връзката между `Месец` и `Цена`, или между `ДенОтГодината` и `Цена`. Ето разсейващия график, който показва последната връзка:
Това подсказва, че има някаква корелация, и можем да опитаме да обучим линейна регресия, за да предскажем връзката между `Month` и `Price`, или между `DayOfYear` и `Price`. Ето scatterplot, който показва последната връзка:
<img alt="Scatter plot Цена срещу Ден от година" src="../../../../translated_images/bg/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
<img alt="Scatter plot на Цена спрямо Ден от Годината" src="../../../../translated_images/bg/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
Нека проверим дали има корелация с функцията `corr`:
Нека видим дали има корелация с функцията `corr`:
```python
print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
```
Изглежда, че корелацията е доста малка, -0.15 за `Месец` и -0.17 за `ДенОтГодината`, но може да има друга важна връзка. Изглежда има различни клъстери от цени, съответстващи на различни сортове тикви. За да потвърдим тази хипотеза, нека начертаем всяка категория тикви с различен цвят. Предавайки параметър `ax` на функцията за разсейващ график, можем да начертаем всички точки на един и същ график:
Изглежда, че корелацията е доста малка, -0.15 за `Month` и -0.17 за `DayOfYear`, но може да има друга важна връзка. Изглежда, че има различни групи цени, съответстващи на различни видове тикви. За да потвърдим тази хипотеза, нека начертаем всяка категория тикви с различен цвят. Като подаваме параметър `ax` на функцията `scatter`, можем да начертаем всички точки на една и съща графика:
```python
ax=None
@ -139,42 +140,42 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()):
ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var)
```
<img alt="Разсейващ график Цена срещу Ден от година, цветно" src="../../../../translated_images/bg/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
<img alt="Scatter plot на Цена спрямо Ден от Годината с цветове" src="../../../../translated_images/bg/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
Нашето разследване подсказва, че видът има по-голямо влияние върху цената отколкото точната дата на продажба. Можем да го видим и на лентов график:
Нашето изследване подсказва, че видът оказва по-голямо влияние върху общата цена, отколкото действителната дата на продажба. Това може да се види с помощта на бар графика:
```python
new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
```
<img alt="Бар графика на цена по вид" src="../../../../translated_images/bg/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
<img alt="Бар графика на цена спрямо вид" src="../../../../translated_images/bg/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
Нека се фокусираме за момент само върху един сорт тикви - 'пай тип' и да видим каква е зависимостта на цената от датата:
Нека сега се съсредоточим само върху един вид тикви, 'pie type', и видим каква е ефекта на датата върху цената:
```python
pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
pie_pumpkins.plot.scatter('DayOfYear','Price')
```
<img alt="Разсейващ график Цена срещу Ден от година" src="../../../../translated_images/bg/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
<img alt="Scatter plot на Цена спрямо Ден от Годината" src="../../../../translated_images/bg/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
Ако сега изчислим корелацията между `Цена` и `ДенОтГодината` чрез функцията `corr`, ще получим нещо като `-0.27` — което означава, че има смисъл да обучим предсказващ модел.
Ако изчислим корелацията между `Price` и `DayOfYear` с функцията `corr`, ще получим стойност около `-0.27` — което означава, че обучението на предсказващ модел има смисъл.
> Преди да обучите модел на линейна регресия, е важно да сте сигурни, че данните са чисти. Линейната регресия не работи добре с липсващи стойности, затова е разумно да се отървем от всички празни клетки:
> Преди да започнете обучение на линеен регресионен модел, важно е да се уверим, че данните са чисти. Линейната регресия не работи добре с липсващи стойности, затова е добре да премахнем всички празни клетки:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
Друг подход би бил да запълним празните стойности със средните стойности от съответните колони.
Друг подход би бил да запълним липсващите стойности със средни стойности от съответната колона.
## Проста линейна регресия
[![ML за начинаещи - Линейна и полиномиална регресия с Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML за начинаещи - Линейна и полиномиална регресия с Scikit-learn")
> 🎥 Кликнете върху изображението по-горе за кратко видео с обобщение на линейната и полиномиалната регресия.
> 🎥 Кликнете върху изображението по-горе за кратко видео с обзор на линейната и полиномиалната регресия.
За да обучим нашия модел на Линейна Регресия, ще използваме библиотеката **Scikit-learn**.
За да обучим модела за линейна регресия, ще използваме библиотеката **Scikit-learn**.
```python
from sklearn.linear_model import LinearRegression
@ -182,31 +183,31 @@ from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
Започваме с разделяне на входните стойности (характеристики) и очаквания изход (етикет) в отделни numpy масиви:
Започваме с отделяне на входните стойности (признаци) и очаквания изход (етикет) в отделни numpy масиви:
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> Обърнете внимание, че трябваше да извършим `reshape` върху входните данни, за да може пакетът за Линейна Регресия да ги разбере правилно. Линейната Регресия очаква 2D-масив като вход, където всеки ред на масива съответства на вектор от входни характеристики. В нашия случай, тъй като имаме само един вход, ни трябва масив с форма N&times;1, където N е размерът на набора от данни.
> Забележете, че трябва да приложим `reshape` към входните данни, за да може пакетът Linear Regression да ги разбере правилно. Линейната регресия очаква 2D масив като вход, където всеки ред от масива съответства на вектор с входни признаци. В нашия случай, тъй като имаме само един вход — нуждаем се от масив с форма N&times;1, където N е размерът на набора от данни.
След това трябва да разделим данните на обучаващ (train) и тестов (test) набор, за да можем да валидираме модела след обучението:
След това трябва да разделим данните на тренировъчни и тестови, за да можем да валидираме модела след обучението:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
Накрая, обучението на самия модел на Линейна Регресия отнема само два реда код. Дефинираме обект `LinearRegression` и го обучаваме с метода `fit` върху нашите данни:
Накрая, обучението на самия линеен регресионен модел отнема само два реда код. Дефинираме обекта `LinearRegression` и го пригодяваме към нашите данни с метода `fit`:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
Обектът `LinearRegression` след като е бил трениран (`fit`) съдържа всички коефициенти на регресията, които могат да се достъпят чрез свойството `.coef_`. В нашия случай има само един коефициент, който трябва да е около `-0.017`. Това означава, че цените изглежда леко спадат с времето, но не много, около 2 цента на ден. Можем също така да достъпим точката на пресичане на регресията с Y-оста чрез `lin_reg.intercept_` - тя ще е около `21` в нашия случай, указвайки цената в началото на годината.
Обектът `LinearRegression` след като бъде обучен с `fit` съдържа всички коефициенти на регресията, които могат да бъдат достъпени чрез свойството `.coef_`. В нашия случай има само един коефициент, който трябва да бъде около `-0.017`. Това означава, че цените изглежда спадат малко с времето, но не много, около 2 цента на ден. Можем също да достъпим пресечната точка на регресията с Y-оста чрез `lin_reg.intercept_` тя ще бъде около `21` в нашия случай, което показва цената в началото на годината.
За да видим колко е точен нашият модел, можем да предскажем цените върху тестов набор от данни и след това да измерим колко близо са предсказанията ни до очакваните стойности. Това може да се направи с помощта на метриката корен квадратен средна грешка (RMSE), която е корена на средната стойност на всички квадратирани разлики между очакваната и предсказаната стойност.
За да видим колко точен е нашият модел, можем да предскажем цените върху тестов набор от данни и след това да измерим колко близки са прогнозите ни до очакваните стойности. Това може да се направи чрез метриката средноквадратична грешка (RMSE), която е квадратният корен на средното от всички квадратирани разлики между очакваната и предсказаната стойност.
```python
pred = lin_reg.predict(X_test)
@ -215,16 +216,16 @@ rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
```
Грешката ни изглежда около 2 точки, което е ~17%. Не много добре. Друг индикатор за качество на модела е **коефициентът на детерминация**, който може да се получи така:
Нашата грешка е около 2 точки, което е ~17%. Не е много добре. Друг индикатор за качеството на модела е **коефициентът на детерминация**, който може да бъде изчислен по следния начин:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
Ако стойността е 0, това означава, че моделът не взема предвид входните данни и действа като *най-лошия линеен предсказател*, което е просто средната стойност на резултата. Стойността 1 означава, че можем да предскажем перфектно всички очаквани изходи. В нашия случай коефициентът е около 0.06, което е доста ниско.
Ако стойността е 0, това означава, че моделът не взема предвид входните данни и действа като *най-лошия линеен предиктор*, който просто е средната стойност на резултата. Стойността 1 означава, че можем перфектно да предскажем всички очаквани изходни стойности. В нашия случай коефициентът е около 0.06, което е доста ниско.
Можем също да изобразим тестовите данни заедно с регресионната линия, за да видим по-добре как работи регресията в нашия случай:
Можем също така да начертаем тестовите данни заедно с линията на регресия, за да видим по-добре как работи регресията в нашия случай:
```python
plt.scatter(X_test,y_test)
@ -235,17 +236,17 @@ plt.plot(X_test,pred)
## Полиномиална регресия
Друг вид линейна регресия е полиномиалната регресия. Докато понякога има линейна зависимост между променливите - колкото по-голяма е тиквата като обем, толкова по-висока е цената - понякога тези зависимости не могат да се представят като равнина или права линия.
Друг вид линейна регресия е полиномиалната регресия. Докато понякога има линейна зависимост между променливите - колкото по-голяма е тиквата по обем, толкова по-висока е цената - понякога тези връзки не могат да бъдат моделирани чрез равнина или права линия.
✅ Ето [още няколко примера](https://online.stat.psu.edu/stat501/lesson/9/9.8) на данни, които биха могли да използват полиномиална регресия
✅ Ето [още няколко примера](https://online.stat.psu.edu/stat501/lesson/9/9.8) на данни, които могат да се използват с полиномиална регресия
Погледнете отново връзката между дата и цена. Изглежда ли този график, че трябва непременно да бъде анализиран с права линия? Не могат ли цените да се колебаят? В този случай можете да опитате полиномиална регресия.
Погледнете отново връзката между Дата и Цена. Изглежда ли този точков график като че трябва непременно да бъде анализиран със права линия? Не могат ли цените да се колебаят? В този случай можете да опитате полиномиална регресия.
✅ Полиномите са математически изрази, които могат да съдържат една или повече променливи и коефициенти.
✅ Полиномите са математически изрази, които могат да съдържат една или повече променливи и коефициенти
Полиномиалната регресия създава извита линия, за да пасне по-добре на нелинейните данни. В нашия случай, ако включим във входните данни квадратичната променлива `DayOfYear`, би трябвало да можем да напаснем данните с параболична крива, която ще има минимум в определена точка през годината.
Полиномиалната регресия създава извита линия, за да пасне по-добре на нелинейните данни. В нашия случай, ако включим квадратната променлива `DayOfYear` в входните данни, трябва да можем да паснем данните си с параболична крива, която ще има минимум в определен момент през годината.
Scikit-learn включва полезен [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) за комбиниране на различни стъпки от обработката на данни. **Pipeline** е верига от **оценители (estimators)**. В нашия случай ще създадем pipeline, който първо добавя полиномиални характеристики към модела, и след това тренира регресия:
Scikit-learn включва полезен [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) за комбиниране на различни стъпки от обработката на данни заедно. **Pipeline** e верига от **оценители**. В нашия случай ще създадем pipeline, който първо добавя полиномиални признаци към модела, след което обучава регресията:
```python
from sklearn.preprocessing import PolynomialFeatures
@ -256,36 +257,58 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
```
Използването на `PolynomialFeatures(2)` означава, че ще включим всички полиноми от втори ред от входните данни. В нашия случай това ще означава само `DayOfYear`<sup>2</sup>, но при наличието на две входни променливи X и Y, това ще добави X<sup>2</sup>, XY и Y<sup>2</sup>. Можем да използваме и полиноми с по-висока степен ако искаме.
Използването на `PolynomialFeatures(2)` означава, че ще включим всички полиноми с втора степен от входните данни. В нашия случай това просто ще означава `DayOfYear`<sup>2</sup>, но при две входни променливи X и Y, това ще добави X<sup>2</sup>, XY и Y<sup>2</sup>. Може също да използваме полиноми с по-висока степен, ако искаме.
Pipeline-ите могат да се използват по същия начин като оригиналния обект `LinearRegression`, т.е. можем да направим `fit` на pipeline-а, и след това да използваме `predict`, за да получим резултатите от предсказването. Ето графика, показваща тестовите данни и крива на апроксимация:
Pipeline-ите могат да се използват по същия начин като оригиналния обект `LinearRegression`, т.е. можем да `fit`-нем pipeline, и след това да използваме `predict` за получаване на резултати от прогнозата:
```python
pred = pipeline.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
За да начертаем гладката аппроксимационна крива, използваме `np.linspace` за създаване на равномерно разпределен диапазон от входни стойности, вместо да начертаваме директно върху неупорядочените тестови данни (което би създало зигзагообразна линия):
```python
X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)
y_range = pipeline.predict(X_range)
plt.scatter(X_test, y_test)
plt.plot(X_range, y_range)
```
Ето графика, показваща тестовите данни и аппроксимационната крива:
<img alt="Polynomial regression" src="../../../../translated_images/bg/poly-results.ee587348f0f1f60b.webp" width="50%" />
С помощта на полиномиална регресия можем да получим леко по-ниска средна квадратична грешка и по-висок коефициент на детерминация, но незначително. Трябва да вземем предвид и други характеристики!
С помощта на полиномиалната регресия можем да получим малко по-ниска RMSE и по-висок коефициент на детерминация, но незначително. Трябва да вземем предвид и други характеристики!
> Можете да видите, че минималните цени на тиквите се наблюдават някъде около Хелоуин. Как бихте го обяснили?
> Можете да видите, че минималните цени на тиквите са наблюдавани около Хелоуин. Как бихте обяснили това?
🎃 Поздравления, току-що създадохте модел, който може да помага за предсказване на цената на тикви за пай. Вероятно можете да повторите същата процедура за всички видове тикви, но това би било досадно. Нека сега научим как да вземем предвид сорта тикви в нашия модел!
🎃 Поздравления, току-що създадохте модел, който може да помогне за прогнозиране на цената на тикви за пай. Вероятно можете да повторите същата процедура и за всички типове тикви, но това би било досадно. Нека сега научим как да вземем разнообразието на тиквите предвид в нашия модел!
## Категориални характеристики
## Категориални признаци
В идеалния свят искаме да можем да предсказваме цените за различни сортове тикви, използвайки същия модел. Въпреки това, колоната `Variety` е различна от колони като `Month`, защото съдържа ненумерични стойности. Такива колони се наричат **категориални**.
В идеалния свят искаме да можем да прогнозираме цените за различни разновидности тикви, използвайки един и същ модел. Въпреки това, колоната `Variety` е някак различна от колони като `Month`, защото съдържа ненумерични стойности. Такива колони се наричат **категориални**.
[![ML за начинаещи - Предсказване с категориални характеристики с линейна регресия](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML за начинаещи - Предсказване с категориални характеристики с линейна регресия")
[![ML за начинаещи - Прогнози с категориални признаци и линейна регресия](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML за начинаещи - Прогнози с категориални признаци и линейна регресия")
> 🎥 Кликнете върху изображението по-горе за кратък видео преглед на използването на категориални характеристики.
> 🎥 Кликнете върху изображението по-горе за кратко видео представяне на използването на категориални признаци.
Тук можете да видите как средната цена зависи от сорта:
Тук можете да видите как средната цена зависи от разновидността:
<img alt="Average price by variety" src="../../../../translated_images/bg/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
<img alt="Средна цена по разновидност" src="../../../../translated_images/bg/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
За да вземем предвид сорта, първо трябва да го преобразуваме в числова форма, или да го **кодираме**. Има няколко начина да го направим:
За да вземем разновидността предвид, първо трябва да я конвертираме в числова форма, или да я **кодираме**. Има няколко начина да го направим:
* Простото **числово кодиране** ще изгради таблица на различни сортове, и ще замени името на сорта с индекс в тази таблица. Това не е най-добрата идея за линейна регресия, защото линейната регресия взема действителната числова стойност на индекса и я добавя към резултата, умножавайки по някакъв коефициент. В нашия случай връзката между номера на индекса и цената е явно нелинейна, дори ако направим така, че индексите да са подредени по някакъв конкретен начин.
* **One-hot кодиране** ще замени колоната `Variety` с 4 различни колони, по една за всеки сорт. Всяка колона ще съдържа `1`, ако съответният ред е от дадения сорт, и `0` в противен случай. Това означава, че в линейната регресия ще има четири коефициента, един за всеки сорт тикви, отговорни за „началната цена“ (по-скоро „допълнителна цена“) за този сорт.
* Простата **числова кодировка** ще създаде таблица с различните разновидности, след което ще замени името на разновидността с индекс в тази таблица. Това не е най-добрата идея за линейна регресия, тъй като линейната регресия взема реалната числова стойност на индекса и я добавя към резултата, умножена по някакъв коефициент. В нашия случай връзката между номера на индекса и цената е ясно нелинейна, дори и да сме сигурни, че индексите са подредени по някакъв конкретен начин.
* **One-hot кодиране** ще замени колоната `Variety` с 4 различни колони, една за всяка разновидност. Всяка колона ще съдържа `1`, ако съответният ред е от дадена разновидност, и `0` в противен случай. Това означава, че в линейната регресия ще има четири коефициента, един за всяка разновидност тикви, отговорни за "начална цена" (или по-точно "допълнителна цена") за тази разновидност.
Долният код показва как можем да приложим one-hot кодиране на сорта:
Кодът по-долу показва как можем да направим one-hot кодирането на разновидността:
```python
pd.get_dummies(new_pumpkins['Variety'])
@ -302,14 +325,14 @@ pd.get_dummies(new_pumpkins['Variety'])
1741 | 0 | 1 | 0 | 0
1742 | 0 | 1 | 0 | 0
За да обучим линейна регресия, използвайки one-hot кодирания сорт като вход, просто трябва да инициализираме правилно данните `X` и `y`:
За да обучим линейна регресия, използвайки one-hot кодирана разновидност като вход, просто трябва да инициализираме правилно данните `X` и `y`:
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
Останалата част от кода е същата като тази, която използвахме по-горе за трениране на линейна регресия. Ако го изпробвате, ще видите, че средната квадратна грешка е приблизително същата, но получаваме много по-висок коефициент на детерминация (~77%). За да получим още по-точни предсказания, можем да вземем предвид повече категориални характеристики, както и числови признаци като `Month` или `DayOfYear`. За да получим един голям масив характеристики, можем да използваме `join`:
Останалата част от кода е същата, която използвахме по-горе за обучение на линейна регресия. Ако опитате, ще видите, че средноквадратичната грешка е приблизително същата, но получаваме много по-висок коефициент на детерминация (~77%). За да получите още по-точни прогнози, можете да вземете предвид повече категориални признаци, както и числови признаци, като `Month` или `DayOfYear`. За да получите един масив с всички признаци, можете да използвате `join`:
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
@ -319,68 +342,68 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
y = new_pumpkins['Price']
```
Тук също вземаме предвид `City` и типа `Package`, което ни дава MSE 2.84 (10%) и коефициент на детерминация 0.94!
Тук също вземаме предвид `City` и типа `Package`, което ни дава RMSE 2.84 (10.5%) и коефициент на детерминация 0.94!
## Обобщаване
## Всичко заедно
За да направим най-добрия модел, можем да използваме комбинирани (one-hot кодирани категориални + числови) данни от горния пример заедно с полиномиална регресия. Ето пълния код за ваше удобство:
За да направим най-добрия модел, можем да използваме комбинирани (one-hot кодирани категориални + числови) данни от горния пример заедно с полиномиалната регресия. Ето пълния код за ваше удобство:
```python
# подготвяне на тренировъчните данни
# настройка на тренировъчните данни
X = pd.get_dummies(new_pumpkins['Variety']) \
.join(new_pumpkins['Month']) \
.join(pd.get_dummies(new_pumpkins['City'])) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
# направи разделяне на обучение и тест
# направи разделяне на тренировъчни и тестови данни
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# настрой и тренирай потока
# настрой и обучи конвейера
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
# предвиди резултатите за тестовите данни
# предскажи резултатите за тестовите данни
pred = pipeline.predict(X_test)
# изчисли MSE и коефициент на детерминация
mse = np.sqrt(mean_squared_error(y_test,pred))
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
# изчисли RMSE и коефициент на детерминация
rmse = mean_squared_error(y_test, pred, squared=False)
print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
Това трябва да ни даде най-добрия коефициент на детерминация от почти 97% и MSE=2.23 (~8% грешка при предсказване).
Това би трябвало да ни даде най-добрия коефициент на детерминация от почти 97% и RMSE=2.23 (~8% грешка в прогнозата).
| Модел | MSE | Коефициент на детерминация |
| Модел | RMSE | Коефициент на детерминация |
|-------|-----|----------------------------|
| Линейна регресия със `DayOfYear` | 2.77 (17.2%) | 0.07 |
| Полиномиална регресия със `DayOfYear` | 2.73 (17.0%) | 0.08 |
| Линейна регресия с `Variety` | 5.24 (19.7%) | 0.77 |
| Линейна регресия с всички характеристики | 2.84 (10.5%) | 0.94 |
| Полиномиална регресия с всички характеристики | 2.23 (8.25%) | 0.97 |
| `DayOfYear` Линеен | 2.77 (17.2%) | 0.07 |
| `DayOfYear` Полиномиален | 2.73 (17.0%) | 0.08 |
| `Variety` Линеен | 5.24 (19.7%) | 0.77 |
| Всички признаци Линеен | 2.84 (10.5%) | 0.94 |
| Всички признаци Полиномиален | 2.23 (8.25%) | 0.97 |
🏆 Отлична работа! Създадохте четири регресионни модела в един урок и подобрихте качеството на модела до 97%. В последната част за регресия ще научите за логистичната регресия за определяне на категории.
🏆 Отлична работа! Създадохте четири регресионни модела в един урок и подобрихте качеството на модела до 97%. В последната част за регресия ще научите за логистична регресия за определяне на категории.
---
## 🚀Предизвикателство
Тествайте няколко различни променливи в тази тетрадка, за да видите как корелацията съответства на точността на модела.
Тествайте няколко различни променливи в този бележник, за да видите как корелацията съответства на точността на модела.
## [Викторина след лекцията](https://ff-quizzes.netlify.app/en/ml/)
## [Кратък тест след лекцията](https://ff-quizzes.netlify.app/en/ml/)
## Преглед и самообучение
## Преглед и самостоятелно обучение
В този урок научихме за линейната регресия. Има и други важни видове регресия. Прочетете за техническите подходи Stepwise, Ridge, Lasso и Elasticnet. Добър курс за по-задълбочено изучаване е [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
В този урок научихме за линейната регресия. Има и други важни видове регресия. Прочетете за техниките Stepwise, Ridge, Lasso и Elasticnet. Добър курс за изучаване е [Statistical Learning курс на Stanford](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
## Задача
## Задание
[Изградете модел](assignment.md)
[Създаване на модел](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Отказ от отговорност**:
Този документ е преведен с помощта на AI преводаческа услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за никакви недоразумения или погрешни тълкувания, произтичащи от използването на този превод.
Този документ е преведен с помощта на автоматична услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, имайте предвид, че автоматичните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -6,12 +6,12 @@
"source": [
"## Линейна и полиномиална регресия за ценообразуване на тикви - Урок 3\n",
"\n",
"Заредете необходимите библиотеки и набор от данни. Преобразувайте данните в датафрейм, съдържащ подмножество от данните:\n",
"Заредете необходимите библиотеки и набора от данни. Преобразувайте данните във dataframe, съдържащ подмножество от данните:\n",
"\n",
"- Включете само тикви, оценени на цена за бушел\n",
"- Вземете само тиквите, ценени на бушел\n",
"- Преобразувайте датата в месец\n",
"- Изчислете цената като средна стойност между високата и ниската цена\n",
"- Преобразувайте цената, за да отразява ценообразуването според количеството в бушели\n"
"- Изчислете цената като средна стойност между най-високата и най-ниската цена\n",
"- Преобразувайте цената, за да отразява ценообразуването спрямо количеството бушели\n"
]
},
{
@ -377,7 +377,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Диаграмата с разсейване ни напомня, че разполагаме с данни само за месеците от август до декември. Вероятно ни трябват повече данни, за да можем да правим изводи по линеен начин.\n"
"Диаграмата с точки ни напомня, че разполагаме само с месечни данни от август до декември. Вероятно имаме нужда от повече данни, за да можем да правим изводи по линеен начин.\n"
]
},
{
@ -447,7 +447,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"Нека видим дали има корелация:\n"
]
},
{
"cell_type": "code",
@ -472,7 +474,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Изглежда, че корелацията е доста малка, но има някаква друга по-важна връзка - защото ценовите точки в горния график изглежда формират няколко отделни клъстера. Нека направим графика, която ще покаже различните сортове тикви:\n"
"Изглежда, че корелацията е доста малка, но има някаква друга по-важна връзка - защото ценовите точки на графиката по-горе изглежда имат няколко отделни клъстера. Нека направим графика, която ще покаже различните сортове тикви:\n"
]
},
{
@ -535,7 +537,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"За момента, нека се съсредоточим само върху един вид - **тип пай**.\n"
]
},
{
"cell_type": "code",
@ -584,7 +588,7 @@
"source": [
"### Линейна регресия\n",
"\n",
"Ще използваме Scikit Learn, за да обучим модел за линейна регресия:\n"
"Ще използваме Scikit Learn за обучение на модел на линейна регресия:\n"
]
},
{
@ -662,7 +666,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Наклонът на правата може да бъде определен от коефициентите на линейната регресия:\n"
"Наклонът на правата може да се определи от коефициентите на линейната регресия:\n"
]
},
{
@ -689,7 +693,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Можем да използваме обучената модел за прогнозиране на цената:\n"
"Можем да използваме обучен модел, за да предскажем цената:\n"
]
},
{
@ -720,9 +724,9 @@
"source": [
"### Полиномиална регресия\n",
"\n",
"Понякога връзката между характеристиките и резултатите е по природа нелинейна. Например, цените на тиквите може да са високи през зимата (месеци=1,2), след това да спаднат през лятото (месеци=5-7) и после отново да се повишат. Линейната регресия не може да улови тази връзка точно.\n",
"Понякога връзката между признаците и резултатите е по своята същност нелинейна. Например, цените на тиквите може да са високи през зимата (месеци=1,2), след което да спаднат през лятото (месеци=5-7), а после отново да се повишат. Линейната регресия не може да улови тази връзка точно.\n",
"\n",
"В този случай можем да обмислим добавянето на допълнителни характеристики. Един прост начин е да използваме полиноми от входните характеристики, което води до **полиномиална регресия**. В Scikit Learn можем автоматично да изчислим предварително полиномиалните характеристики, използвайки pipelines:\n"
"В този случай можем да обмислим добавяне на допълнителни признаци. Прост начин е да използваме полиноми от входните признаци, което води до **полиномиална регресия**. В Scikit Learn можем автоматично да изчислим полиномиални признаци с помощта на pipeline:\n"
]
},
{
@ -777,22 +781,25 @@
"score = pipeline.score(X_train,y_train)\n",
"print('Model determination: ', score)\n",
"\n",
"plt.scatter(X_test,y_test)\n",
"plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))"
"X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n",
"y_range = pipeline.predict(X_range)\n",
"\n",
"plt.scatter(X_test, y_test)\n",
"plt.plot(X_range, y_range)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Кодиране на сортове\n",
"### Варианти на кодиране\n",
"\n",
"В идеалния случай искаме да можем да прогнозираме цените за различни сортове тикви, използвайки един и същ модел. За да вземем предвид сорта, първо трябва да го преобразуваме в числова форма, или **да го кодираме**. Има няколко начина да направим това:\n",
"В идеалния свят искаме да можем да предсказваме цени за различни сортове тиква, използвайки един и същ модел. За да вземем предвид сорта, първо трябва да го конвертираме в числова форма или да го **кодираме**. Има няколко начина, по които можем да го направим:\n",
"\n",
"* Просто числово кодиране, което ще изгради таблица с различните сортове и след това ще замени името на сорта с индекс от тази таблица. Това не е най-добрата идея за линейна регресия, защото линейната регресия взема предвид числовата стойност на индекса, а числовата стойност вероятно няма да корелира числово с цената.\n",
"* One-hot кодиране, което ще замени колоната `Variety` с 4 различни колони, по една за всеки сорт, които ще съдържат 1, ако съответният ред е от дадения сорт, и 0 в противен случай.\n",
"* Просто цифрово кодиране, което ще създаде таблица с различни сортове и след това ще замени името на сорта с индекс в тази таблица. Това не е най-добрата идея за линейна регресия, защото линейната регресия взема предвид числовата стойност на индекса, а числовата стойност най-вероятно няма да корелира числово с цената.\n",
"* Кодирането с едно-горещо (one-hot encoding), което ще замени колоната `Variety` с 4 различни колони, една за всеки сорт, които ще съдържат 1, ако съответният ред е от дадения сорт, и 0 в противен случай.\n",
"\n",
"Кодът по-долу показва как можем да направим one-hot кодиране на сорт:\n"
"Кодът по-долу показва как можем да кодираме сорт с one-hot encoding:\n"
]
},
{
@ -940,9 +947,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### Линейна регресия върху сортове\n",
"### Линеен регресионен анализ на сорта\n",
"\n",
"Сега ще използваме същия код като по-горе, но вместо `DayOfYear`, ще използваме нашия one-hot-кодиран сорт като вход:\n"
"Сега ще използваме същия код като по-горе, но вместо `DayOfYear` ще използваме нашия едноразрядно кодираният сорт като вход:\n"
]
},
{
@ -990,7 +997,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Можем също така да опитаме да използваме други характеристики по същия начин и да ги комбинираме с числови характеристики, като `Month` или `DayOfYear`:\n"
"Можем също да опитаме да използваме други характеристики по същия начин и да ги комбинираме с числови характеристики, като `Month` или `DayOfYear`:\n"
]
},
{
@ -1023,7 +1030,7 @@
"source": [
"### Полиномиална регресия\n",
"\n",
"Полиномиалната регресия може също да се използва с категорийни характеристики, които са кодирани с one-hot енкодиране. Кодът за обучение на полиномиална регресия би бил по същество същият, както видяхме по-горе.\n"
"Полиномиалната регресия може да се използва и с категориални признаци, които са едно-горещо кодирани. Кодът за обучение на полиномиална регресия ще бъде същият, както видяхме по-горе.\n"
]
},
{
@ -1070,7 +1077,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Отказ от отговорност**: \nТози документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод.\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Отказ от отговорност**: \nТози документ е преведен с помощта на AI преводаческа услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматичните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за никакви недоразумения или неправилни тълкувания, произтичащи от използването на този превод.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -1100,13 +1107,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "d77bd89ae7e79780c68c58bab91f13f8",
"translation_date": "2025-09-04T06:18:34+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "bg"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

@ -36,8 +36,8 @@
"language_code": "ro"
},
"1-Introduction/4-techniques-of-ML/README.md": {
"original_hash": "9d91f3af3758fdd4569fb410575995ef",
"translation_date": "2025-09-05T16:04:52+00:00",
"original_hash": "84b1715a6be62ef1697351dcc5d7b567",
"translation_date": "2026-04-26T19:10:23+00:00",
"source_file": "1-Introduction/4-techniques-of-ML/README.md",
"language_code": "ro"
},
@ -90,8 +90,8 @@
"language_code": "ro"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "26c53a922f1f1e8542b0ea41ff52221a",
"translation_date": "2026-04-20T20:36:50+00:00",
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T19:09:51+00:00",
"source_file": "2-Regression/3-Linear/README.md",
"language_code": "ro"
},
@ -107,6 +107,12 @@
"source_file": "2-Regression/3-Linear/solution/Julia/README.md",
"language_code": "ro"
},
"2-Regression/3-Linear/solution/notebook.ipynb": {
"original_hash": "6781223ffbe8cfdaa38d0200f08e1288",
"translation_date": "2026-04-26T19:06:51+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "ro"
},
"2-Regression/4-Logistic/README.md": {
"original_hash": "abf86d845c84330bce205a46b382ec88",
"translation_date": "2025-09-05T15:18:34+00:00",

@ -1,123 +1,125 @@
# Tehnici de Învățare Automată
Procesul de construire, utilizare și întreținere a modelelor de învățare automată și a datelor pe care acestea le folosesc este foarte diferit de multe alte fluxuri de lucru din dezvoltare. În această lecție, vom demistifica procesul și vom evidenția principalele tehnici pe care trebuie să le cunoaști. Veți:
Procesul de construire, utilizare și întreținere a modelelor de învățare automată și a datelor pe care le folosesc este un proces foarte diferit față de multe alte fluxuri de lucru de dezvoltare. În această lecție, vom demistifica procesul și vom contura principalele tehnici pe care trebuie să le cunoști. Vei:
- Înțelege procesele care stau la baza învățării automate la un nivel general.
- Înțelege procesele fundamentale ale învățării automate la un nivel înalt.
- Explora concepte de bază precum „modele”, „predicții” și „date de antrenament”.
## [Chestionar înainte de lecție](https://ff-quizzes.netlify.app/en/ml/)
## [Test pre-lectură](https://ff-quizzes.netlify.app/en/ml/)
[![ML pentru începători - Tehnici de Învățare Automată](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML pentru începători - Tehnici de Învățare Automată")
[![ML for beginners - Techniques of Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning")
> 🎥 Faceți clic pe imaginea de mai sus pentru un scurt videoclip despre această lecție.
> 🎥 Click pe imaginea de mai sus pentru un scurt video care parcurge această lecție.
## Introducere
La un nivel general, arta de a crea procese de învățare automată (ML) constă dintr-o serie de pași:
La un nivel înalt, arta creării proceselor de învățare automată (ML) este alcătuită din mai mulți pași:
1. **Decideți întrebarea**. Majoritatea proceselor ML încep prin a pune o întrebare care nu poate fi răspunsă printr-un program condițional simplu sau un motor bazat pe reguli. Aceste întrebări se concentrează adesea pe predicții bazate pe o colecție de date.
2. **Colectați și pregătiți datele**. Pentru a putea răspunde la întrebare, aveți nevoie de date. Calitatea și, uneori, cantitatea datelor vor determina cât de bine puteți răspunde la întrebarea inițială. Vizualizarea datelor este un aspect important al acestei etape. Această etapă include și împărțirea datelor în grupuri de antrenament și testare pentru a construi un model.
3. **Alegeți o metodă de antrenament**. În funcție de întrebare și de natura datelor, trebuie să alegeți cum doriți să antrenați un model pentru a reflecta cel mai bine datele și pentru a face predicții precise.
4. **Antrenați modelul**. Folosind datele de antrenament, veți utiliza diferiți algoritmi pentru a antrena un model să recunoască tipare în date. Modelul poate utiliza ponderi interne care pot fi ajustate pentru a privilegia anumite părți ale datelor în detrimentul altora, pentru a construi un model mai bun.
5. **Evaluați modelul**. Utilizați date pe care modelul nu le-a mai văzut (datele de testare) din setul colectat pentru a vedea cum se comportă modelul.
6. **Ajustarea parametrilor**. Pe baza performanței modelului, puteți relua procesul folosind parametri sau variabile diferite care controlează comportamentul algoritmilor utilizați pentru antrenarea modelului.
7. **Predicție**. Utilizați noi intrări pentru a testa acuratețea modelului.
1. **Decide asupra întrebării**. Majoritatea proceselor ML încep prin a pune o întrebare care nu poate fi răspunsă printr-un program condițional simplu sau printr-un motor bazat pe reguli. Aceste întrebări se referă adesea la predicții bazate pe o colecție de date.
2. **Colectează și pregătește datele**. Pentru a putea răspunde la întrebarea ta, ai nevoie de date. Calitatea și, uneori, cantitatea datelor tale vor determina cât de bine poți răspunde la întrebarea inițială. Vizualizarea datelor este o componentă importantă a acestei faze. Această fază include și împărțirea datelor în grupuri de antrenament și test pentru a construi un model.
3. **Alege o metodă de antrenament**. În funcție de întrebarea ta și de natura datelor, trebuie să alegi cum dorești să antrenezi un model pentru a reflecta cel mai bine datele și pentru a face predicții exacte pe baza acestora. Aceasta este partea procesului tău ML care necesită expertiză specifică și, adesea, o cantitate considerabilă de experimentare.
4. **Antrenează modelul**. Folosind datele de antrenament, vei utiliza diferiți algoritmi pentru a antrena un model să recunoască tipare în date. Modelul poate folosi greutăți interne ajustabile pentru a privilegia anumite părți ale datelor în detrimentul altora pentru a construi un model mai bun.
5. **Evaluează modelul**. Folosești date noi, nevăzute anterior (datele de testare) din setul tău colectat pentru a vedea cum performează modelul.
6. **Ajustarea parametrilor**. Pe baza performanței modelului, poți reface procesul folosind parametri diferiți, sau variabile, care controlează comportamentul algoritmilor folosiți pentru antrenarea modelului.
7. **Fă predicții**. Folosește noi intrări pentru a testa acuratețea modelului tău.
## Ce întrebare să puneți
## Ce întrebări să pui
Calculatoarele sunt deosebit de abile în descoperirea tiparelor ascunse în date. Această utilitate este foarte utilă pentru cercetătorii care au întrebări despre un anumit domeniu și care nu pot fi ușor răspunse prin crearea unui motor bazat pe reguli condiționale. De exemplu, într-o sarcină actuarială, un specialist în date ar putea construi reguli manuale despre mortalitatea fumătorilor vs. nefumătorilor.
Calculatoarele sunt deosebit de pricepute la descoperirea tiparelor ascunse în date. Această utilitate este foarte folositoare pentru cercetătorii care au întrebări legate de un anumit domeniu și care nu pot fi ușor răspunse prin crearea unui motor bazat pe reguli condiționale. De exemplu, pentru o sarcină actuarială, un data scientist ar putea construi reguli manuale privind mortalitatea fumătorilor față de nefumători.
Când sunt introduse multe alte variabile în ecuație, un model ML ar putea fi mai eficient în a prezice ratele viitoare de mortalitate pe baza istoricului de sănătate din trecut. Un exemplu mai vesel ar putea fi realizarea de predicții meteorologice pentru luna aprilie într-o anumită locație, pe baza unor date precum latitudinea, longitudinea, schimbările climatice, proximitatea față de ocean, tiparele curenților de aer și altele.
Totuși, când multe alte variabile sunt incluse în ecuație, un model ML poate fi mai eficient pentru a prezice ratele viitoare de mortalitate bazate pe istoricul medical anterior. Un exemplu mai optimist ar fi realizarea predicțiilor meteo pentru luna aprilie într-o anumită locație în baza datelor care includ latitudinea, longitudinea, schimbările climatice, proximitatea față de ocean, modelele fluxului jet și altele.
✅ Acest [set de diapozitive](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) despre modelele meteorologice oferă o perspectivă istorică asupra utilizării ML în analiza vremii.
✅ Acest [set de slide-uri](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) despre modele meteorologice oferă o perspectivă istorică asupra folosirii ML în analiza meteo.
## Sarcini înainte de construire
## Sarcini pre-construire
Înainte de a începe să construiți modelul, există mai multe sarcini pe care trebuie să le finalizați. Pentru a testa întrebarea și a forma o ipoteză bazată pe predicțiile unui model, trebuie să identificați și să configurați mai mulți factori.
Înainte de a începe să construiești modelul, există mai multe sarcini pe care trebuie să le finalizezi. Pentru a testa întrebarea și a formula o ipoteză bazată pe predicțiile unui model, trebuie să identifici și să configurezi mai multe elemente.
### Date
Pentru a putea răspunde la întrebare cu un anumit grad de certitudine, aveți nevoie de o cantitate suficientă de date de tipul potrivit. Există două lucruri pe care trebuie să le faceți în acest moment:
Pentru a răspunde întrebării tale cu orice fel de certitudine, ai nevoie de o cantitate bună de date potrivite. Sunt două lucruri de făcut în acest moment:
- **Colectați date**. Ținând cont de lecția anterioară despre echitatea în analiza datelor, colectați datele cu atenție. Fiți conștienți de sursele acestor date, de eventualele prejudecăți inerente și documentați originea lor.
- **Pregătiți datele**. Există mai mulți pași în procesul de pregătire a datelor. Este posibil să fie nevoie să adunați datele și să le normalizați dacă provin din surse diverse. Puteți îmbunătăți calitatea și cantitatea datelor prin diverse metode, cum ar fi conversia șirurilor de caractere în numere (așa cum facem în [Clustering](../../5-Clustering/1-Visualize/README.md)). De asemenea, puteți genera date noi, bazate pe cele originale (așa cum facem în [Classification](../../4-Classification/1-Introduction/README.md)). Puteți curăța și edita datele (așa cum vom face înainte de lecția despre [Aplicații Web](../../3-Web-App/README.md)). În cele din urmă, este posibil să fie nevoie să le randomizați și să le amestecați, în funcție de tehnicile de antrenament.
- **Colectează date**. Ținând cont de lecția anterioară despre corectitudinea în analiza datelor, colectează datele cu grijă. Fii conștient de sursele acestor date, de orice părtinire inerentă și documentează originea acestora.
- **Pregătește datele**. Există mai mulți pași în procesul de pregătire a datelor. Este posibil să fie nevoie să le unești și să le normalizezi dacă provin din surse diverse. Poți îmbunătăți calitatea și cantitatea datelor prin diferite metode, cum ar fi convertirea șirurilor de caractere în numere (așa cum facem în [Clustering](../../5-Clustering/1-Visualize/README.md)). Poți genera date noi, bazate pe cele originale (așa cum facem în [Classification](../../4-Classification/1-Introduction/README.md)). Poți curăța și edita datele (așa cum vom face înainte de lecția [Web App](../../3-Web-App/README.md)). În final, poate fi necesar să le randomizezi și să le amesteci, în funcție de tehnicile de antrenament folosite.
✅ După ce ați colectat și procesat datele, luați un moment pentru a verifica dacă forma lor vă va permite să abordați întrebarea propusă. Este posibil ca datele să nu funcționeze bine pentru sarcina dată, așa cum descoperim în lecțiile noastre despre [Clustering](../../5-Clustering/1-Visualize/README.md)!
✅ După colectarea și procesarea datelor, ia un moment să vezi dacă forma acestora îți va permite să adresezi întrebarea dorită. Este posibil ca datele să nu performeze bine în sarcina ta, așa cum descoperim în lecțiile de [Clustering](../../5-Clustering/1-Visualize/README.md)!
### Caracteristici și Țintă
### Caracteristici și țintă
O [caracteristică](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) este o proprietate măsurabilă a datelor. În multe seturi de date, aceasta este exprimată ca un antet de coloană, cum ar fi „dată”, „dimensiune” sau „culoare”. Variabila caracteristică, de obicei reprezentată ca `X` în cod, reprezintă variabila de intrare care va fi utilizată pentru a antrena modelul.
O [caracteristică](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) este o proprietate măsurabilă a datelor tale. În multe seturi de date, este exprimată prin intermediul unui titlu de coloană precum „data”, „dimensiune” sau „culoare”. Variabila ta caracteristică, de obicei reprezentată ca `X` în cod, reprezintă variabila de intrare ce va fi folosită pentru antrenarea modelului.
Ținta este ceea ce încercați să preziceți. Ținta, de obicei reprezentată ca `y` în cod, reprezintă răspunsul la întrebarea pe care încercați să o puneți datelor: în decembrie, ce **culoare** vor avea dovlecii cei mai ieftini? În San Francisco, ce cartiere vor avea cel mai bun **preț** imobiliar? Uneori, ținta este denumită și atribut etichetă.
O țintă este ceva ce încerci să prezici. Ținta, de obicei reprezentată ca `y` în cod, reprezintă răspunsul la întrebarea pe care încerci să o adresezi datelor tale: în decembrie, ce culoare vor avea dovlecii cei mai ieftini? în San Francisco, care cartiere vor avea cel mai bun preț imobiliar? Ocazional ținta este denumită și atribut etichetă.
### Selectarea variabilei caracteristice
🎓 **Selecția și Extracția Caracteristicilor** Cum știți ce variabilă să alegeți atunci când construiți un model? Probabil veți trece printr-un proces de selecție sau extracție a caracteristicilor pentru a alege variabilele potrivite pentru cel mai performant model. Totuși, acestea nu sunt același lucru: „Extracția caracteristicilor creează noi caracteristici din funcții ale caracteristicilor originale, în timp ce selecția caracteristicilor returnează un subset al caracteristicilor.” ([sursa](https://wikipedia.org/wiki/Feature_selection))
🎓 **Selecția și extracția caracteristicilor** Cum știi ce variabilă să alegi când construiești un model? Probabil vei trece printr-un proces de selecție sau extracție a caracteristicilor pentru a alege variabilele potrivite pentru cel mai performant model. Totuși, acestea nu sunt același lucru: „Extracția caracteristicilor creează caracteristici noi bazate pe funcții ale caracteristicilor originale, în timp ce selecția caracteristicilor returnează un subset al caracteristicilor.” ([sursă](https://wikipedia.org/wiki/Feature_selection))
### Vizualizați datele
### Vizualizează-ți datele
Un aspect important al trusei de instrumente a unui specialist în date este puterea de a vizualiza datele folosind mai multe biblioteci excelente, cum ar fi Seaborn sau MatPlotLib. Reprezentarea vizuală a datelor vă poate permite să descoperiți corelații ascunse pe care le puteți valorifica. Vizualizările dvs. vă pot ajuta, de asemenea, să descoperiți prejudecăți sau date dezechilibrate (așa cum descoperim în [Classification](../../4-Classification/2-Classifiers-1/README.md)).
O componentă importantă în trusa unui data scientist este puterea de a vizualiza datele folosind mai multe biblioteci excelente precum Seaborn sau MatPlotLib. Reprezentarea datelor vizual te poate ajuta să descoperi corelații ascunse pe care le poți folosi. Vizualizările ar putea de asemenea să te ajute să descoperi părtinire sau date dezechilibrate (așa cum descoperim în [Classification](../../4-Classification/2-Classifiers-1/README.md)).
### Împărțiți setul de date
### Împarte setul tău de date
Înainte de antrenament, trebuie să împărțiți setul de date în două sau mai multe părți de dimensiuni inegale care să reprezinte totuși bine datele.
Înainte de antrenare, trebuie să împarți setul de date în două sau mai multe părți de mărimi inegale care să reprezinte în continuare bine datele.
- **Antrenament**. Această parte a setului de date este utilizată pentru a antrena modelul. Acest set constituie majoritatea setului de date original.
- **Testare**. Un set de testare este un grup independent de date, adesea extras din datele originale, pe care îl utilizați pentru a confirma performanța modelului construit.
- **Validare**. Un set de validare este un grup mai mic de exemple independente pe care îl utilizați pentru a ajusta hiperparametrii sau arhitectura modelului, pentru a-l îmbunătăți. În funcție de dimensiunea datelor și de întrebarea pe care o puneți, este posibil să nu fie nevoie să construiți acest al treilea set (așa cum notăm în [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md)).
- **Antrenament**. Această parte a setului de date este folosită pentru a antrena modelul. Acest set constituie majoritatea setului de date original.
- **Testare**. Un set de date de test este un grup independent de date, adesea extras din datele inițiale, pe care îl folosești pentru a confirma performanța modelului construit.
- **Validare**. Un set de validare este un grup mai mic independent de exemple folosit pentru a ajusta hiperparametrii sau arhitectura modelului pentru a-l îmbunătăți. În funcție de mărimea datelor tale și întrebarea pe care o adresezi, s-ar putea să nu fie necesar să construiești acest al treilea set (așa cum notăm în [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md)).
## Construirea unui model
Folosind datele de antrenament, scopul dvs. este să construiți un model, sau o reprezentare statistică a datelor, utilizând diferiți algoritmi pentru a-l **antrena**. Antrenarea unui model îl expune la date și îi permite să facă presupuneri despre tiparele percepute pe care le descoperă, validează și acceptă sau respinge.
Folosindu-te de datele de antrenament, scopul tău este să construiești un model, sau o reprezentare statistică a datelor, folosind diferiți algoritmi pentru a-l **antrena**. Antrenarea unui model îl expune la date și îi permite să facă presupuneri despre tiparele percepute pe care le descoperă, validează și acceptă sau respinge.
### Decideți o metodă de antrenament
### Alege o metodă de antrenament
În funcție de întrebare și de natura datelor, veți alege o metodă pentru a le antrena. Explorând [documentația Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - pe care o folosim în acest curs - puteți descoperi multe moduri de a antrena un model. În funcție de experiența dvs., este posibil să trebuiască să încercați mai multe metode diferite pentru a construi cel mai bun model. Este probabil să treceți printr-un proces în care specialiștii în date evaluează performanța unui model, oferindu-i date nevăzute, verificând acuratețea, prejudecățile și alte probleme care degradează calitatea, și selectând metoda de antrenament cea mai potrivită pentru sarcina dată.
În funcție de întrebarea ta și de natura datelor, vei alege o metodă de antrenament. Parcurgând [documentația Scikit-learn](https://scikit-learn.org/stable/user_guide.html) — pe care o folosim în acest curs — poți explora multe metode de a antrena un model. În funcție de experiența ta, este posibil să trebuiască să încerci mai multe metode diferite pentru a construi cel mai bun model. Este probabil să treci printr-un proces în care data scientist-ii evaluează performanța unui model prin alimentarea sa cu date noi, verificând acuratețea, părtinirea și alte probleme care pot degrada calitatea, și aleg metoda de antrenament cea mai potrivită pentru sarcina respectivă.
### Antrenați un model
### Antrenează un model
Cu datele de antrenament pregătite, sunteți gata să le „potriviți” pentru a crea un model. Veți observa că în multe biblioteci ML veți găsi codul „model.fit” - este momentul în care trimiteți variabila caracteristică ca un șir de valori (de obicei „X”) și o variabilă țintă (de obicei „y”).
Înarmat cu datele tale de antrenament, ești gata să-l „potrivești” pentru a crea modelul. Vei observa că în multe biblioteci ML găsești codul „model.fit” este în acest moment când trimiți variabila ta caracteristică ca un șir de valori (de obicei „X”) și o variabilă țintă (de obicei „y”).
### Evaluați modelul
### Evaluează modelul
Odată ce procesul de antrenament este complet (poate dura multe iterații sau „epoci” pentru a antrena un model mare), veți putea evalua calitatea modelului folosind date de testare pentru a-i măsura performanța. Aceste date sunt un subset al datelor originale pe care modelul nu le-a analizat anterior. Puteți imprima un tabel cu metrici despre calitatea modelului.
Odată ce procesul de antrenament s-a încheiat (poate dura multe iterații, sau „epoci”, pentru a antrena un model mare), vei putea evalua calitatea modelului folosind datele de test pentru a-i măsura performanța. Aceste date sunt un subset al datelor originale pe care modelul nu le-a analizat anterior. Poți afișa un tabel de metrici despre calitatea modelului tău.
🎓 **Potrivirea modelului**
În contextul învățării automate, potrivirea modelului se referă la acuratețea funcției de bază a modelului în timp ce încearcă să analizeze date cu care nu este familiarizat.
În contextul învățării automate, potrivirea modelului se referă la acuratețea funcției interne a modelului în timp ce încearcă să analizeze date cu care nu este familiar.
🎓 **Subantrenarea** și **supraantrenarea** sunt probleme comune care degradează calitatea modelului, deoarece modelul se potrivește fie prea puțin, fie prea bine. Acest lucru face ca modelul să facă predicții fie prea strâns aliniate, fie prea slab aliniate cu datele de antrenament. Un model supraantrenat prezice datele de antrenament prea bine, deoarece a învățat prea bine detaliile și zgomotul datelor. Un model subantrenat nu este precis, deoarece nu poate analiza corect nici datele de antrenament, nici datele pe care nu le-a „văzut” încă.
🎓 **Suprapotrivirea** și **subpotrivirea** sunt probleme comune care degradează calitatea modelului, deoarece modelul se potrivește fie insuficient, fie prea mult. Acest lucru determină modelul să facă predicții prea rigide sau prea slabe față de datele de antrenament. Un model suprapotrivit prezice datele de antrenament prea bine pentru că a învățat foarte bine detaliile și zgomotul din date. Un model subpotrivit nu este precis, neputând analiza corect nici datele de antrenament și nici datele nevăzute anterior.
![model supraantrenat](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png)
![overfitting model](../../../../translated_images/ro/overfitting.1c132d92bfd93cb6.webp)
> Infografic de [Jen Looper](https://twitter.com/jenlooper)
## Ajustarea parametrilor
Odată ce antrenamentul inițial este complet, observați calitatea modelului și luați în considerare îmbunătățirea acestuia prin ajustarea „hiperparametrilor”. Citiți mai multe despre proces [în documentație](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
Odată ce antrenamentul inițial s-a încheiat, observă calitatea modelului și ia în considerare îmbunătățirea sa prin ajustarea „hiperparametrilor”. Citește mai multe despre proces [în documentație](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
## Predicție
Acesta este momentul în care puteți utiliza date complet noi pentru a testa acuratețea modelului. Într-un context ML „aplicat”, în care construiți active web pentru a utiliza modelul în producție, acest proces ar putea implica colectarea de intrări de la utilizatori (de exemplu, apăsarea unui buton) pentru a seta o variabilă și a o trimite modelului pentru inferență sau evaluare.
Acesta este momentul în care poți folosi date complet noi pentru a testa acuratețea modelului. Într-un context ML „aplicat”, unde construiești active web pentru a folosi modelul în producție, acest proces poate implica colectarea inputului utilizatorului (de exemplu, apăsarea unui buton) pentru a seta o variabilă și a o trimite modelului pentru inferență sau evaluare.
În aceste lecții, veți descoperi cum să utilizați acești pași pentru a pregăti, construi, testa, evalua și prezice - toate gesturile unui specialist în date și mai mult, pe măsură ce progresați în călătoria dvs. pentru a deveni un inginer ML „full stack”.
În aceste lecții, vei descoperi cum să folosești acești pași pentru a pregăti, construi, testa, evalua și prezice — toate gesturile unui data scientist și mai mult, pe măsură ce avansezi în călătoria ta de a deveni un inginer ML „full stack”.
---
## 🚀Provocare
Desenați un diagramă de flux care reflectă pașii unui practician ML. Unde vă vedeți acum în proces? Unde anticipați că veți întâmpina dificultăți? Ce vi se pare ușor?
Desenează o diagramă de flux care reflectă pașii unui practician ML. Unde te vezi acum în proces? Unde crezi că vei întâmpina dificultăți? Ce ți se pare ușor?
## [Chestionar după lecție](https://ff-quizzes.netlify.app/en/ml/)
## [Test post-lectură](https://ff-quizzes.netlify.app/en/ml/)
## Recapitulare și Studiu Individual
## Recapitulare & Auto-studiu
Căutați online interviuri cu specialiști în date care discută despre munca lor zilnică. Iată [unul](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
Caută online interviuri cu data scientist-i care discută despre munca lor zilnică. Iată [unul](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
## Temă
[Intervievați un specialist în date](assignment.md)
[Intervievează un data scientist](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Declinare de responsabilitate**:
Acest document a fost tradus folosind serviciul de traducere AI [Co-op Translator](https://github.com/Azure/co-op-translator). Deși ne străduim să asigurăm acuratețea, vă rugăm să fiți conștienți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa natală ar trebui considerat sursa autoritară. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm responsabilitatea pentru eventualele neînțelegeri sau interpretări greșite care pot apărea din utilizarea acestei traduceri.
Acest document a fost tradus folosind serviciul de traducere AI [Co-op Translator](https://github.com/Azure/co-op-translator). Deși depunem eforturi pentru acuratețe, vă rugăm să rețineți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa nativă trebuie considerat sursa autorizată. Pentru informații critice, se recomandă traducerea profesională realizată de un traducător uman. Nu ne asumăm răspunderea pentru eventualele neînțelegeri sau interpretări greșite rezultate din utilizarea acestei traduceri.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -2,124 +2,124 @@
## Notă pentru începători
Regresia liniară este folosită atunci când dorim să prezicem o **valoare numerică** (de exemplu, prețul unei case, temperatura sau vânzările).
Funcționează prin găsirea unei linii drepte care reprezintă cel mai bine relația dintre caracteristicile de intrare și ieșire.
Regresia liniară este folosită atunci când vrem să prezicem o **valoare numerică** (de exemplu, prețul unei case, temperatura sau vânzările).
Aceasta funcționează prin găsirea unei drepte care reprezintă cel mai bine relația dintre variabilele de intrare și ieșire.
În această lecție, ne concentrăm pe înțelegerea conceptului înainte de a explora tehnici de regresie mai avansate.
![Linear vs polynomial regression infographic](../../../../translated_images/ro/linear-polynomial.5523c7cb6576ccab.webp)
> Infografic de [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [Test pre-lectură](https://ff-quizzes.netlify.app/en/ml/)
## [Chestionar pre-lectură](https://ff-quizzes.netlify.app/en/ml/)
> ### [Această lecție este disponibilă în R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### Introducere
Până acum ați explorat ce este regresia cu date de probă adunate din setul de date despre prețurile dovlecilor pe care îl vom folosi pe parcursul acestei lecții. De asemenea, ați vizualizat datele folosind Matplotlib.
Până acum ai explorat ce este regresia folosind un set de date despre prețurile dovlecilor pe care îl vom folosi pe parcursul acestei lecții. Ai vizualizat, de asemenea, datele folosind Matplotlib.
Acum sunteți gata să aprofundați regresia pentru învățarea automată (ML). Deși vizualizarea permite să înțelegeți datele, adevărata putere a învățării automate vine din _antrenarea modelelor_. Modelele sunt antrenate pe date istorice pentru a captura automat dependențele din date și vă permit să preziceți rezultate pentru date noi, pe care modelul nu le-a văzut anterior.
Acum ești pregătit să aprofundezi regresia pentru ML. În timp ce vizualizarea te ajută să înțelegi datele, adevărata putere a învățării automate vine din _antrenarea modelelor_. Modelele sunt antrenate pe date istorice pentru a captura automat dependențele din date și îți permit să prezici rezultate pentru date noi, pe care modelul nu le-a văzut înainte.
În această lecție veți învăța mai multe despre două tipuri de regresie: _regresie liniară de bază_ și _regresie polinomială_, împreună cu unele dintre elementele matematice ale acestor tehnici. Aceste modele ne vor permite să prezicem prețurile dovlecilor în funcție de diferite date de intrare.
În această lecție vei învăța mai multe despre două tipuri de regresie: _regresia liniară de bază_ și _regresia polinomială_, împreună cu unele dintre conceptele matematice din spatele acestor tehnici. Aceste modele ne vor permite să prezicem prețurile dovlecilor în funcție de diferiți parametri de intrare.
[![ML for beginners - Understanding Linear Regression](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML for beginners - Understanding Linear Regression")
> 🎥 Faceți click pe imaginea de mai sus pentru un scurt videoclip introductiv despre regresia liniară.
> 🎥 Apasă pe imaginea de mai sus pentru un scurt videoclip despre regresia liniară.
> Pe tot parcursul acestui curriculum, presupunem cunoștințe minime de matematică și ne propunem să o facem accesibilă pentru studenți din alte domenii, așa că urmăriți notele, 🧮 apelurile, diagramele și alte unelte de învățare pentru a ajuta la înțelegere.
> Pe tot parcursul acestui curriculum, presupunem cunoștințe minimale de matematică și căutăm să le facem accesibile studenților veniți din alte domenii, așa că urmărește notele, 🧮 explicațiile, diagramele și alte unelte de învățare pentru a ușura înțelegerea.
### Cerință prealabilă
### Prerechizite
Ar trebui să fiți familiarizați până acum cu structura datelor despre dovleci pe care le examinăm. Le puteți găsi preîncărcate și preprocesate în fișierul _notebook.ipynb_ al acestei lecții. În fișier, prețul dovlecilor este afișat pe bushel într-un nou DataFrame. Asigurați-vă că puteți rula aceste noteboooks în kerneluri din Visual Studio Code.
Ar trebui să fii familiarizat acum cu structura datelor despre dovleci pe care le examinăm. Le poți găsi preîncărcate și preprocesate în fișierul _notebook.ipynb_ din această lecție. În fișier, prețul dovlecilor este afișat per bushel într-un nou data frame. Asigură-te că poți rula aceste notebook-uri în kerneluri în Visual Studio Code.
### Pregătire
Ca un memento, încărcați aceste date pentru a putea pune întrebări despre ele.
Ca reminder, încarci aceste date ca să pui întrebări despre ele.
- Când este cel mai bun moment pentru a cumpăra dovleci?
- Ce preț pot să aștept pentru un coș de dovleci miniatură?
- Care este cel mai bun moment să cumperi dovleci?
- Ce preț pot să aștept pentru o cutie de dovleci miniatură?
- Ar trebui să îi cumpăr în coșuri de jumătate de bushel sau în cutii de 1 1/9 bushel?
Să continuăm să explorăm aceste date.
Să continuăm să analizăm aceste date.
În lecția anterioară, ați creat un DataFrame Pandas și l-ați populat cu o parte din setul original de date, standardizând prețurile pe bushel. Prin aceasta, totuși, ați putut colecta doar aproximativ 400 de puncte de date și numai pentru lunile de toamnă.
În lecția anterioară ai creat un Pandas data frame și l-ai populat cu o parte din setul original de date, standardizând prețul per bushel. Prin asta, însă, ai putut colecta doar vreo 400 de puncte de date și doar pentru lunile de toamnă.
Aruncați o privire la datele pe care le-am preîncărcat în notebook-ul însoțitor al acestei lecții. Datele sunt preîncărcate și este afișat un grafic de dispersie inițial pentru a arăta datele pe lună. Poate putem obține mai multe detalii despre natura datelor dacă le curățăm mai bine.
Aruncă o privire la datele preîncărcate în notebook-ul din această lecție. Datele sunt preîncărcate și un grafic de dispersie inițial este generat pentru a arăta datele lunii. Poate putem obține puțin mai multe detalii despre natura datelor printr-un proces suplimentar de curățare.
## O linie de regresie liniară
După cum ați învățat în Lecția 1, scopul unui exercițiu de regresie liniară este să puteți trasa o linie care să:
Așa cum ai învățat în Lecția 1, scopul unui exercițiu de regresie liniară este să poți trasa o linie care să:
- **Arate relațiile variabilelor**. Să arate relația dintre variabile
- **Facă predicții**. Să facă predicții precise despre unde ar cădea un nou punct de date în raport cu acea linie.
- **Arate relațiile dintre variabile**. Să arate relația dintre variabile
- **Facă predicții**. Să facă predicții corecte despre unde s-ar plasa un punct nou în raport cu acea linie.
Este tipic pentru **Regresia celor mai mici pătrate (Least-Squares Regression)** să traseze acest tip de linie. Termenul „Cei mai mici pătrate” se referă la procesul de minimizare a erorii totale în modelul nostru. Pentru fiecare punct de date, măsurăm distanța verticală (numită reziduală) între punctul real și linia noastră de regresie.
Este tipic pentru **Regresia cu Cele Mai Mici Pătrate** să se deseneze acest tip de linie. Termenul "Cele Mai Mici Pătrate" se referă la procesul de a minimiza eroarea totală din modelul nostru. Pentru fiecare punct de date, măsurăm distanța verticală (numită reziduală) dintre punctul real și linia noastră de regresie.
Aceste distanțe le pătrățim din două motive principale:
Aceste distanțe sunt pătrate din două motive principale:
1. **Magnitudine în loc de Direcție:** Dorim să tratăm o eroare de -5 la fel ca o eroare de +5. Pătratul transformă toate valorile în pozitive.
1. **Magnitudine și nu Direcție:** Vrem să tratăm o eroare de -5 la fel ca o eroare de +5. Pătratul face toate valorile pozitive.
2. **Penalizarea valorilor aberante:** Pătratul dă o greutate mai mare erorilor mari, forțând linia să rămână mai aproape de punctele care sunt departe.
2. **Penalizarea Outlierilor:** Pătratul dă o greutate mai mare erorilor mari, forțând linia să fie mai aproape de punctele care sunt îndepărtate.
Apoi adunăm toate aceste valori pătrate. Scopul nostru este să găsim linia specifică unde această sumă finală este minimă (cea mai mică valoare posibilă) - de aici și numele „Cei mai mici pătrate”.
Apoi adunăm toate aceste valori pătrate. Obiectivul nostru este să găsim linia specifică pentru care această sumă finală este cea mai mică (valoarea posibilă minimă) — de aici și numele "Cele Mai Mici Pătrate".
> **🧮 Arată-mi matematica**
>
> Această linie, denumită _linia cea mai potrivită_ poate fi exprimată prin [o ecuație](https://en.wikipedia.org/wiki/Simple_linear_regression):
>
> **🧮 Arată-mi matematica**
>
> Această linie, numită _linia de potrivire cea mai bună_ poate fi exprimată prin [o ecuație](https://en.wikipedia.org/wiki/Simple_linear_regression):
>
> ```
> Y = a + bX
> ```
>
> `X` este 'variabila explicativă'. `Y` este 'variabila dependentă'. Panta liniei este `b` iar `a` este interceptul pe axa y, care se referă la valoarea lui `Y` când `X = 0`.
> `X` este 'variabila explicativă'. `Y` este 'variabila dependentă'. Panta liniei este `b` iar `a` este ordonata la origine (intersectia cu axa y), care indică valoarea lui `Y` când `X = 0`.
>
>![calculate the slope](../../../../translated_images/ro/slope.f3c9d5910ddbfcf9.webp)
>![calculează panta](../../../../translated_images/ro/slope.f3c9d5910ddbfcf9.webp)
>
> Mai întâi, calculăm panta `b`. Infografic de [Jen Looper](https://twitter.com/jenlooper)
> Mai întâi, calculează panta `b`. Infografic de [Jen Looper](https://twitter.com/jenlooper)
>
> Cu alte cuvinte, referindu-ne la întrebarea inițială din datele noastre despre dovleci: „prezice prețul unui dovleac pe bushel pe lună”, `X` s-ar referi la preț iar `Y` s-ar referi la luna vânzării.
> Cu alte cuvinte, referindu-ne la întrebarea originală legată de datele despre dovleci: "predic prețul unui dovleac pe bushel în funcție de lună", `X` se referă la preț iar `Y` la luna vânzării.
>
>![complete the equation](../../../../translated_images/ro/calculation.a209813050a1ddb1.webp)
>![completează ecuația](../../../../translated_images/ro/calculation.a209813050a1ddb1.webp)
>
> Calculează valoarea lui Y. Dacă plătești în jur de 4 dolari, trebuie să fie aprilie! Infografic de [Jen Looper](https://twitter.com/jenlooper)
>
> Matematica care calculează linia trebuie să demonstreze panta liniei, care depinde și de intercept, sau unde se situează `Y` când `X = 0`.
> Matematica care calculează linia trebuie să demonstreze panta liniei, care depinde și de ordonata la origine, sau locul unde se află `Y` când `X = 0`.
>
> Puteți observa metoda de calcul pentru aceste valori pe site-ul [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Vizitați și [acest calculator pentru cele mai mici pătrate](https://www.mathsisfun.com/data/least-squares-calculator.html) pentru a vedea cum valorile numerelor influențează linia.
> Poți observa metoda de calcul a acestor valori pe site-ul [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Vizitează și [acest calculator pentru Cele Mai Mici Pătrate](https://www.mathsisfun.com/data/least-squares-calculator.html) ca să vezi cum valorile numerice influențează linia.
## Corelație
## Corelația
Un alt termen pe care trebuie să-l înțelegem este **Coeficientul de Corelație** între variabilele date X și Y. Folosind un grafic de dispersie, puteți vizualiza rapid acest coeficient. Un grafic cu puncte de date răspândite într-o linie ordonată are corelație ridicată, iar un grafic cu punctele de date presărate peste tot între X și Y are corelație scăzută.
Un termen în plus de înțeles este **Coeficientul de Corelație** între variabilele date X și Y. Folosind un grafic în puncte (scatterplot), poți vizualiza rapid acest coeficient. Un grafic cu punctele împrăștiate într-o linie ordonată are o corelație mare, dar un grafic cu punctele răspândite oriunde între X și Y are o corelație scăzută.
Un model bun de regresie liniară va fi unul care are un coeficient de corelație mare (mai aproape de 1 decât de 0) folosind metoda regresiei celor mai mici pătrate cu linia de regresie.
Un model bun de regresie liniară este acela care are un Coeficient de Corelație ridicat (mai aproape de 1 decât de 0) folosind metoda Regresiei cu Cele Mai Mici Pătrate și o linie de regresie.
✅ Rulați notebook-ul care însoțește această lecție și priviți graficul de dispersie Lună versus Preț. Datele care asociază Luna cu Prețul pentru vânzările de dovleci par să aibă corelație mare sau mică, conform interpretării dvs. vizuale a graficului? Se schimbă dacă folosiți o măsură mai detaliată în loc de `Lună`, de ex. *ziua din an* (adică numărul de zile de la începutul anului)?
✅ Rulează notebook-ul care însoțește această lecție și uită-te la graficul scatter Month to Price. Datele care asociază Luna cu Prețul pentru vânzările de dovleci par să aibă o corelație mare sau mică, conform interpretării tale vizuale a scatterplotului? Se modifică răspunsul dacă folosești o măsură mai detaliată în loc de `Month`, de exemplu *ziua anului* (adică numărul de zile de la începutul anului)?
În codul de mai jos, vom presupune că am curățat datele și am obținut un DataFrame numit `new_pumpkins`, similar cu următorul:
În codul de mai jos, vom presupune că am curățat datele și am obținut un data frame numit `new_pumpkins`, similar cu următorul:
ID | Lună | ZiDinAn | Varietate | Oraș | Ambalaj | Preț Minim | Preț Maxim | Preț
ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price
---|-------|-----------|---------|------|---------|-----------|------------|-------
70 | 9 | 267 | TIP PENTRU PLĂCINTĂ | BALTIMORE | cutii de 1 1/9 bushel | 15.0 | 15.0 | 13.636364
71 | 9 | 267 | TIP PENTRU PLĂCINTĂ | BALTIMORE | cutii de 1 1/9 bushel | 18.0 | 18.0 | 16.363636
72 | 10 | 274 | TIP PENTRU PLĂCINTĂ | BALTIMORE | cutii de 1 1/9 bushel | 18.0 | 18.0 | 16.363636
73 | 10 | 274 | TIP PENTRU PLĂCINTĂ | BALTIMORE | cutii de 1 1/9 bushel | 17.0 | 17.0 | 15.454545
74 | 10 | 281 | TIP PENTRU PLĂCINTĂ | BALTIMORE | cutii de 1 1/9 bushel | 15.0 | 15.0 | 13.636364
70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545
74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
> Codul pentru curățarea datelor este disponibil în [`notebook.ipynb`](notebook.ipynb). Am efectuat aceiași pași de curățare ca în lecția anterioară și am calculat coloana `DayOfYear` folosind expresia următoare:
> Codul pentru curățarea datelor este disponibil în [`notebook.ipynb`](notebook.ipynb). Am efectuat aceiași pași de curățare ca în lecția precedentă și am calculat coloana `DayOfYear` folosind expresia următoare:
```python
day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)
```
Acum că aveți o înțelegere a matematicii din spatele regresiei liniare, să creăm un model de regresie pentru a vedea dacă putem prezice care ambalaj de dovleci va avea cele mai bune prețuri. Cineva care cumpără dovleci pentru o copertină specială pentru sărbători ar putea dori aceste informații pentru a-și optimiza achizițiile de pachete de dovleci pentru acea copertină.
Acum că ai o înțelegere a matematicii din spatele regresiei liniare, să creăm un model de Regresie ca să vedem dacă putem prezice care pachet de dovleci va avea cele mai bune prețuri. Cineva care cumpără dovleci pentru un patch de dovleci de sărbători ar vrea aceste informații pentru a-și optimiza achizițiile.
## Căutarea corelației
## Căutând Corelații
[![ML for beginners - Looking for Correlation: The Key to Linear Regression](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML for beginners - Looking for Correlation: The Key to Linear Regression")
> 🎥 Faceți click pe imaginea de mai sus pentru un scurt videoclip despre corelație.
> 🎥 Apasă pe imaginea de mai sus pentru un scurt videoclip despre corelație.
Din lecția anterioară probabil ați văzut că prețul mediu pentru diferite luni arată astfel:
Din lecția anterioară probabil ai văzut că prețul mediu pentru diferite luni arată așa:
<img alt="Average price by month" src="../../../../translated_images/ro/barchart.a833ea9194346d76.webp" width="50%"/>
Acest lucru sugerează că ar trebui să existe o corelație și putem încerca să antrenăm un model de regresie liniară pentru a prezice relația dintre `Lună` și `Preț`, sau între `ZiDinAn` și `Preț`. Iată graficul de dispersie care arată ultima relație:
Acest lucru sugerează că ar trebui să existe o corelație și putem încerca să antrenăm un model de regresie liniară pentru a prezice relația dintre `Month` și `Price`, sau dintre `DayOfYear` și `Price`. Iată graficul scatter care arată relația din urmă:
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/ro/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
@ -130,7 +130,7 @@ print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
```
Se pare că corelația este destul de mică, -0.15 folosind `Month` și -0.17 folosind `DayOfMonth`, dar ar putea exista o altă relație importantă. Se pare că există grupuri diferite de prețuri care corespund diferitelor varietăți de dovleci. Pentru a confirma această ipoteză, să afișăm fiecare categorie de dovleci folosind o culoare diferită. Prin trecerea unui parametru `ax` funcției de plotare `scatter` putem afișa toate punctele pe același grafic:
Se pare că corelația este destul de mică, -0.15 pentru `Month` și -0.17 pentru `DayOfYear`, dar ar putea exista o altă relație importantă. Se pare că există diferite clustere de prețuri corespunzătoare unor varietăți diferite de dovleci. Ca să confirmăm această ipoteză, să afișăm fiecare categorie de dovleac cu o culoare diferită. Prin adăugarea unui parametru `ax` în funcția `scatter` putem desena toate punctele pe același grafic:
```python
ax=None
@ -142,7 +142,7 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()):
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/ro/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
Investigația noastră sugerează că varietatea are mai mult efect asupra prețului general decât data efectivă de vânzare. Putem observa acest lucru cu un grafic cu bare:
Investigația noastră sugerează că varietatea are un efect mai mare asupra prețului total decât data vânzării. Putem vedea asta și pe un grafic bara:
```python
new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
@ -150,7 +150,7 @@ new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
<img alt="Bar graph of price vs variety" src="../../../../translated_images/ro/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
Să ne concentrăm pentru moment doar pe o varietate de dovleac, „tip plăcintă”, și să vedem ce efect are data asupra prețului:
Să ne concentrăm pentru moment doar pe o singură varietate de dovleci, tipul 'pie', și să vedem ce efect are data asupra prețului:
```python
pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
@ -158,22 +158,22 @@ pie_pumpkins.plot.scatter('DayOfYear','Price')
```
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/ro/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
Dacă acum calculăm corelația între `Price` și `DayOfYear` folosind funcția `corr`, vom obține ceva în jur de `-0.27` - ceea ce înseamnă că antrenarea unui model predictiv are sens.
Dacă acum calculăm corelația dintre `Price` și `DayOfYear` folosind funcția `corr`, vom obține ceva de genul `-0.27` - ceea ce înseamnă că are sens să antrenăm un model predictiv.
> Înainte de a antrena un model de regresie liniară, este important să ne asigurăm că datele noastre sunt curate. Regresia liniară nu funcționează bine cu valori lipsă, astfel că are sens să eliminăm toate celulele goale:
> Înainte de a antrena un model de regresie liniară, este important să ne asigurăm că datele noastre sunt curate. Regresia liniară nu funcționează bine cu valori lipsă, deci este logic să eliminăm toate celulele goale:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
O altă abordare ar fi să completăm acele valori goale cu valorile medii din coloana corespunzătoare.
O altă abordare ar fi să completăm acele valori goale cu valori medii din coloana corespunzătoare.
## Regresie liniară simplă
## Regresie Liniară Simplă
[![ML for beginners - Linear and Polynomial Regression using Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML for beginners - Linear and Polynomial Regression using Scikit-learn")
> 🎥 Faceți click pe imaginea de mai sus pentru un scurt videoclip despre regresia liniară și polinomială.
> 🎥 Apasă pe imaginea de mai sus pentru un scurt videoclip despre regresia liniară și polinomială.
Pentru a antrena modelul nostru de regresie liniară, vom folosi biblioteca **Scikit-learn**.
@ -183,31 +183,31 @@ from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
Începem prin separarea valorilor de intrare (caracteristici) și a ieșirii așteptate (eticheta) în array-uri numpy separate:
Începem prin a separa valorile de intrare (caracteristicile) și ieșirea așteptată (eticheta) în matrice numpy separate:
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> Observați că a fost necesar să facem `reshape` pe datele de intrare pentru ca pachetul de Regresie Liniară să înțeleagă corect datele. Regresia liniară așteaptă un array 2D ca intrare, unde fiecare rând al array-ului corespunde unui vector de caracteristici. În cazul nostru, pentru că avem o singură intrare - avem nevoie de un array cu forma N&times;1, unde N este dimensiunea setului de date.
> Observă că a trebuit să facem `reshape` asupra datelor de intrare pentru ca pachetul de Regresie Liniară să le înțeleagă corect. Regresia Liniară așteaptă o matrice 2D ca intrare, unde fiecare rând al matricei corespunde unui vector de caracteristici de intrare. În cazul nostru, pentru că avem o singură intrare, avem nevoie de o matrice cu forma N&times;1, unde N este dimensiunea datasetului.
Apoi, trebuie să împărțim datele în seturi de antrenament și de test, astfel încât să putem valida modelul după antrenare:
Apoi, trebuie să împărțim datele în seturi de antrenare și test, pentru a putea valida modelul după antrenare:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
În final, antrenarea propriu-zisă a modelului de regresie liniară durează doar două linii de cod. Definim obiectul `LinearRegression`, și îl ajustăm la datele noastre folosind metoda `fit`:
În final, antrenarea modelului efectiv de Regresie Liniară ia doar două linii de cod. Definim obiectul `LinearRegression` și îl potrivim pe date utilizând metoda `fit`:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
Obiectul `LinearRegression` după ce a fost `fit`-at conține toți coeficienții regresiei, care pot fi accesati folosind proprietatea `.coef_`. În cazul nostru, există un singur coeficient, care ar trebui să fie în jur de `-0.017`. Aceasta înseamnă că prețurile par să scadă puțin în timp, dar nu prea mult, în jur de 2 cenți pe zi. Putem, de asemenea, să accesăm punctul de intersecție al regresiei cu axa Y folosind `lin_reg.intercept_` - acesta va fi în jur de `21` în cazul nostru, indicând prețul la începutul anului.
Obiectul `LinearRegression` după ce a fost `fit`-at conține toți coeficienții regresiei, care pot fi accesati folosind proprietatea `.coef_`. În cazul nostru, există doar un coeficient, care ar trebui să fie în jur de `-0.017`. Asta înseamnă că prețurile par să scadă puțin în timp, dar nu prea mult, în jur de 2 cenți pe zi. Putem accesa și punctul de intersecție al regresiei cu axa Y folosind `lin_reg.intercept_` - acesta va fi în jur de `21` în cazul nostru, indicând prețul la începutul anului.
Pentru a vedea cât de precis este modelul nostru, putem prezice prețurile pe un set de date de testare și apoi măsura cât de apropiate sunt predicțiile noastre de valorile așteptate. Acest lucru se poate face folosind metrici de eroare pătratică medie rădăcină (RMSE), care este rădăcina mediei tuturor diferențelor pătratice între valoarea așteptată și cea prezisă.
Pentru a vedea cât de precis este modelul nostru, putem prezice prețurile pe un set de date de test și apoi măsura cât de aproape sunt predicțiile noastre de valorile așteptate. Acest lucru poate fi făcut folosind metrica eroarea pătratică medie rădăcină (RMSE), care este rădăcina mediei tuturor diferențelor pătrate dintre valorile așteptate și cele prezise.
```python
pred = lin_reg.predict(X_test)
@ -216,13 +216,13 @@ rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
```
Eroarea noastră pare să fie în jur de 2 puncte, ceea ce este ~17%. Nu foarte bine. Un alt indicator al calității modelului este **coeficientul de determinare**, care poate fi obținut astfel:
Eroarea noastră pare să fie în jur de 2 puncte, ceea ce reprezintă aproximativ ~17%. Nu foarte bine. Un alt indicator al calității modelului este **coeficientul de determinare**, care poate fi obținut astfel:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
Dacă valoarea este 0, înseamnă că modelul nu ia în considerare datele de intrare și acționează ca *cel mai slab predictor liniar*, care este pur și simplu valoarea medie a rezultatului. Valoarea 1 înseamnă că putem prezice perfect toate ieșirile așteptate. În cazul nostru, coeficientul este în jur de 0.06, ceea ce este destul de mic.
Dacă valoarea este 0, înseamnă că modelul nu ia în considerare datele de intrare și acționează ca *cel mai slab predictor liniar*, adică un simplu mediu al rezultatelor. Valoarea 1 înseamnă că putem prezice perfect toate valorile așteptate. În cazul nostru, coeficientul este în jur de 0.06, ceea ce este destul de scăzut.
Putem, de asemenea, să reprezentăm grafic datele de test împreună cu linia de regresie pentru a vedea mai bine cum funcționează regresia în cazul nostru:
@ -231,21 +231,21 @@ plt.scatter(X_test,y_test)
plt.plot(X_test,pred)
```
<img alt="Linear regression" src="../../../../translated_images/ro/linear-results.f7c3552c85b0ed1c.webp" width="50%" />
<img alt="Regresie liniară" src="../../../../translated_images/ro/linear-results.f7c3552c85b0ed1c.webp" width="50%" />
## Regresie Polinomială
## Regresie polinomială
Un alt tip de Regresie Liniară este Regresia Polinomială. Deși uneori există o relație liniară între variabile - cu cât dovleacul are un volum mai mare, cu atât prețul este mai mare - uneori aceste relații nu pot fi reprezentate ca un plan sau o linie dreaptă.
Un alt tip de Regresie Liniară este Regresia Polinomială. Deși uneori există o relație liniară între variabile - cu cât dovleacul este mai mare ca volum, cu atât prețul este mai mare - uneori aceste relații nu pot fi reprezentate printr-o plană sau o linie dreaptă.
✅ Iată [câteva exemple suplimentare](https://online.stat.psu.edu/stat501/lesson/9/9.8) de date pentru care s-ar putea folosi Regresia Polinomială
✅ Iată [câteva exemple în plus](https://online.stat.psu.edu/stat501/lesson/9/9.8) de date care pot folosi Regresia Polinomială
Uită-te din nou la relația dintre Data și Preț. Se pare că acest scatterplot ar trebui neapărat analizat cu o linie dreaptă? Nu pot prețurile să fluctueze? În acest caz, poți încerca regresia polinomială.
Priviți din nou relația dintre Data și Preț. Acest diagramă de dispersie pare că trebuie neapărat să fie analizată printr-o linie dreaptă? Nu pot prețurile să fluctueze? În acest caz, puteți încerca regresia polinomială.
✅ Polinoamele sunt expresii matematice care pot consta din una sau mai multe variabile și coeficienți
Regresia polinomială creează o curbă pentru a se potrivi mai bine datelor neliniare. În cazul nostru, dacă includem o variabilă `DayOfYear` la pătrat în datele de intrare, ar trebui să putem potrivi datele noastre cu o curbă parabolică, care va avea un minim într-un anumit punct al anului.
Regresia polinomială creează o curbă pentru a se potrivi mai bine datelor neliniare. În cazul nostru, dacă includem o variabilă `DayOfYear` la pătrat în datele de intrare, ar trebui să putem potrivi datele cu o curbă parabolică, care va avea un minim într-un anumit punct din an.
Scikit-learn include un API util [pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) pentru a combina împreună diferitele etape ale procesării datelor. Un **pipeline** este un lanț de **estimatori**. În cazul nostru, vom crea un pipeline care mai întâi adaugă caracteristici polinomiale modelului nostru, apoi antrenează regresia:
Scikit-learn include un API util [pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) pentru a combina diferitele etape de procesare a datelor împreună. Un **pipeline** este un lanț de **estimatori**. În cazul nostru, vom crea un pipeline care adaugă mai întâi caracteristici polinomiale modelului, apoi antrenează regresia:
```python
from sklearn.preprocessing import PolynomialFeatures
@ -256,36 +256,58 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
```
Folosind `PolynomialFeatures(2)` înseamnă că vom include toate polinoamele de gradul al doilea din datele de intrare. În cazul nostru, aceasta va însemna doar `DayOfYear`<sup>2</sup>, dar dat fiind două variabile de intrare X și Y, aceasta va adăuga X<sup>2</sup>, XY și Y<sup>2</sup>. Putem folosi, de asemenea, polinoame de grad mai mare dacă dorim.
Folosind `PolynomialFeatures(2)` înseamnă că vom include toți polinomii de gradul al doilea din datele de intrare. În cazul nostru, asta va însemna doar `DayOfYear`<sup>2</sup>, dar având două variabile de intrare X și Y, se vor adăuga X<sup>2</sup>, XY și Y<sup>2</sup>. Putem folosi și polinoame de grad mai mare dacă dorim.
Pipeline-urile pot fi folosite în același mod ca obiectul original `LinearRegression`, adică putem face `fit` pe pipeline, apoi folosi `predict` pentru a obține rezultatele predicției. Iată graficul care arată datele de test și curba de aproximare:
Pipeline-urile pot fi folosite în același mod ca obiectul original `LinearRegression`, adică putem `fit` pipeline-ul și apoi folosi `predict` pentru a obține rezultatele predicției:
<img alt="Polynomial regression" src="../../../../translated_images/ro/poly-results.ee587348f0f1f60b.webp" width="50%" />
```python
pred = pipeline.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
Pentru a reprezenta grafic curba de aproximare netedă, folosim `np.linspace` pentru a crea un interval uniform de valori de intrare, în loc să reprezentăm direct datele nesortate de test (care ar produce o linie zigzag):
```python
X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)
y_range = pipeline.predict(X_range)
plt.scatter(X_test, y_test)
plt.plot(X_range, y_range)
```
Iată graficul care arată datele de test și curba de aproximare:
<img alt="Regresie polinomială" src="../../../../translated_images/ro/poly-results.ee587348f0f1f60b.webp" width="50%" />
Folosind Regresia Polinomială, putem obține un MSE ușor mai mic și un coeficient de determinare mai mare, dar nu semnificativ. Trebuie să luăm în considerare și alte caracteristici!
Folosind Regresie Polinomială, putem obține o eroare RMSE ușor mai mică și un coeficient de determinare mai mare, însă nu semnificativ. Trebuie să luăm în calcul și alte caracteristici!
> Poți vedea că prețurile minime ale dovlecilor sunt observate undeva în jurul Halloween-ului. Cum poți explica asta?
> Se observă că prețurile minime ale dovlecilor se găsesc în jurul Halloween-ului. Cum explicați acest lucru?
🎃 Felicitări, ai creat un model care te poate ajuta să prezici prețul dovlecilor pentru plăcintă. Probabil că poți repeta aceeași procedură pentru toate tipurile de dovleci, dar ar fi obositor. Hai să învățăm acum cum să luăm în considerare varietatea de dovleci în modelul nostru!
🎃 Felicitări, tocmai ați creat un model care poate ajuta la predicția prețului pentru dovlecii de placintă. Probabil puteți repeta aceeași procedură pentru toate tipurile de dovleci, dar ar fi obositor. Haideți să învățăm acum cum să luăm în considerare soiul dovleacului în modelul nostru!
## Caracteristici Categorice
## Caracteristici categorice
În lumea ideală, vrem să putem prezice prețurile pentru diferite varietăți de dovleci folosind același model. Totuși, coloana `Variety` este oarecum diferită față de coloane precum `Month`, pentru că conține valori nenumerice. Astfel de coloane sunt numite **categorice**.
În lumea ideală, vrem să putem prezice prețurile pentru diferite soiuri de dovleac folosind același model. Totuși, coloana `Variety` este puțin diferită față de coloane precum `Month`, deoarece conține valori non-numerice. Astfel de coloane se numesc **categorice**.
[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
[![ML pentru începători - Predicții pentru caracteristici categorice folosind regresia liniară](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML pentru începători - Predicții pentru caracteristici categorice folosind regresia liniară")
> 🎥 Apasă pe imaginea de mai sus pentru un scurt videoclip despre folosirea caracteristicilor categorice.
> 🎥 Click pe imaginea de mai sus pentru un scurt video despre folosirea caracteristicilor categorice.
Aici poți vedea cum depinde prețul mediu de varietate:
Aici vedeți cum prețul mediu depinde de soi:
<img alt="Average price by variety" src="../../../../translated_images/ro/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
<img alt="Preț mediu în funcție de soi" src="../../../../translated_images/ro/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
Pentru a lua în considerare varietatea, trebuie mai întâi să o convertim în formă numerică, sau să o **encodăm**. Există mai multe moduri în care putem face asta:
Pentru a lua în calcul soiul, mai întâi trebuie să îl convertim în formă numerică sau să îl **encodăm**. Există mai multe metode prin care putem face asta:
* Encodarea numerică simplă construită o tabelă cu diferite varietăți, apoi înlocuiește numele varietății cu un indice în acea tabelă. Aceasta nu este o idee bună pentru regresia liniară, deoarece regresia liniară ia valoarea numerică reală a indicelui și o adaugă la rezultat, înmulțind cu un coeficient. În cazul nostru, relația dintre numărul indicelui și preț este clar neliniară, chiar dacă ne asigurăm că indicii sunt ordonați într-un anumit mod.
* Encodarea one-hot va înlocui coloana `Variety` cu 4 coloane diferite, câte una pentru fiecare varietate. Fiecare coloană va conține `1` dacă rândul respectiv aparține acestei varietăți și `0` altfel. Aceasta înseamnă că vor exista patru coeficienți în regresia liniară, câte unul pentru fiecare varietate de dovleac, responsabili pentru "prețul de pornire" (sau mai bine zis "prețul suplimentar") pentru acea varietate anume.
* Simplul **cod numeric** va construi un tabel cu diferite soiuri, apoi va înlocui numele soiului cu un index în acel tabel. Aceasta nu este cea mai bună idee pentru regresia liniară, deoarece regresia liniară ia valoarea numerică efectivă a indexului și o adaugă la rezultat, multiplicând cu un coeficient. În cazul nostru, relația dintre numărul indexului și preț este clar neliniară, chiar dacă ne asigurăm că indicii sunt ordonați într-un anume mod.
* **One-hot encoding** va înlocui coloana `Variety` cu 4 coloane diferite, câte una pentru fiecare soi. Fiecare coloană va conține `1` dacă rândul corespunzător e dintr-un anumit soi, și `0` altfel. Aceasta înseamnă că vor exista patru coeficienți în regresia liniară, câte unul pentru fiecare soi de dovleac, care răspund pentru "prețul de pornire" (sau mai bine zis "prețul suplimentar") pentru acel soi particular.
Codul de mai jos arată cum putem face one-hot encoding pentru o varietate:
Codul de mai jos arată cum putem face one-hot encoding pentru un soi:
```python
pd.get_dummies(new_pumpkins['Variety'])
@ -302,14 +324,14 @@ pd.get_dummies(new_pumpkins['Variety'])
1741 | 0 | 1 | 0 | 0
1742 | 0 | 1 | 0 | 0
Pentru a antrena regresia liniară folosind varietatea encodată one-hot ca intrare, trebuie doar să inițializăm corect datele `X` și `y`:
Pentru a antrena regresia liniară folosind variabila codificată one-hot ca intrare, trebuie doar să inițializăm corect datele `X` și `y`:
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
Restul codului este la fel ca cel folosit mai sus pentru antrenarea regresiei liniare. Dacă încerci, vei vedea că eroarea pătratică medie este cam la fel, dar coeficientul de determinare crește mult (~77%). Pentru a obține predicții și mai precise, putem lua în considerare mai multe caracteristici categorice, precum și caracteristici numerice, cum ar fi `Month` sau `DayOfYear`. Pentru a obține un singur tablou mare de caracteristici, putem folosi `join`:
Restul codului este același pe care l-am folosit mai sus pentru antrenarea regresiei liniare. Dacă încercați, veți vedea că eroarea pătratică medie este aproximativ aceeași, dar coeficientul de determinare este mult mai mare (~77%). Pentru predicții și mai precise, putem lua în calcul mai multe caracteristici categorice, precum și caracteristici numerice, cum ar fi `Month` sau `DayOfYear`. Pentru a obține un singur array mare de caracteristici, putem folosi `join`:
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
@ -319,11 +341,11 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
y = new_pumpkins['Price']
```
Aici luăm în considerare și `City` și tipul de `Package`, ceea ce ne oferă un MSE de 2.84 (10%) și un coeficient de determinare de 0.94!
Aici luăm în considerare și `City` și tipul `Package`, ceea ce ne oferă RMSE 2.84 (10.5%) și determinare 0.94!
## Punând totul cap la cap
Pentru a face cel mai bun model, putem folosi date combinate (categorice one-hot encode + numerice) din exemplul de mai sus împreună cu Regresia Polinomială. Iată codul complet pentru confortul tău:
Pentru a face cel mai bun model, putem folosi date combinate (categorice codificate one-hot + numerice) din exemplul de mai sus împreună cu regresia polinomială. Iată codul complet pentru comoditatea dvs.:
```python
# configurează datele de antrenament
@ -333,54 +355,54 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
# realizează împărțirea în seturi de antrenament și test
# realizează împărțirea antrenament-test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# configurează și antrenează pipeline-ul
# configurează și antrenează fluxul de procesare
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
# prezice rezultatele pentru datele de test
pred = pipeline.predict(X_test)
# calculează MSE și coeficientul de determinare
mse = np.sqrt(mean_squared_error(y_test,pred))
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
# calculează RMSE și coeficientul de determinare
rmse = mean_squared_error(y_test, pred, squared=False)
print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
Aceasta ne va da cel mai bun coeficient de determinare de aproape 97%, și MSE=2.23 (~8% eroare de predicție).
Acest model ar trebui să ne dea cel mai bun coeficient de determinare de aproape 97% și RMSE=2.23 (~8% eroare de predicție).
| Model | MSE | Determinarea |
|-------|-----|--------------|
| Liniară `DayOfYear` | 2.77 (17.2%) | 0.07 |
| Polinomială `DayOfYear` | 2.73 (17.0%) | 0.08 |
| Liniară `Variety` | 5.24 (19.7%) | 0.77 |
| Toate caracteristicile Liniară | 2.84 (10.5%) | 0.94 |
| Toate caracteristicile Polinomială | 2.23 (8.25%) | 0.97 |
| Model | RMSE | Determinare |
|-------|-----|-------------|
| `DayOfYear` Liniar | 2.77 (17.2%) | 0.07 |
| `DayOfYear` Polinomial | 2.73 (17.0%) | 0.08 |
| `Variety` Liniar | 5.24 (19.7%) | 0.77 |
| Toate caracteristicile Liniar | 2.84 (10.5%) | 0.94 |
| Toate caracteristicile Polinomial | 2.23 (8.25%) | 0.97 |
🏆 Foarte bine! Ai creat patru modele de regresie într-o lecție și ai îmbunătățit calitatea modelului la 97%. În secțiunea finală despre Regresie, vei învăța despre Regresia Logistică pentru clasificare.
🏆 Bravo! Ați creat patru modele de regresie într-o singură lecție și ați îmbunătățit calitatea modelului la 97%. În secțiunea finală despre regresie, veți învăța despre regresia logistică pentru determinarea categoriilor.
---
## 🚀Provocare
Testează mai multe variabile diferite în acest notebook pentru a vedea cum corespunde corelația cu acuratețea modelului.
Testați mai multe variabile diferite în acest notebook pentru a vedea cum corelația corespunde acurateții modelului.
## [Chestionar post-lectură](https://ff-quizzes.netlify.app/en/ml/)
## [Chestionar după lecție](https://ff-quizzes.netlify.app/en/ml/)
## Recenzie & Studiu individual
## Recapitulare și Auto-studiu
În această lecție am învățat despre Regresia Liniară. Există și alte tipuri importante de regresie. Citește despre tehnicile Stepwise, Ridge, Lasso și Elasticnet. Un curs bun pentru a învăța mai multe este [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
În această lecție am învățat despre regresia liniară. Există și alte tipuri importante de regresie. Citiți despre tehnicile Stepwise, Ridge, Lasso și Elasticnet. Un curs bun de studiat pentru a învăța mai mult este [cursul de Învățare Statistică de la Stanford](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
## Temă
## Tema
[Construiește un Model](assignment.md)
[Construiți un model](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Declinare a responsabilității**:
Acest document a fost tradus folosind serviciul de traducere AI [Co-op Translator](https://github.com/Azure/co-op-translator). Deși ne străduim pentru acuratețe, vă rugăm să rețineți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa nativă trebuie considerat sursa autorizată. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm răspunderea pentru eventualele neînțelegeri sau interpretări greșite rezultate din utilizarea acestei traduceri.
Acest document a fost tradus folosind serviciul de traducere AI [Co-op Translator](https://github.com/Azure/co-op-translator). Deși ne străduim pentru acuratețe, vă rugăm să fiți conștienți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa nativă trebuie considerat sursa autorizată. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm nicio responsabilitate pentru eventualele neînțelegeri sau interpretări greșite care pot rezulta din utilizarea acestei traduceri.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -4,14 +4,14 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## Regresie Liniară și Polinomială pentru Stabilirea Prețului Dovlecilor - Lecția 3\n",
"## Regresie liniară și polinomială pentru stabilirea prețului dovleacului - Lecția 3\n",
"\n",
"Încarcă bibliotecile necesare și setul de date. Transformă datele într-un dataframe care conține un subset al datelor:\n",
"Încarcă bibliotecile și setul de date necesare. Convertește datele într-un dataframe care conține un subset din date:\n",
"\n",
"- Selectează doar dovlecii cu preț stabilit pe bușel\n",
"- Obține doar dovlecii prețați pe sac\n",
"- Convertește data într-o lună\n",
"- Calculează prețul ca fiind media dintre prețurile maxime și minime\n",
"- Convertește prețul pentru a reflecta prețul pe cantitatea de bușel\n"
"- Calculează prețul ca fiind o medie între prețurile maxime și minime\n",
"- Convertește prețul pentru a reflecta prețul pe cantitatea de sac\n"
]
},
{
@ -377,7 +377,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Un grafic de tip scatterplot ne amintește că avem date lunare doar din august până în decembrie. Probabil avem nevoie de mai multe date pentru a putea trage concluzii într-un mod liniar.\n"
"Un diagramă de dispersie ne amintește că avem date doar din lunile august până în decembrie. Probabil că avem nevoie de mai multe date pentru a putea trage concluzii într-un mod liniar.\n"
]
},
{
@ -447,7 +447,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"Să vedem dacă există corelație:\n"
]
},
{
"cell_type": "code",
@ -472,7 +474,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Se pare că corelația este destul de mică, dar există o altă relație mai importantă - deoarece punctele de preț din graficul de mai sus par să formeze mai multe clustere distincte. Să facem un grafic care să arate diferitele soiuri de dovleac:\n"
"Se pare că corelația este destul de mică, dar există o altă relație mai importantă - deoarece punctele de preț din graficul de mai sus par să aibă mai multe clustere distincte. Hai să facem un grafic care să arate diferite soiuri de dovleci:\n"
]
},
{
@ -535,7 +537,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"Pentru moment, să ne concentrăm doar pe un singur tip - **tip plăcintă**.\n"
]
},
{
"cell_type": "code",
@ -582,9 +586,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### Regresie Liniară\n",
"### Regressie liniară\n",
"\n",
"Vom folosi Scikit Learn pentru a antrena un model de regresie liniară:\n"
"Vom folosi Scikit Learn pentru a antrena modelul de regresie liniară:\n"
]
},
{
@ -688,7 +692,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"Putem folosi modelul antrenat pentru a prezice prețul:\n"
]
},
{
"cell_type": "code",
@ -716,11 +722,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### Regresie Polinomială\n",
"### Regressie polinomială\n",
"\n",
"Uneori, relația dintre caracteristici și rezultate este în mod inerent non-lineară. De exemplu, prețurile dovlecilor pot fi ridicate iarna (luni=1,2), apoi scad vara (luni=5-7) și cresc din nou. Regresia liniară nu poate identifica această relație cu acuratețe.\n",
"Uneori relația dintre caracteristici și rezultate este în mod inerent neliniară. De exemplu, prețurile dovlecilor pot fi ridicate iarna (luni=1,2), apoi scad pe timpul verii (luni=5-7), după care cresc din nou. Regressia liniară nu poate identifica această relație cu precizie.\n",
"\n",
"În acest caz, putem lua în considerare adăugarea de caracteristici suplimentare. O metodă simplă este utilizarea polinoamelor din caracteristicile de intrare, ceea ce ar duce la **regresia polinomială**. În Scikit Learn, putem pre-computa automat caracteristicile polinomiale folosind pipeline-uri:\n"
"În acest caz, putem lua în considerare adăugarea de caracteristici suplimentare. Modul simplu este să folosim polinoame din caracteristicile de intrare, ceea ce ar conduce la o **regresie polinomială**. În Scikit Learn, putem pre-calcula automat caracteristicile polinomiale folosind pipeline-uri: \n"
]
},
{
@ -775,22 +781,25 @@
"score = pipeline.score(X_train,y_train)\n",
"print('Model determination: ', score)\n",
"\n",
"plt.scatter(X_test,y_test)\n",
"plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))"
"X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n",
"y_range = pipeline.predict(X_range)\n",
"\n",
"plt.scatter(X_test, y_test)\n",
"plt.plot(X_range, y_range)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Codificarea soiurilor\n",
"### Varietăți de codificare\n",
"\n",
"Într-o lume ideală, ne dorim să putem prezice prețurile pentru diferite soiuri de dovleci folosind același model. Pentru a ține cont de soi, mai întâi trebuie să îl convertim într-o formă numerică, sau să îl **codificăm**. Există mai multe moduri în care putem face acest lucru:\n",
"În lumea ideală, dorim să putem prezice prețurile pentru diferite soiuri de dovleac folosind același model. Pentru a lua în considerare soiul, trebuie mai întâi să-l convertim în formă numerică, adică să îl **codificăm**. Există mai multe moduri în care putem face acest lucru:\n",
"\n",
"* Codificare numerică simplă, care va construi un tabel cu diferite soiuri, apoi va înlocui numele soiului cu un index din acel tabel. Aceasta nu este cea mai bună idee pentru regresia liniară, deoarece regresia liniară ia în considerare valoarea numerică a indexului, iar valoarea numerică este probabil să nu coreleze numeric cu prețul.\n",
"* Codificare one-hot, care va înlocui coloana `Variety` cu 4 coloane diferite, câte una pentru fiecare soi, care vor conține 1 dacă rândul corespunzător este din soiul respectiv și 0 în caz contrar.\n",
"* Codificarea numerică simplă, care va construi un tabel al diferitelor soiuri, apoi va înlocui numele soiului cu un indice în acel tabel. Aceasta nu este cea mai bună idee pentru regresia liniară, deoarece regresia liniară are în vedere valoarea numerică a indicelui, iar valoarea numerică probabil nu corelează numeric cu prețul.\n",
"* Codificarea one-hot, care va înlocui coloana `Variety` cu 4 coloane diferite, câte una pentru fiecare soi, care vor conține 1 dacă rândul corespunzător este din soiul respectiv și 0 în caz contrar.\n",
"\n",
"Codul de mai jos arată cum putem codifica one-hot un soi:\n"
"Codul de mai jos arată cum putem face codificarea one-hot a unui soi:\n"
]
},
{
@ -938,9 +947,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### Regresie Liniară pe Varietate\n",
"### Regresia liniară pe soiuri\n",
"\n",
"Vom folosi acum același cod ca mai sus, dar în loc de `DayOfYear` vom utiliza varietatea noastră codificată one-hot ca intrare:\n"
"Acum vom folosi același cod ca mai sus, dar în loc de `DayOfYear` vom folosi soiul nostru codificat one-hot ca intrare:\n"
]
},
{
@ -988,7 +997,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Putem încerca, de asemenea, să folosim alte caracteristici în același mod și să le combinăm cu caracteristici numerice, cum ar fi `Month` sau `DayOfYear`:\n"
"Putem încerca, de asemenea, să folosim și alte caracteristici în același mod și să le combinăm cu caracteristici numerice, cum ar fi `Month` sau `DayOfYear`:\n"
]
},
{
@ -1021,7 +1030,7 @@
"source": [
"### Regresie Polinomială\n",
"\n",
"Regresia polinomială poate fi utilizată și cu caracteristici categorice care sunt codificate one-hot. Codul pentru antrenarea regresiei polinomiale ar fi, în esență, același cu cel pe care l-am văzut mai sus.\n"
"Regresia polinomială poate fi utilizată și cu caracteristici categorice care sunt codificate one-hot. Codul pentru antrenarea regresiei polinomiale ar fi practic același cu cel pe care l-am văzut mai sus.\n"
]
},
{
@ -1068,7 +1077,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Declinarea responsabilității**: \nAcest document a fost tradus utilizând serviciul de traducere AI [Co-op Translator](https://github.com/Azure/co-op-translator). Deși depunem eforturi pentru a asigura acuratețea, vă rugăm să aveți în vedere că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa nativă ar trebui considerat sursa autoritară. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm răspunderea pentru eventualele neînțelegeri sau interpretări greșite care pot apărea din utilizarea acestei traduceri.\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Declinare a responsabilității**: \nAcest document a fost tradus folosind serviciul de traducere AI [Co-op Translator](https://github.com/Azure/co-op-translator). Deși ne străduim pentru acuratețe, vă rugăm să aveți în vedere că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa nativă trebuie considerat sursa autorizată. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm responsabilitatea pentru eventualele neînțelegeri sau interpretări greșite care pot rezulta din utilizarea acestei traduceri.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -1098,13 +1107,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "d77bd89ae7e79780c68c58bab91f13f8",
"translation_date": "2025-09-06T11:31:55+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "ro"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

@ -36,8 +36,8 @@
"language_code": "sk"
},
"1-Introduction/4-techniques-of-ML/README.md": {
"original_hash": "9d91f3af3758fdd4569fb410575995ef",
"translation_date": "2025-09-05T16:04:10+00:00",
"original_hash": "84b1715a6be62ef1697351dcc5d7b567",
"translation_date": "2026-04-26T19:08:51+00:00",
"source_file": "1-Introduction/4-techniques-of-ML/README.md",
"language_code": "sk"
},
@ -90,8 +90,8 @@
"language_code": "sk"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "26c53a922f1f1e8542b0ea41ff52221a",
"translation_date": "2026-04-20T20:32:38+00:00",
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T19:08:20+00:00",
"source_file": "2-Regression/3-Linear/README.md",
"language_code": "sk"
},
@ -107,6 +107,12 @@
"source_file": "2-Regression/3-Linear/solution/Julia/README.md",
"language_code": "sk"
},
"2-Regression/3-Linear/solution/notebook.ipynb": {
"original_hash": "6781223ffbe8cfdaa38d0200f08e1288",
"translation_date": "2026-04-26T19:06:22+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "sk"
},
"2-Regression/4-Logistic/README.md": {
"original_hash": "abf86d845c84330bce205a46b382ec88",
"translation_date": "2025-09-05T15:16:31+00:00",

@ -1,123 +1,125 @@
# Techniky strojového učenia
Proces vytvárania, používania a udržiavania modelov strojového učenia a dát, ktoré používajú, je veľmi odlišný od mnohých iných vývojových pracovných postupov. V tejto lekcii tento proces objasníme a načrtneme hlavné techniky, ktoré potrebujete poznať. Naučíte sa:
Proces tvorby, používania a údržby modelov strojového učenia a dát, ktoré používajú, je veľmi odlišný od mnohých iných vývojových pracovných tokov. V tejto lekcii demystifikujeme tento proces a načrtneme hlavné techniky, ktoré potrebujete poznať. Naučíte sa:
- Pochopiť procesy, ktoré sú základom strojového učenia na vysokej úrovni.
- Preskúmať základné koncepty, ako sú „modely“, „predikcie“ a „tréningové dáta“.
- Pochopiť procesy, ktoré stoja za strojovým učením na vysokej úrovni.
- Preskúmať základné pojmy ako „modely“, „predikcie“ a „tréningové dáta“.
## [Kvíz pred prednáškou](https://ff-quizzes.netlify.app/en/ml/)
## [Prednáškový kvíz](https://ff-quizzes.netlify.app/en/ml/)
[![ML pre začiatočníkov - Techniky strojového učenia](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML pre začiatočníkov - Techniky strojového učenia")
[![ML for beginners - Techniques of Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning")
> 🎥 Kliknite na obrázok vyššie pre krátke video, ktoré prechádza touto lekciou.
> 🎥 Kliknite na obrázok vyššie pre krátke video k tejto lekcii.
## Úvod
Na vysokej úrovni sa remeslo vytvárania procesov strojového učenia (ML) skladá z niekoľkých krokov:
Na vysokej úrovni je remeslo tvorby procesov strojového učenia (ML) zložené z niekoľkých krokov:
1. **Určte otázku**. Väčšina procesov ML začína položením otázky, na ktorú nemožno odpovedať jednoduchým podmieneným programom alebo pravidlovo založeným enginom. Tieto otázky sa často týkajú predikcií na základe zbierky dát.
2. **Zbierajte a pripravte dáta**. Aby ste mohli odpovedať na svoju otázku, potrebujete dáta. Kvalita a niekedy aj množstvo vašich dát určí, ako dobre dokážete odpovedať na svoju pôvodnú otázku. Vizualizácia dát je dôležitým aspektom tejto fázy. Táto fáza zahŕňa aj rozdelenie dát na tréningovú a testovaciu skupinu na vytvorenie modelu.
3. **Vyberte metódu tréningu**. V závislosti od vašej otázky a povahy vašich dát musíte zvoliť spôsob, akým chcete model trénovať, aby čo najlepšie odrážal vaše dáta a robil presné predikcie. Táto časť procesu ML vyžaduje špecifické odborné znalosti a často značné množstvo experimentovania.
4. **Trénujte model**. Pomocou vašich tréningových dát použijete rôzne algoritmy na trénovanie modelu, aby rozpoznal vzory v dátach. Model môže využívať interné váhy, ktoré je možné upraviť tak, aby uprednostňoval určité časti dát pred inými, aby vytvoril lepší model.
5. **Vyhodnoťte model**. Použijete dáta, ktoré model nikdy predtým nevidel (vaše testovacie dáta) z vašej zbierky, aby ste zistili, ako model funguje.
6. **Ladenie parametrov**. Na základe výkonu vášho modelu môžete proces zopakovať s použitím rôznych parametrov alebo premenných, ktoré ovládajú správanie algoritmov použitých na trénovanie modelu.
7. **Predikujte**. Použite nové vstupy na testovanie presnosti vášho modelu.
1. **Rozhodnite sa o otázke**. Väčšina procesov ML začína otázkou, na ktorú nemožno odpovedať jednoduchým podmieneným programom alebo pravidlovým motorom. Tieto otázky sa často týkajú predikcií založených na zbierke dát.
2. **Zhromaždite a pripravte dáta**. Aby ste mohli odpovedať na svoju otázku, potrebujete dáta. Kvalita a niekedy aj množstvo vašich dát určí, ako dobre dokážete zodpovedať vašu pôvodnú otázku. Vizualizácia dát je dôležitým aspektom tejto fázy. Táto fáza tiež zahŕňa rozdelenie dát na tréningovú a testovaciu skupinu na vytvorenie modelu.
3. **Vyberte metódu trénovania**. V závislosti od vašej otázky a povahy vašich dát potrebujete zvoliť, ako chcete model trénovať, aby najlepšie odrážal vaše dáta a umožnil presné predikcie. Táto časť vášho ML procesu vyžaduje špecifickú odbornosť a často aj značné množstvo experimentovania.
4. **Natrénujte model**. S použitím tréningových dát použijete rôzne algoritmy na trénovanie modelu, ktorý rozpozná vzory v dátach. Model môže využívať vnútorné váhy, ktoré možno upravovať na zvýhodnenie určitých častí dát, aby sa vytvoril lepší model.
5. **Vyhodnoťte model**. Použijete nikdy predtým nevidené dáta (vaše testovacie dáta) zo zberu údajov, aby ste zistili, ako model funguje.
6. **Ladenie parametrov**. Na základe výkonnosti vášho modelu môžete proces zopakovať s rôznymi parametrami, alebo premennými, ktoré riadia správanie algoritmov používaných na trénovanie modelu.
7. **Predikcia**. Použite nové vstupy na otestovanie presnosti vášho modelu.
## Akú otázku položiť
## Akú otázku sa pýtať
Počítače sú obzvlášť zručné v objavovaní skrytých vzorov v dátach. Táto schopnosť je veľmi užitočná pre výskumníkov, ktorí majú otázky o danej oblasti, na ktoré nemožno ľahko odpovedať vytvorením pravidlovo založeného enginu. Pri aktuárskej úlohe, napríklad, by dátový vedec mohol vytvoriť ručne vytvorené pravidlá týkajúce sa úmrtnosti fajčiarov vs. nefajčiarov.
Počítače sú obzvlášť zdatné v objavovaní skrytých vzorov v dátach. Táto schopnosť je veľmi užitočná pre výskumníkov, ktorí majú otázky o danej oblasti, na ktoré sa nedá ľahko odpovedať vytvorením pravidlového motoru založeného na podmienkach. Napríklad pri aktuárskej úlohe by dátový vedec mohol zostaviť ručne tvorené pravidlá týkajúce sa úmrtnosti fajčiarov a nefajčiarov.
Keď sa však do rovnice pridá mnoho ďalších premenných, model ML môže byť efektívnejší pri predikcii budúcich úmrtnostných mier na základe minulých zdravotných záznamov. Pozitívnejším príkladom môže byť predpovedanie počasia na mesiac apríl na danom mieste na základe dát, ktoré zahŕňajú zemepisnú šírku, dĺžku, klimatické zmeny, blízkosť k oceánu, vzory prúdenia vzduchu a ďalšie.
Keď však do rovnice zapojíte mnohé ďalšie premenné, model ML môže byť efektívnejší pri predpovedaní budúcich úmrtnostných mier na základe minulých zdravotných údajov. Veselším príkladom môže byť predpoveď počasia na mesiac apríl v určitej lokalite na základe dát, ktoré zahŕňajú zemepisnú šírku, dĺžku, klimatické zmeny, blízkosť oceánu, vzory prúdenia jet streamu a ďalšie.
✅ Táto [prezentácia](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) o modeloch počasia ponúka historický pohľad na používanie ML v analýze počasia.
✅ Táto [prezentačná prezentácia](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) o modeloch počasia ponúka historický pohľad na použitie ML v analýze počasia.
## Úlohy pred vytvorením modelu
## Úlohy pred stavbou
Predtým, než začnete vytvárať svoj model, musíte dokončiť niekoľko úloh. Aby ste mohli otestovať svoju otázku a vytvoriť hypotézu na základe predikcií modelu, musíte identifikovať a nakonfigurovať niekoľko prvkov.
Pred začatím tvorby modelu je potrebné splniť niekoľko úloh. Aby ste otestovali svoju otázku a vytvorili hypotézu na základe predikcií modelu, musíte identifikovať a nakonfigurovať niekoľko prvkov.
### Dáta
Aby ste mohli odpovedať na svoju otázku s akoukoľvek istotou, potrebujete dostatočné množstvo dát správneho typu. V tomto bode musíte urobiť dve veci:
Aby ste mohli otázku zodpovedať s nejakou istotou, potrebujete veľké množstvo správnych dát. V tomto bode treba urobiť dve veci:
- **Zbierajte dáta**. Majte na pamäti predchádzajúcu lekciu o spravodlivosti v analýze dát a zbierajte svoje dáta opatrne. Buďte si vedomí zdrojov týchto dát, akýchkoľvek inherentných predsudkov, ktoré môžu obsahovať, a dokumentujte ich pôvod.
- **Pripravte dáta**. Proces prípravy dát zahŕňa niekoľko krokov. Možno budete musieť dáta zoskupiť a normalizovať, ak pochádzajú z rôznych zdrojov. Kvalitu a množstvo dát môžete zlepšiť rôznymi metódami, ako je konverzia reťazcov na čísla (ako to robíme v [Clustering](../../5-Clustering/1-Visualize/README.md)). Môžete tiež generovať nové dáta na základe pôvodných (ako to robíme v [Classification](../../4-Classification/1-Introduction/README.md)). Dáta môžete čistiť a upravovať (ako to robíme pred lekciou [Web App](../../3-Web-App/README.md)). Nakoniec ich možno budete musieť náhodne usporiadať a premiešať, v závislosti od vašich tréningových techník.
- **Zber dát**. V duchu predchádzajúcej lekcie o spravodlivosti v analýze dát ich zozbierajte starostlivo. Buďte si vedomí zdrojov týchto dát, akýchkoľvek vrodených predsudkov a zdokumentujte ich pôvod.
- **Príprava dát**. Proces prípravy dát zahŕňa niekoľko krokov. Možno budete musieť zlúčiť dáta a normalizovať ich, ak pochádzajú z rôznych zdrojov. Kvalitu a množstvo dát môžete vylepšiť rôznymi metódami, ako je konverzia reťazcov na čísla (ako robíme v [Zhlukovaní](../../5-Clustering/1-Visualize/README.md)). Môžete tiež generovať nové dáta na základe pôvodných (ako robíme v [Klasifikácii](../../4-Classification/1-Introduction/README.md)). Dáta môžete vyčistiť a upraviť (ako budeme robiť pred lekciou [Webová aplikácia](../../3-Web-App/README.md)). Nakoniec ich možno bude potrebné náhodne zamiešať, v závislosti od vašich tréningových techník.
✅ Po zozbieraní a spracovaní vašich dát si chvíľu overte, či ich štruktúra umožní odpovedať na vašu zamýšľanú otázku. Môže sa stať, že dáta nebudú dobre fungovať pri vašej úlohe, ako zistíme v našich lekciách [Clustering](../../5-Clustering/1-Visualize/README.md)!
✅ Po zozbieraní a spracovaní dát si urobte chvíľu na posúdenie, či ich tvar umožní odpovedať na zamýšľanú otázku. Môže sa stať, že dáta nebudú vo vašej konkretnej úlohe dobre fungovať, čo zistíme v našich lekciách o [Zhlukovaní](../../5-Clustering/1-Visualize/README.md)!
### Vlastnosti a cieľ
### Prvky a cieľ
[Vlastnosť](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) je merateľná vlastnosť vašich dát. V mnohých datasetoch je vyjadrená ako nadpis stĺpca, napríklad „dátum“, „veľkosť“ alebo „farba“. Vaša premenná vlastnosti, zvyčajne reprezentovaná ako `X` v kóde, predstavuje vstupnú premennú, ktorá sa použije na trénovanie modelu.
[Prvok](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) je merateľná vlastnosť vášho dátového súboru. Vo väčšine datasetov sa vyjadruje ako názov stĺpca ako 'dátum', 'veľkosť' alebo 'farba'. Vaša premenná prvku, zvyčajne reprezentovaná ako `X` v kóde, predstavuje vstupnú premennú, ktorá sa použije na trénovanie modelu.
Cieľ je vec, ktorú sa snažíte predpovedať. Cieľ, zvyčajne reprezentovaný ako `y` v kóde, predstavuje odpoveď na otázku, ktorú sa snažíte položiť vašim dátam: v decembri, aká **farba** tekvíc bude najlacnejšia? V San Franciscu, ktoré štvrte budú mať najlepšiu cenu **nehnuteľností**? Niekedy sa cieľ označuje aj ako atribút označenia.
Cieľ je vec, ktorú sa snažíte predpovedať. Cieľ, zvyčajne reprezentovaný ako `y` v kóde, predstavuje odpoveď na otázku, ktorú kladiete svojim dátam: v decembri, aká **farba** tekvíc bude najlacnejšia? v San Franciscu, ktoré štvrte budú mať najlepšiu cenu nehnuteľností (real estate) **cenu**? Niekedy sa cieľ označuje aj ako atribút štítka (label).
### Výber premenných vlastností
### Výber premenných prvkov
🎓 **Výber vlastností a extrakcia vlastností** Ako viete, ktorú premennú si vybrať pri vytváraní modelu? Pravdepodobne prejdete procesom výberu vlastností alebo extrakcie vlastností, aby ste si vybrali správne premenné pre najvýkonnejší model. Nie sú to však rovnaké veci: „Extrakcia vlastností vytvára nové vlastnosti z funkcií pôvodných vlastností, zatiaľ čo výber vlastností vracia podmnožinu vlastností.“ ([zdroj](https://wikipedia.org/wiki/Feature_selection))
🎓 **Výber prvkov a extrakcia prvkov** Ako viete, ktorú premennú vybrať pri tvorbe modelu? Pravdepodobne prejdete proces výberu alebo extrakcie prvkov, aby ste zvolili správne premenné pre najvýkonnejší model. Nie sú to však to isté: „Extrakcia prvkov vytvára nové prvky z funkcií pôvodných prvkov, zatiaľ čo výber prvkov vracia podmnožinu prvkov.“ ([zdroj](https://wikipedia.org/wiki/Feature_selection))
### Vizualizácia dát
### Vizualizujte svoje dáta
Dôležitým aspektom nástrojov dátového vedca je schopnosť vizualizovať dáta pomocou niekoľkých vynikajúcich knižníc, ako sú Seaborn alebo MatPlotLib. Vizualizácia dát vám môže umožniť odhaliť skryté korelácie, ktoré môžete využiť. Vaše vizualizácie vám môžu tiež pomôcť odhaliť predsudky alebo nevyvážené dáta (ako zistíme v [Classification](../../4-Classification/2-Classifiers-1/README.md)).
Dôležitým aspektom nástroja dátového vedca je schopnosť vizualizovať dáta pomocou niekoľkých vynikajúcich knižníc, ako sú Seaborn alebo MatPlotLib. Vizualizácia dát vám môže umožniť objaviť skryté korelácie, ktoré môžete využiť. Vaše vizualizácie vám môžu tiež pomôcť odhaliť zaujatosti alebo nevyvážené dáta (čo zistíme v [Klasifikácii](../../4-Classification/2-Classifiers-1/README.md)).
### Rozdelenie datasetu
### Rozdeľte svoj dataset
Pred tréningom musíte rozdeliť svoj dataset na dve alebo viac častí nerovnakej veľkosti, ktoré stále dobre reprezentujú dáta.
Pred trénovaním musíte rozdeliť svoj dataset na dve alebo viac nerovnakých častí, ktoré stále dobre reprezentujú dáta.
- **Tréning**. Táto časť datasetu sa prispôsobí vášmu modelu, aby ho trénovala. Táto sada tvorí väčšinu pôvodného datasetu.
- **Testovanie**. Testovací dataset je nezávislá skupina dát, často získaná z pôvodných dát, ktorú použijete na potvrdenie výkonu vytvoreného modelu.
- **Validácia**. Validačná sada je menšia nezávislá skupina príkladov, ktorú použijete na ladenie hyperparametrov modelu alebo jeho architektúry, aby ste model zlepšili. V závislosti od veľkosti vašich dát a otázky, ktorú kladiete, možno nebudete musieť vytvoriť túto tretiu sadu (ako poznamenávame v [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md)).
- **Tréning**. Táto časť datasetu sa použije na trénovanie modelu. Táto skupina predstavuje väčšinu pôvodného datasetu.
- **Testovanie**. Testovacie dáta sú nezávislá skupina dát, často získavaná z pôvodných dát, ktorú používate na potvrdenie funkčnosti vybudovaného modelu.
- **Validácia**. Validačná skupina je menšia nezávislá skupina príkladov, ktorú používate na ladenie hyperparametrov modelu, alebo architektúry, na zlepšenie modelu. V závislosti od veľkosti vašich dát a otázky, ktorú kladiete, nemusíte potrebovať vytvoriť túto tretiu skupinu (ako si všímame v [Predikcii časových radov](../../7-TimeSeries/1-Introduction/README.md)).
## Vytváranie modelu
## Tvorba modelu
Pomocou vašich tréningových dát je vaším cieľom vytvoriť model, alebo štatistickú reprezentáciu vašich dát, pomocou rôznych algoritmov na **tréning**. Tréning modelu ho vystavuje dátam a umožňuje mu robiť predpoklady o vnímaných vzoroch, ktoré objaví, overí a prijme alebo odmietne.
Použitím svojich tréningových dát je vaším cieľom zostaviť model, alebo štatistickú reprezentáciu vašich dát, pomocou rôznych algoritmov na jeho **tréning**. Trénovanie modelu znamená vystaviť ho dátam a umožniť mu robiť predpoklady o vnímaných vzoroch, ktoré objaví, overí a prijme alebo odmietne.
### Rozhodnite sa pre metódu tréningu
### Rozhodnúť sa o metóde trénovania
V závislosti od vašej otázky a povahy vašich dát si vyberiete metódu na ich tréning. Prechádzajúc [dokumentáciou Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - ktorú používame v tomto kurze - môžete preskúmať mnoho spôsobov, ako trénovať model. V závislosti od vašich skúseností možno budete musieť vyskúšať niekoľko rôznych metód, aby ste vytvorili najlepší model. Pravdepodobne prejdete procesom, pri ktorom dátoví vedci hodnotia výkon modelu tým, že mu poskytnú nevidené dáta, kontrolujú presnosť, predsudky a ďalšie problémy znižujúce kvalitu a vyberajú najvhodnejšiu metódu tréningu pre danú úlohu.
V závislosti od vašej otázky a povahy vašich dát si vyberiete metódu na trénovanie. Prechádzaním [dokumentácie Scikit-learn](https://scikit-learn.org/stable/user_guide.html) ktorú používame v tomto kurze môžete preskúmať mnohé spôsoby trénovania modelu. V závislosti od vašich skúseností možno budete musieť vyskúšať niekoľko rôznych metód, aby ste vybudovali najlepší model. Pravdepodobne prejdete procesom, kedy dátoví vedci vyhodnocujú výkonnosť modelu na základe testovania na nevidených dátach, kontrolujú presnosť, zaujatosti a iné problémy znižujúce kvalitu a vyberajú najvhodnejšiu metódu trénovania pre danú úlohu.
### Trénujte model
### Natrénujte model
S vašimi tréningovými dátami ste pripravení „prispôsobiť“ ich na vytvorenie modelu. Všimnete si, že v mnohých knižniciach ML nájdete kód „model.fit“ - práve v tomto momente pošlete svoju premennú vlastnosti ako pole hodnôt (zvyčajne „X“) a cieľovú premennú (zvyčajne „y“).
S tréningovými dátami ste pripravení „natrénovať“ model. V mnohých knižniciach ML nájdete kód „model.fit“ práve v tomto momente posielate svoju premennú prvkov ako pole hodnôt (zvyčajne 'X') a cieľovú premennú (zvyčajne 'y').
### Vyhodnoťte model
Keď je proces tréningu dokončený (tréning veľkého modelu môže trvať mnoho iterácií alebo „epoch“), budete môcť vyhodnotiť kvalitu modelu pomocou testovacích dát na posúdenie jeho výkonu. Tieto dáta sú podmnožinou pôvodných dát, ktoré model predtým neanalyzoval. Môžete vytlačiť tabuľku metrík o kvalite vášho modelu.
Keď je proces trénovania dokončený (môže to trvať mnoho iterácií, alebo „epoch“, na trénovanie veľkého modelu), budete môcť vyhodnotiť kvalitu modelu použitím testovacích dát na zmeranie jeho výkonnosti. Tieto dáta sú podmnožinou pôvodných dát, ktoré model doposiaľ neanalyzoval. Môžete vypísať tabuľku metrík o kvalite vášho modelu.
🎓 **Prispôsobenie modelu**
🎓 **Fitting modelu**
V kontexte strojového učenia prispôsobenie modelu odkazuje na presnosť základnej funkcie modelu, keď sa pokúša analyzovať dáta, s ktorými nie je oboznámený.
V kontexte strojového učenia fitting modelu znamená presnosť základnej funkcie modelu pri analýze dát, s ktorými nie je oboznámený.
🎓 **Nedostatočné prispôsobenie** a **nadmerné prispôsobenie** sú bežné problémy, ktoré zhoršujú kvalitu modelu, keď model buď nevyhovuje dostatočne dobre, alebo príliš dobre. To spôsobuje, že model robí predikcie buď príliš úzko alebo príliš voľne spojené s jeho tréningovými dátami. Nadmerne prispôsobený model predpovedá tréningové dáta príliš dobre, pretože sa naučil detaily a šum dát príliš dobre. Nedostatočne prispôsobený model nie je presný, pretože nedokáže presne analyzovať ani svoje tréningové dáta, ani dáta, ktoré ešte „nevidel“.
🎓 **Podtrénovanie** a **pretrénovanie** sú bežné problémy, ktoré znižujú kvalitu modelu, pretože model sa trénuje buď nedostatočne alebo príliš dôkladne. To spôsobuje, že model robí predikcie buď príliš presne zhodné alebo príliš voľné v porovnaní s tréningovými dátami. Pretrénovaný model predikuje tréningové dáta príliš dobre, pretože sa naučil detaily a šum v dátach príliš dôkladne. Podtrénovaný model nie je presný, pretože nedokáže ani presne analyzovať svoje tréningové dáta ani dáta, ktoré ešte nevidel.
![nadmerné prispôsobenie modelu](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png)
![overfitting model](../../../../translated_images/sk/overfitting.1c132d92bfd93cb6.webp)
> Infografika od [Jen Looper](https://twitter.com/jenlooper)
## Ladenie parametrov
Keď je váš počiatočný tréning dokončený, pozorujte kvalitu modelu a zvážte jeho zlepšenie úpravou jeho „hyperparametrov“. Prečítajte si viac o tomto procese [v dokumentácii](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
Keď je vaše počiatočné trénovanie dokončené, pozorujte kvalitu modelu a zvážte jeho zlepšenie úpravou „hyperparametrov“. Viac o tomto procese si môžete prečítať [v dokumentácii](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
## Predikcia
Toto je moment, keď môžete použiť úplne nové dáta na testovanie presnosti vášho modelu. V „aplikovanom“ nastavení ML, kde vytvárate webové aktíva na použitie modelu v produkcii, tento proces môže zahŕňať zhromažďovanie vstupov od používateľa (napríklad stlačenie tlačidla), aby sa nastavila premenná a poslala modelu na inferenciu alebo vyhodnotenie.
Toto je moment, kedy môžete použiť úplne nové dáta na otestovanie presnosti vášho modelu. V „aplikovanom“ prostredí ML, kde budujete webové zdroje na použitie modelu v produkcii, môže tento proces zahŕňať získavanie vstupov od používateľa (napríklad stlačením tlačidla) na nastavenie premennej a odoslanie jej do modelu na vyvodenie záveru, alebo vyhodnotenie.
V týchto lekciách objavíte, ako používať tieto kroky na prípravu, vytváranie, testovanie, vyhodnocovanie a predikciu - všetky gestá dátového vedca a viac, ako postupujete na svojej ceste stať sa „full stack“ ML inžinierom.
V týchto lekciách objavíte, ako používať tieto kroky na prípravu, tvorbu, testovanie, vyhodnocovanie a predikciu všetky gestá dátového vedca a viac, ako napredujete na svojej ceste stať sa „full stack“ ML inžinierom.
---
## 🚀Výzva
Nakreslite diagram toku, ktorý odráža kroky praktika ML. Kde sa momentálne vidíte v procese? Kde predpokladáte, že narazíte na ťažkosti? Čo sa vám zdá jednoduché?
Nakreslite diagram znázorňujúci kroky praktikanta ML. Kde sa v procese práve vidíte? Kde predpokladáte, že budete mať ťažkosti? Čo sa vám zdá jednoduché?
## [Kvíz po prednáške](https://ff-quizzes.netlify.app/en/ml/)
## [Poprednáškový kvíz](https://ff-quizzes.netlify.app/en/ml/)
## Prehľad a samostatné štúdium
Vyhľadajte online rozhovory s dátovými vedcami, ktorí diskutujú o svojej každodennej práci. Tu je [jeden](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
Vyhľadajte si online rozhovory s dátovými vedcami, ktorí rozprávajú o svojej každodennej práci. Tu je [jeden](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
## Zadanie
[Urobte rozhovor s dátovým vedcom](assignment.md)
[Rozhovor s dátovým vedcom](assignment.md)
---
**Upozornenie**:
Tento dokument bol preložený pomocou služby AI prekladu [Co-op Translator](https://github.com/Azure/co-op-translator). Hoci sa snažíme o presnosť, prosím, berte na vedomie, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho pôvodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za akékoľvek nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Zrieknutie sa zodpovednosti**:
Tento dokument bol preložený pomocou AI prekladateľskej služby [Co-op Translator](https://github.com/Azure/co-op-translator). Aj keď sa snažíme o presnosť, berte prosím na vedomie, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho rodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nenesieme zodpovednosť za akékoľvek nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,113 +1,113 @@
# Vytvorte regresný model pomocou Scikit-learn: regresia štyrmi spôsobmi
# Vytvorte regresný model pomocou Scikit-learn: štyri spôsoby regresie
## Poznámka pre začiatočníkov
Lineárna regresia sa používa, keď chceme predpovedať **číselnú hodnotu** (napríklad cenu domu, teplotu alebo predaj).
Funguje tak, že nájde priamku, ktorá najlepšie reprezentuje vzťah medzi vstupnými vlastnosťami a výstupom.
Funguje tým, že nájde priamku, ktorá najlepšie reprezentuje vzťah medzi vstupnými vlastnosťami a výstupom.
V tejto lekcii sa zameriame na pochopenie konceptu predtým, než preskúmame pokročilejšie regresné techniky.
V tejto lekcii sa zameriavame na pochopenie konceptu pred tým, ako preskúmame pokročilejšie techniky regresie.
![Lineárna verzus polynomiálna regresia infografika](../../../../translated_images/sk/linear-polynomial.5523c7cb6576ccab.webp)
> Infografika od [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [Kvíz pred prednáškou](https://ff-quizzes.netlify.app/en/ml/)
## [Prednáškový kvíz](https://ff-quizzes.netlify.app/en/ml/)
> ### [Táto lekcia je dostupná aj v R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### Úvod
### Úvod
Doteraz ste preskúmali, čo je regresia, na vzorových dátach získaných z datasetu s cenami tekvíc, ktoré budeme používať počas celej tejto lekcie. Tiež ste ich vizualizovali pomocou Matplotlib.
Doteraz ste preskúmali, čo je regresia na vzorke dát zo súboru údajov o cenách tekvíc, ktorý budeme používať počas tejto lekcie. Tiež ste ich vizualizovali pomocou Matplotlib.
Teraz ste pripravení ponoriť sa hlbšie do regresie v strojovom učení. Kým vizualizácia umožňuje lepšie pochopiť dáta, skutočná sila strojového učenia spočíva v _trénovaní modelov_. Modely sa trénujú na historických dátach, aby automaticky zachytili závislosti v dátach, a umožňujú predpovedať výsledky pre nové dáta, ktoré model predtým nevidel.
Teraz ste pripravení ponoriť sa hlbšie do regresie pre strojové učenie. Kým vizualizácia vám umožní pochopiť dáta, skutočná sila strojového učenia spočíva v _trénovaní modelov_. Modely sa trénujú na historických údajoch, aby automaticky zachytili závislosti v dátach, a umožňujú vám predpovedať výsledky pre nové dáta, ktoré model ešte nevidel.
V tejto lekcii sa naučíte viac o dvoch typoch regresie: _základná lineárna regresia_ a _polynomiálna regresia_, spolu s niektorou matematikou, ktorá stojí za týmito technikami. Tieto modely nám umožnia predpovedať ceny tekvíc v závislosti od rôznych vstupných dát.
V tejto lekcii sa dozviete viac o dvoch typoch regresie: _základná lineárna regresia_ a _polynomiálna regresia_, spolu s niektorou matematikou, ktorá stojí za týmito technikami. Tieto modely nám umožnia predpovedať ceny tekvíc v závislosti od rôznych vstupných dát.
[![ML pre začiatočníkov - Pochopenie lineárnej regresie](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML pre začiatočníkov - Pochopenie lineárnej regresie")
> 🎥 Kliknite na obrázok vyššie pre krátky video prehľad lineárnej regresie.
> V celom tomto kurze predpokladáme minimálne matematické znalosti a snažíme sa sprístupniť učenie študentom z iných odborov, preto sledujte poznámky, 🧮 odkazy, diagramy a iné nástroje na uľahčenie pochopenia.
> Počas celého tohto kurzu predpokladáme minimálne matematické znalosti a snažíme sa ich sprístupniť študentom z iných oblastí, preto sledujte poznámky, 🧮 upozornenia, diagramy a ďalšie učebné pomôcky, ktoré pomôžu s porozumením.
### Predpoklady
Teraz by ste mali byť oboznámení so štruktúrou dát o tekviciach, ktoré skúmame. Nájdete ich prednačítané a predčistené v súbore _notebook.ipynb_ tejto lekcie. V súbore je cena tekvíc zobrazená na jeden košík. Uistite sa, že viete spustiť tieto notebooky v kerneloch Visual Studio Code.
Teraz by ste už mali byť oboznámení so štruktúrou údajov o tekviciach, ktoré skúmame. Môžete ich nájsť prednačítané a predspracované v súbore _notebook.ipynb_ tejto lekcie. V súbore je cena tekvice zobrazená za každý korc (bushel) v novom dátovom rámci. Uistite sa, že tieto notebooky môžete spustiť v prostredí Visual Studio Code.
### Príprava
Pripomíname, že tieto dáta načítavate preto, aby ste im mohli klásť otázky.
Ako pripomienku, načítavate tieto dáta, aby ste mohli klásť otázky.
- Kedy je najlepší čas kúpiť tekvice?
- Akú cenu môžem očakávať za balík minitekvíc?
- Mali by ste ich kupovať v polovičných košíkoch alebo v 1 1/9 košíkových krabiciach?
Poďme sa ďalej ponoriť do týchto dát.
- Kedy je najlepší čas na kúpu tekvíc?
- Akú cenu môžem očakávať za balík mini tekvíc?
- Mali by som ich kupovať v polkorcových košíkoch alebo v krabici s objemom 1 1/9 korca?
Poďme sa ďalej venovať týmto dátam.
V predchádzajúcej lekcii ste vytvorili Pandas dátový rámec a naplnili ho časťou pôvodného datasetu, štandardizujúc ceny podľa košíka. Týmto spôsobom ste však získali iba asi 400 dátových bodov a len za jesenné mesiace.
V predchádzajúcej lekcii ste vytvorili Pandas dátový rámec a naplnili ho časťou pôvodného datasetu, pričom ste štandardizovali ceny podľa korca. Týmto spôsobom ste však získali len asi 400 dátových bodov a iba za jesenné mesiace.
Pozrite sa na dáta, ktoré sme prednačítali v notebooku k tejto lekcii. Dáta sú načítané a zobrazený je počiatočný bodový graf podľa mesiaca. Možno získame viac detailov o povahe dát ich ďalším čistením.
Pozrite sa na údaje, ktoré sme prednačítali v sprevádzajúcom notebooku tejto lekcie. Dáta sú prednačítané a je vytvorený úvodný bodový graf, ktorý zobrazuje údaje podľa mesiacov. Možno dokážeme získať viac detailov o povahe dát ich dôkladnejším vyčistením.
## Lineárna regresná priamka
## Priama regresná čiara
Ako ste sa naučili v Lekcii 1, cieľom cvičenia lineárnej regresie je byť schopný vyrenderovať priamku, ktorá:
Ako ste sa naučili v lekcii 1, cieľom lineárnej regresie je nakresliť priamku, ktorá:
- **Ukáže vzťahy premenných**. Zobrazí vzťah medzi premennými.
- **Umožní predpovede**. Presne predpovedá, kde by sa nový dátový bod mohol nachádzať vzhľadom na túto priamku.
- **Zobrazuje vzťahy medzi premennými**. Ukazuje vzťah medzi premennými
- **Predpovedá**. Presne predpovedá, kde by sa nový dátový bod mohol nachádzať vzhľadom na túto priamku.
Typickým prístupom **Metódy najmenších štvorcov** je nakresliť tento typ priamky. Termín „Najmenšie štvorce“ sa vzťahuje na proces minimalizácie celkovej chyby v našom modeli. Pre každý dátový bod meriame zvislú vzdialenosť (nazývanú reziduál) medzi skutočným bodom a našou regresnou priamkou.
Bežne sa na toto používa **Least-Squares Regression (regresia metódou najmenších štvorcov)**. Výraz "Least-Squares" sa vzťahuje na proces minimalizácie celkovej chyby v našom modeli. Pre každý dátový bod meriame vertikálnu vzdialenosť (nazývanú reziduál) medzi skutočným bodom a našou regresnou priamkou.
Tieto vzdialenosti umocňujeme na druhú z dvoch hlavných dôvodov:
Tieto vzdialenosti umocníme na druhú moc z dvoch hlavných dôvodov:
1. **Veľkosť nad smerom:** Chceme, aby chyba -5 bola braná rovnako ako chyba +5. Umocnením na druhú sa všetky hodnoty stanú kladnými.
1. **Veľkosť nad smerom:** Chceme, aby chyba -5 bola rovnako vážená ako chyba +5. Umocnením na druhú dostaneme všetky hodnoty kladné.
2. **Postihovanie odľahlých hodnôt:** Umocnenie na druhú dáva väčšiu váhu väčším chybám, nútiac priamku zostať bližšie k bodom, ktoré sú ďaleko.
2. **Penalizácia odľahlých hodnôt:** Umocnenie na druhú dáva väčšiu váhu väčším chybám a núti čiaru byť bližšie k bodom, ktoré sú ďaleko.
Potom tieto štvorcové hodnoty sčítame. Naším cieľom je nájsť konkrétnu priamku, kde je tento súčet najmenší (najnižšia možná hodnota) — odtiaľ pochádza názov „Najmenšie štvorce“.
Tieto umocnené hodnoty potom sčítame. Naším cieľom je nájsť konkrétnu priamku, pre ktorú je tento súčet najmenej možný — odtiaľ názov „Least-Squares“ (najmenších štvorcov).
> **🧮 Ukáž mi matematiku**
> **🧮 Ukážte matematiku**
>
> Táto priamka, nazývaná _priamkou najlepšieho prispôsobenia_, môže byť vyjadrená [rovnicou](https://en.wikipedia.org/wiki/Simple_linear_regression):
> Táto čiara, nazývaná _čiara najlepšieho prispôsobenia_ môže byť vyjadrená [rovnicou](https://en.wikipedia.org/wiki/Simple_linear_regression):
>
> ```
> Y = a + bX
> ```
>
> `X` je 'vysvetľujúca premenná'. `Y` je 'závislá premenná'. Sklon priamky je `b` a `a` je y-priesečník, teda hodnota `Y` keď `X = 0`.
> `X` je 'vysvetľujúca premenná'. `Y` je 'závislá premenná'. Sklon čiary je `b` a `a` je priesečník s osou y, ktorý udáva hodnotu `Y`, keď `X = 0`.
>
>![vypočítajte sklon](../../../../translated_images/sk/slope.f3c9d5910ddbfcf9.webp)
>
> Najskôr vypočítajte sklon `b`. Infografika od [Jen Looper](https://twitter.com/jenlooper)
>
> Inými slovami, ak sa vraciame k pôvodnej otázke nášho datasetu o tekviciach: „predpovedať cenu tekvice na košík podľa mesiaca“, `X` by odkazovalo na cenu a `Y` by predstavovalo mesiac predaja.
> Inými slovami, a vzhľadom na pôvodnú otázku našich údajov o tekviciach: „predpovedať cenu tekvice za bushel podľa mesiaca“, `X` by označoval cenu a `Y` by označoval mesiac predaja.
>
>![doplnte rovnicu](../../../../translated_images/sk/calculation.a209813050a1ddb1.webp)
>
> Vypočítajte hodnotu Y. Ak platíte okolo 4 dolárov, musí to byť apríl! Infografika od [Jen Looper](https://twitter.com/jenlooper)
> Vypočítajte hodnotu y. Ak platíte okolo 4 dolárov, musí to byť apríl! Infografika od [Jen Looper](https://twitter.com/jenlooper)
>
> Matematika, ktorá vypočíta priamku, musí ukázať sklon priamky, ktorý závisí aj od priesečníka, čiže kde sa nachádza `Y`, keď `X = 0`.
> Matematika, ktorá vypočítava čiaru, musí demonštrovať sklon priamky, ktorý tiež závisí od priesečníka, teda kde je `Y` umiestnené, keď `X = 0`.
>
> Metódu výpočtu týchto hodnôt si môžete pozrieť na stránke [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Navštívte tiež [tento kalkulátor najmenších štvorcov](https://www.mathsisfun.com/data/least-squares-calculator.html) a sledujte, ako hodnoty čísel ovplyvňujú priamku.
> Metódu výpočtu týchto hodnôt môžete pozorovať na stránke [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Navštívte tiež [tento kalkulátor najmenších štvorcov](https://www.mathsisfun.com/data/least-squares-calculator.html) a pozrite, ako hodnoty čísel ovplyvňujú čiaru.
## Korelácia
Je potrebné pochopiť ešte jeden pojem — **korelačný koeficient** medzi danými premennými X a Y. Pomocou bodového grafu môžete tento koeficient rýchlo vizualizovať. Graf, kde sú body poukladané do peknej priamky, má vysokú koreláciu, no graf, kde sú body rozptýlené všade medzi X a Y, má nízku koreláciu.
Ešte jeden termín, ktorý treba pochopiť, je **Korelačný koeficient** medzi danými premennými X a Y. Pomocou bodového grafu môžete rýchlo vizualizovať tento koeficient. Graf, v ktorom sú body usporiadané v peknej priamke, má vysokú koreláciu, zatiaľ čo bodový graf s bodmi roztrúsenými všade medzi X a Y má nízku koreláciu.
Dobrý lineárny regresný model bude mať vysoký (bližší k 1 než k 0) korelačný koeficient pomocou metódy najmenších štvorcov s regresnou priamkou.
Dobrý lineárny regresný model bude ten, ktorého Korelačný koeficient je vysoký (bližšie k 1 než k 0) pri použití metódy Least-Squares Regression s regresnou priamkou.
✅ Spustite notebook priložený k tejto lekcii a pozrite si bodový graf Mesiac voči cene. Má dátový vzťah medzi Mesiacom a cenou pri predaji tekvíc vysokú alebo nízku koreláciu podľa vašej vizuálnej interpretácie grafu? Zmení sa to, ak namiesto `Mesiaca` použijete jemnejšie meradlo, napríklad *deň v roku* (t.j. počet dní od začiatku roka)?
✅ Spustite notebook sprevádzajúci túto lekciu a pozrite sa na bodový graf Mesiac verzus Cena. Zdá sa vám, že údaje o vzťahu Mesiac k Cene predaja tekvíc majú vysokú alebo nízku koreláciu podľa vašej vizuálnej interpretácie bodového grafu? Zmení sa to, ak použijete detailnejšie meranie namiesto `Mesiac`, napr. *deň v roku* (napríklad počet dní od začiatku roka)?
V nižšie uvedenom kóde predpokladáme, že sme dáta očistili a získali dátový rámec s názvom `new_pumpkins`, podobný nasledujúcemu:
V nasledujúcom kóde predpokladáme, že sme dáta vyčistili a získali dátový rámec nazvaný `new_pumpkins`, podobný nasledujúcemu:
ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price
ID | Mesiac | DeňVRoku | Odroda | Mesto | Balenie | Nízka cena | Vysoká cena | Cena
---|-------|-----------|---------|------|---------|-----------|------------|-------
70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545
74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
70 | 9 | 267 | TYP NA KOLÁČ | BALTIMORE | kartóny 1 1/9 korca | 15.0 | 15.0 | 13.636364
71 | 9 | 267 | TYP NA KOLÁČ | BALTIMORE | kartóny 1 1/9 korca | 18.0 | 18.0 | 16.363636
72 | 10 | 274 | TYP NA KOLÁČ | BALTIMORE | kartóny 1 1/9 korca | 18.0 | 18.0 | 16.363636
73 | 10 | 274 | TYP NA KOLÁČ | BALTIMORE | kartóny 1 1/9 korca | 17.0 | 17.0 | 15.454545
74 | 10 | 281 | TYP NA KOLÁČ | BALTIMORE | kartóny 1 1/9 korca | 15.0 | 15.0 | 13.636364
> Kód na čistenie dát je dostupný v [`notebook.ipynb`](notebook.ipynb). Prešli sme rovnakými krokmi čistenia ako v predchádzajúcej lekcii a vypočítali sme stĺpec `DayOfYear` podľa nasledujúceho výrazu:
> Kód na vyčistenie dát je dostupný v [`notebook.ipynb`](notebook.ipynb). Použili sme rovnaké čistiace kroky ako v predchádzajúcej lekcii a vypočítali sme stĺpec `DayOfYear` pomocou nasledujúceho výrazu:
```python
day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)
```
Teraz, keď máte pochopenie matematiky za lineárnou regresiou, vytvorme regresný model, aby sme zistili, či vieme predpovedať, ktorý balík tekvíc bude mať najlepšie ceny. Niekto, kto kupuje tekvice na jesennú výzdobu, môže potrebovať tieto informácie na optimalizáciu svojich nákupov.
Teraz keď máte pochopenie matematiky za lineárnou regresiou, vytvorme regresný model, aby sme zistili, či môžeme predpovedať, ktoré balenie tekvíc bude mať najlepšie ceny tekvíc. Niekto, kto kupuje tekvice na jesennú tekvicovú výzdobu, by mohol túto informáciu využiť na optimalizáciu svojich nákupov balení tekvíc.
## Hľadanie korelácie
@ -115,22 +115,22 @@ Teraz, keď máte pochopenie matematiky za lineárnou regresiou, vytvorme regres
> 🎥 Kliknite na obrázok vyššie pre krátky video prehľad korelácie.
Z predchádzajúcej lekcie ste pravdepodobne videli, že priemerná cena za jednotlivé mesiace vyzerá takto:
Z predchádzajúcej lekcie ste pravdepodobne videli, že priemerná cena za rôzne mesiace vyzerá takto:
<img alt="Priemerná cena podľa mesiaca" src="../../../../translated_images/sk/barchart.a833ea9194346d76.webp" width="50%"/>
To naznačuje, že by mala existovať určitá korelácia, a môžeme skúsiť natrénovať lineárny regresný model na predpovedanie vzťahu medzi `Month` a `Price`, alebo medzi `DayOfYear` a `Price`. Tu je bodový graf znázorňujúci druhý vzťah:
To naznačuje, že by tu mala byť nejaká korelácia, a môžeme skúsiť vytrénovať lineárny regresný model, ktorý predpovie vzťah medzi `Mesiac` a `Cena` alebo medzi `DeňVRoku` a `Cena`. Tu je bodový graf, ktorý zobrazuje druhý vzťah:
<img alt="Bodový graf Cena vs. Deň v roku" src="../../../../translated_images/sk/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
<img alt="Bodový graf Cena verzus Deň v roku" src="../../../../translated_images/sk/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
Pozrime sa, či existuje korelácia pomocou funkcie `corr`:
Pozrime sa, či tu existuje korelácia pomocou funkcie `corr`:
```python
print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
```
Zdá sa, že korelácia je dosť malá, -0.15 podľa `Month` a -0.17 podľa `DayOfYear`, ale môže tam byť iný dôležitý vzťah. Vyzerá to, že existujú rôzne skupiny cien zodpovedajúce rôznym odrodám tekvíc. Aby sme túto hypotézu potvrdili, zobrazme každú kategóriu tekvíc inou farbou. Odovzdaním parametra `ax` funkcii `scatter` môžeme nakresliť všetky body na rovnakom grafe:
Zdá sa, že korelácia je pomerne malá, -0,15 podľa `Mesiac` a -0,17 podľa `DeňVRoku`, ale mohla by tu byť ďalšia dôležitá závislosť. Zdá sa, že existujú rôzne skupiny cien zodpovedajúce rôznym odrodám tekvíc. Aby sme túto hypotézu potvrdili, nakreslime každú kategóriu tekvíc použitím inej farby. Pri odovzdaní parametra `ax` do funkcie `scatter` môžeme všetky body vykresliť do rovnakého grafu:
```python
ax=None
@ -140,34 +140,34 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()):
ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var)
```
<img alt="Bodový graf Cena vs. Deň v roku so zvýraznením farby" src="../../../../translated_images/sk/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
<img alt="Bodový graf Cena verzus Deň v roku s farbami" src="../../../../translated_images/sk/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
Naše vyšetrovanie naznačuje, že odroda má väčší vplyv na celkovú cenu než skutočný dátum predaja. Vidieť to môžeme aj na stĺpcovom grafe:
Náš výskum naznačuje, že druh tekvice má väčší vplyv na celkovú cenu než samotné dátum predaja. Vidíme to aj na stĺpcovom grafe:
```python
new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
```
<img alt="Stĺpcový graf cena vs odroda" src="../../../../translated_images/sk/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
<img alt="Stĺpcový graf cena podľa druhu" src="../../../../translated_images/sk/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
Zamerajme sa teraz len na jednu odrodu tekvíc, 'pie type', a pozrime sa, aký vplyv má dátum na cenu:
Zamerajme sa na moment len na jednu odrodu tekvice, 'pie type', a pozrime sa na vplyv dátumu na cenu:
```python
pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
pie_pumpkins.plot.scatter('DayOfYear','Price')
```
<img alt="Bodový graf Cena vs. Deň v roku pre odrodu Pie Type" src="../../../../translated_images/sk/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
<img alt="Bodový graf Cena verzus Deň v roku" src="../../../../translated_images/sk/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
Ak teraz vypočítame koreláciu medzi `Price` a `DayOfYear` pomocou funkcie `corr`, dostaneme niečo okolo `-0.27` — čo znamená, že trénovanie predikčného modelu dáva zmysel.
Ak teraz vypočítame koreláciu medzi `Cena` a `DeňVRoku` pomocou funkcie `corr`, dostaneme hodnotu približne `-0,27` — čo znamená, že trénovať predikčný model dáva zmysel.
> Pred trénovaním lineárneho regresného modelu je dôležité uistiť sa, že naše dáta sú čisté. Lineárna regresia nefunguje dobre s chýbajúcimi hodnotami, preto je rozumné odstrániť všetky prázdne bunky:
> Pred trénovaním lineárneho regresného modelu je dôležité sa uistiť, že naše dáta sú čisté. Lineárna regresia nefunguje dobre s chýbajúcimi hodnotami, preto je dobré odstrániť všetky prázdne bunky:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
Iný prístup je vyplniť prázdne hodnoty priemernými hodnotami zo zodpovedajúceho stĺpca.
Iným prístupom by bolo vyplniť tieto prázdne hodnoty priemernými hodnotami z príslušného stĺpca.
## Jednoduchá lineárna regresia
@ -183,31 +183,31 @@ from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
Začneme oddelením vstupných hodnôt (vlastností) a očakávaného výstupu (štítku) do samostatných numpy polí:
Začneme oddelením vstupných hodnôt (vlastností) a očakávaného výstupu (označenia) do samostatných numpy polí:
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> Všimnite si, že sme museli vykonať `reshape` na vstupných dátach, aby ich lineárna regresia správne rozpoznala. Lineárna regresia očakáva 2D pole ako vstup, kde každý riadok poľa zodpovedá vektoru vstupných vlastností. V našom prípade, keďže máme len jeden vstup, potrebujeme pole tvaru N&times;1, kde N je veľkosť datasetu.
> Upozorňujeme, že sme museli upraviť tvar vstupných údajov pomocou `reshape`, aby ich balík Linear Regression správne pochopil. Lineárna regresia očakáva vstup vo forme 2D poľa, kde každý riadok predstavuje vektor vstupných vlastností. V našom prípade, keďže máme len jeden vstup, potrebujeme pole tvaru N&times;1, kde N je veľkosť datasetu.
Potom musíme rozdeliť dáta na trénovaciu a testovaciu množinu, aby sme mohli model po trénovaní overiť:
Ďalej musíme rozdeliť dáta na trénovaciu a testovaciu množinu, aby sme po tréningu mohli overiť náš model:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
Nakoniec samotné trénovanie lineárneho regresného modelu trvá len dve riadky kódu. Definujeme objekt `LinearRegression` a fitting vykonáme pomocou metódy `fit`:
Nakoniec samotné trénovanie lineárneho regresného modelu zaberie len dva riadky kódu. Definujeme objekt `LinearRegression` a prispôsobíme ho našim dátam pomocou metódy `fit`:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
Objekt `LinearRegression` po príkaze `fit` obsahuje všetky koeficienty regresie, ku ktorým je možné pristúpiť pomocou vlastnosti `.coef_`. V našom prípade je tam len jeden koeficient, ktorý by mal byť okolo hodnoty `-0.017`. Znamená to, že ceny sa zdajú s časom mierne znižovať, ale nie príliš, približne o 2 centy za deň. Môžeme tiež pristúpiť k priesečníku regresie s osou Y pomocou `lin_reg.intercept_` - v našom prípade to bude okolo `21`, čo označuje cenu na začiatku roka.
Objekt `LinearRegression` po natrénovaní obsahuje všetky koeficienty regresie, ku ktorým môžeme pristupovať pomocou vlastnosti `.coef_`. V našom prípade je len jeden koeficient, ktorý by mal byť približne `-0.017`. To znamená, že ceny sa zdajú postupne trochu znižovať s časom, ale nie príliš, asi o 2 centy za deň. Môžeme tiež získať priesečník regresie s osou Y pomocou `lin_reg.intercept_` v našom prípade to bude približne `21`, čo naznačuje cenu na začiatku roka.
Aby sme videli, aká je presnosť nášho modelu, môžeme predikovať ceny na testovacej sade dát a potom zmerať, ako blízko sú naše predikcie očakávaným hodnotám. To je možné urobiť pomocou metriky root mean square error (RMSE), čo je odmocnina z priemeru všetkých štvorcových rozdielov medzi očakávanými a predikovanými hodnotami.
Aby sme videli, aká je naša modelová presnosť, môžeme predpovedať ceny na testovacej množine a potom zmerať, ako sú naše predpovede blízke očakávaným hodnotám. To môžeme urobiť pomocou metriky strednej kvadratickej chyby (RMSE), ktorá je odmocninou strednej hodnoty všetkých štvorcov rozdielov medzi očakávanou a predpovedanou hodnotou.
```python
pred = lin_reg.predict(X_test)
@ -215,37 +215,38 @@ pred = lin_reg.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
```
Naša chyba sa zdá byť okolo 2 bodov, čo je približne 17%. Nie príliš dobre. Ďalším ukazovateľom kvality modelu je **koeficient determinácie**, ktorý je možné získať takto:
Naša chyba sa zdá byť okolo 2 bodov, čo je približne 17%. Nie veľmi dobré. Ďalším ukazovateľom kvality modelu je **koeficient determinácie**, ktorý môžeme získať takto:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
Ak je hodnota 0, znamená to, že model nezohľadňuje vstupné dáta a správa sa ako *najhorší lineárny prediktor*, čo je jednoducho priemerná hodnota výsledku. Hodnota 1 znamená, že dokážeme dokonale predpovedať všetky očakávané výstupy. V našom prípade je koeficient okolo 0,06, čo je pomerne nízke.
Ak je hodnota 0, znamená to, že model nezohľadňuje vstupné údaje a správa sa ako *najhorší lineárny prediktor*, ktorým je jednoducho priemerná hodnota výsledku. Hodnota 1 znamená, že môžeme perfektne predpovedať všetky očakávané výstupy. V našom prípade je koeficient okolo 0,06, čo je pomerne nízke.
Môžeme tiež zobraziť testovacie dáta spolu s regresnou čiarou, aby sme lepšie videli, ako regresia funguje v našom prípade:
Môžeme tiež vykresliť testovacie dáta spolu s regresnou čiarou, aby sme lepšie videli, ako regresia funguje v našom prípade:
```python
plt.scatter(X_test,y_test)
plt.plot(X_test,pred)
```
<img alt="Lineárna regresia" src="../../../../translated_images/sk/linear-results.f7c3552c85b0ed1c.webp" width="50%" />
<img alt="Linear regression" src="../../../../translated_images/sk/linear-results.f7c3552c85b0ed1c.webp" width="50%" />
## Polynomická regresia
Ďalším typom lineárnej regresie je polynomická regresia. Zatiaľ čo niekedy existuje lineárny vzťah medzi premennými - čím väčšia tekvica objemom, tým vyššia cena - niekedy tieto vzťahy nemožno zobraziť ako rovinu alebo priamku.
Ďalším typom lineárnej regresie je polynomická regresia. Zatiaľ čo niekedy existuje lineárny vzťah medzi premennými — čím väčšia tekvica objemom, tým vyššia cena — niekedy tieto vzťahy nemožno zobraziť rovinnou alebo priamkou.
✅ Tu sú [niektoré ďalšie príklady](https://online.stat.psu.edu/stat501/lesson/9/9.8) dát, ktoré by mohli využiť polynomickú regresiu
✅ Tu je [niekoľko ďalších príkladov](https://online.stat.psu.edu/stat501/lesson/9/9.8) údajov, ktoré by mohli využiť polynomickú regresiu.
Pozrite sa opäť na vzťah medzi Dátumom a Cenou. Zdá sa, že by tento rozptylový graf mal byť nevyhnutne analyzovaný priamkou? Nemôžu ceny kolísať? V takom prípade môžete skúsiť polynomickú regresiu.
Pozrite sa znova na vzťah medzi Dátumom a Cenou. Zdá sa, že tento rozptylový graf by určite mal byť analyzovaný priamkou? Nemôžu ceny kolísať? V takom prípade môžete skúsiť polynomickú regresiu.
✅ Polynómy sú matematické výrazy, ktoré môžu pozostávať z jednej alebo viacerých premenných a koeficientov
✅ Polynómy sú matematické výrazy, ktoré môžu obsahovať jednu alebo viac premenných a koeficientov.
Polynomická regresia vytvára zakrivenú čiaru, aby sa lepšie prispôsobila nelineárnym dátam. V našom prípade, ak zahrnieme do vstupných dát štvorcovú premennú `DayOfYear`, mali by sme byť schopní prispôsobiť naše dáta parabolickou krivkou, ktorá bude mať minimum v určitom bode počas roka.
Polynomická regresia vytvára zakrivenú čiaru, aby lepšie vystihla nelineárne údaje. V našom prípade, ak do vstupných údajov zahrnieme aj druhú mocninu `DayOfYear`, mali by sme byť schopní prispôsobiť naše dáta parabolickej krivke, ktorá bude mať minimum v určitom bode v rámci roka.
Scikit-learn obsahuje užitočné [API pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) na spojenie rôznych krokov spracovania dát. **Pipeline** je reťazec **estimatorov**. V našom prípade vytvoríme pipeline, ktorá najprv pridá polynomické príznaky do nášho modelu a potom vytrénuje regresiu:
Scikit-learn obsahuje užitočné [API pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline), ktoré umožňuje kombinovať rôzne kroky spracovania dát. **Pipeline** je reťazec **estimatorov**. V našom prípade vytvoríme pipeline, ktorá najskôr pridá polynomické príznaky do modelu a potom natrénuje regresiu:
```python
from sklearn.preprocessing import PolynomialFeatures
@ -255,61 +256,83 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
```
Použitie `PolynomialFeatures(2)` znamená, že zahrnieme všetky polynómy druhého stupňa zo vstupných dát. V našom prípade to bude len `DayOfYear`<sup>2</sup>, ale ak by sme mali dve vstupné premenné X a Y, pridalo by to X<sup>2</sup>, XY a Y<sup>2</sup>. Môžeme použiť aj vyššie stupne polynómov, ak chceme.
Pipeliny môžeme použiť rovnako ako pôvodný objekt `LinearRegression`, t. j. môžeme `fit`-nuť pipeline a potom použiť `predict` na získanie predpovedí:
```python
pred = pipeline.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
Na vykreslenie hladkej aproximačnej krivky použijeme `np.linspace` na vytvorenie rovnomerného rozsahu vstupných hodnôt, namiesto priameho vykreslenia na neusporiadanej testovacej množine (čo by viedlo k zygzakovej čiare):
Použitie `PolynomialFeatures(2)` znamená, že zahrnieme všetky polynómy druhého stupňa z vstupných dát. V našom prípade to bude iba `DayOfYear`<sup>2</sup>, ale ak máme dve vstupné premenné X a Y, pridajú sa X<sup>2</sup>, XY a Y<sup>2</sup>. Môžeme tiež použiť polynómy vyššieho stupňa, ak chceme.
```python
X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)
y_range = pipeline.predict(X_range)
Pipeline môžeme používať rovnako ako pôvodný objekt `LinearRegression`, t.j. môžeme `fit` pipeline a potom použiť `predict` na získanie výsledkov predpovede. Tu je graf zobrazujúci testovacie dáta a aproximačnú krivku:
plt.scatter(X_test, y_test)
plt.plot(X_range, y_range)
```
Tu je graf zobrazujúci testovacie dáta a aproximačnú krivku:
<img alt="Polynomická regresia" src="../../../../translated_images/sk/poly-results.ee587348f0f1f60b.webp" width="50%" />
<img alt="Polynomial regression" src="../../../../translated_images/sk/poly-results.ee587348f0f1f60b.webp" width="50%" />
Pomocou polynomickej regresie môžeme dosiahnuť mierne nižšiu MSE a vyšší koeficient determinácie, ale nie výrazne. Musíme zohľadniť aj ďalšie vlastnosti!
Použitím polynomickej regresie môžeme získať o niečo nižší RMSE a vyšší koeficient determinácie, ale nie významne. Musíme zohľadniť aj ďalšie vlastnosti!
> Môžete vidieť, že minimálne ceny tekvíc sa vyskytujú niekde okolo Halloween. Ako by ste to vysvetlili?
> Vidíte, že minimálne ceny tekvíc sú pozorované niekde okolo Halloweenu. Ako by ste to vysvetlili?
🎃 Gratulujeme, práve ste vytvorili model, ktorý môže pomôcť predpovedať cenu tekvíc na pečenie. Pravdepodobne môžete zopakovať rovnaký postup pre všetky druhy tekvíc, ale to by bolo zdĺhavé. Teraz sa naučíme, ako zohľadniť druh tekvice v našom modeli!
🎃 Gratulujeme, práve ste vytvorili model, ktorý môže pomôcť predpovedať cenu tekvíc na koláč. Pravdepodobne tú istú procedúru môžete zopakovať pre všetky druhy tekvíc, ale to by bolo zdĺhavé. Teraz sa naučíme, ako do modelu zahrnúť odrodu tekvíc!
## Kategóriové premenné
## Kategorické vlastnosti
V ideálnom svete chceme byť schopní predpovedať ceny rôznych druhov tekvíc pomocou toho istého modelu. Avšak stĺpec `Variety` je trochu iný ako stĺpce ako `Month`, pretože obsahuje nečíselné hodnoty. Takéto stĺpce sa nazývajú **kategóriové**.
V ideálnom svete chceme vedieť predpovedať ceny pre rôzne odrody tekvíc pomocou rovnakého modelu. Avšak stĺpec `Variety` sa trochu líši od stĺpcov ako `Month`, pretože obsahuje nečíselné hodnoty. Takéto stĺpce sa nazývajú **kategorické**.
[![ML pre začiatočníkov - Predikcie kategóriových premenných pomocou lineárnej regresie](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML pre začiatočníkov - Predikcie kategóriových premenných pomocou lineárnej regresie")
[![ML pre začiatočníkov - Predikcia kategórií s lineárnou regresiou](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
> 🎥 Kliknite na obrázok vyššie pre krátke video o použití kategóriových premenných.
> 🎥 Kliknite na obrázok vyššie pre krátke video o používaní kategórií vo vlastnostiach.
Tu vidíte, ako sa priemerná cena líši podľa druhu:
Tu vidíte, ako priemerná cena závisí od odrody:
<img alt="Priemerná cena podľa druhu" src="../../../../translated_images/sk/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
<img alt="Priemerná cena podľa odrody" src="../../../../translated_images/sk/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
Aby sme zohľadnili druh, musíme ho najskôr previesť na číselnú formu, teda ho **zakódovať**. Existuje niekoľko spôsobov, ako to môžeme urobiť:
Aby sme zohľadnili odrodu, najskôr ju musíme previesť na numerickú formu, teda **zakódovať** ju. Existuje niekoľko spôsobov, ako to môžeme urobiť:
* Jednoduché **číselné kódovanie** vytvorí tabuľku rôznych druhov a potom nahradí názov druhu jeho indexom v tejto tabuľke. Toto nie je najlepšia myšlienka pre lineárnu regresiu, pretože lineárna regresia berie skutočnú číselnú hodnotu indexu a pripočítava ju k výsledku, násobenú nejakým koeficientom. V našom prípade je vzťah medzi číslom indexu a cenou jasne nelineárny, aj keď by sme triedili indexy nejakým špecifickým spôsobom.
* **One-hot encoding** nahradí stĺpec `Variety` štyrmi rôznymi stĺpcami, po jednom pre každú odrodu. Každý stĺpec bude obsahovať `1`, ak príslušný riadok je daného druhu, a `0` inak. To znamená, že budú štyri koeficienty v lineárnej regresii, po jednom pre každú odrodu tekvín, ktoré budú zodpovedné za "počátečnú cenu" (alebo skôr "prídavok k cene") pre tento konkrétny druh.
* Jednoduché **číselné kódovanie** vytvorí tabuľku rôznych odrôd a potom nahradí názov odrody indexom v tejto tabuľke. To nie je najlepšie riešenie pre lineárnu regresiu, pretože lineárna regresia zoberie skutočnú číselnú hodnotu indexu a pridá ju k výsledku vynásobenú nejakým koeficientom. V našom prípade je vzťah medzi číslom indexu a cenou jasne nelineárny, aj keď zabezpečíme, že indexy budú usporiadané nejako špecificky.
* **One-hot encoding** nahradí stĺpec `Variety` štyrmi rôznymi stĺpcami, každý pre jednu odrodu. Každý stĺpec bude obsahovať `1`, ak je daný riadok danej odrody, a `0` v opačnom prípade. To znamená, že lineárna regresia bude mať štyri koeficienty, jeden pre každú odrodu tekvíc, ktoré určujú "východiskovú cenu" (alebo skôr "prídavok k cene") pre túto konkrétnu odrodu.
Nižšie je ukážka, ako môžeme pomocou one-hot encoding označiť druh:
Nižšie je kód, ktorý ukazuje použitie one-hot encoding pre odrodu:
```python
pd.get_dummies(new_pumpkins['Variety'])
```
ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE
----|-----------|-----------|--------------------------|----------
70 | 0 | 0 | 0 | 1
71 | 0 | 0 | 0 | 1
... | ... | ... | ... | ...
1738 | 0 | 1 | 0 | 0
1739 | 0 | 1 | 0 | 0
1740 | 0 | 1 | 0 | 0
1741 | 0 | 1 | 0 | 0
1742 | 0 | 1 | 0 | 0
Na trénovanie lineárnej regresie používajúcej one-hot kódované druhy ako vstupné premenné je potrebné správne inicializovať dáta `X` a `y`:
ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE
----|-----------|-----------|--------------------------|----------
70 | 0 | 0 | 0 | 1
71 | 0 | 0 | 0 | 1
... | ... | ... | ... | ...
1738 | 0 | 1 | 0 | 0
1739 | 0 | 1 | 0 | 0
1740 | 0 | 1 | 0 | 0
1741 | 0 | 1 | 0 | 0
1742 | 0 | 1 | 0 | 0
Aby sme natrénovali lineárnu regresiu s one-hot encoded odrodou ako vstupom, stačí správne inicializovať dáta `X` a `y`:
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
Zvyšok kódu je rovnaký ako sme použili vyššie pre trénovanie lineárnej regresie. Ak to vyskúšate, uvidíte, že stredná štvorcová chyba je asi rovnaká, ale koeficient determinácie bude oveľa vyšší (~77%). Na ešte presnejšie predikcie môžeme zohľadniť viac kategóriových premenných, ako aj numerické premenné, napríklad `Month` alebo `DayOfYear`. Na vytvorenie jednej veľkej množiny príznakov môžeme použiť `join`:
Zvyšok kódu je rovnaký ako ten, ktorý sme použili vyššie na trénovanie lineárnej regresie. Ak to vyskúšate, uvidíte, že stredná kvadratická chyba je približne rovnaká, no koeficient determinácie je oveľa vyšší (~77 %). Pre ešte presnejšie predpovede môžeme zohľadniť aj ďalšie kategórie, ako aj numerické vlastnosti ako `Month` alebo `DayOfYear`. Na získanie jednej veľkej matice príznakov môžeme použiť `join`:
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
@ -318,15 +341,15 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
```
Tu tiež berieme do úvahy `City` a typ `Package`, čo nám dáva RMSE 2.84 (10.5 %) a koeficient determinácie 0.94!
Tu tiež zohľadňujeme `City` a typ balenia (`Package`), čo nám dáva MSE 2.84 (10%) a koeficient determinácie 0.94!
## Kompletný model
## Zhrnutie všetkého dokopy
Aby sme vytvorili najlepší model, môžeme použiť kombinované (one-hot kódované kategóriové + numerické) dáta z vyššie uvedeného príkladu spolu s polynomickou regresiou. Tu je kompletný kód pre vaše pohodlie:
Na vytvorenie najlepšieho modelu môžeme použiť kombinované (one-hot encoded kategórie + numerické) dáta z vyššie uvedeného príkladu spolu s polynomickou regresiou. Tu je kompletný kód pre vaše pohodlie:
```python
# nastaviť tréningové dáta
# nastaviť trénovacie údaje
X = pd.get_dummies(new_pumpkins['Variety']) \
.join(new_pumpkins['Month']) \
.join(pd.get_dummies(new_pumpkins['City'])) \
@ -336,51 +359,51 @@ y = new_pumpkins['Price']
# vykonať rozdelenie na trénovaciu a testovaciu množinu
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# nastaviť a natrénovať pipeline
# nastaviť a trénovať pipeline
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
# predpovedať výsledky pre testovacie dáta
pred = pipeline.predict(X_test)
# vypočítať MSE a koeficient determinácie
mse = np.sqrt(mean_squared_error(y_test,pred))
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
# vypočítať RMSE a koeficient determinácie
rmse = mean_squared_error(y_test, pred, squared=False)
print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
To by nám malo dať najlepší koeficient determinácie takmer 97 % a RMSE=2.23 (~8 % chyba predpovede).
Toto by nám malo dať najlepší koeficient determinácie takmer 97% a MSE=2.23 (~8% chyba predikcie).
| Model | MSE | Koeficient determinácie |
|-------|-----|-------------------------|
| `DayOfYear` lineárny | 2.77 (17.2%) | 0.07 |
| `DayOfYear` polynomický | 2.73 (17.0%) | 0.08 |
| `Variety` lineárny | 5.24 (19.7%) | 0.77 |
| Všetky príznaky lineárny | 2.84 (10.5%) | 0.94 |
| Všetky príznaky polynomický | 2.23 (8.25%) | 0.97 |
| Model | RMSE | Koeficient determinácie |
|-------|-----|-------------------------|
| `DayOfYear` Lineárny | 2.77 (17.2%) | 0.07 |
| `DayOfYear` Polynomický | 2.73 (17.0%) | 0.08 |
| `Variety` Lineárny | 5.24 (19.7%) | 0.77 |
| Všetky vlastnosti Lineárny | 2.84 (10.5%) | 0.94 |
| Všetky vlastnosti Polynomický | 2.23 (8.25%) | 0.97 |
🏆 Výborne! Vytvorili ste štyri regresné modely v jednej lekcii a zlepšili kvalitu modelu na 97%. V poslednej časti o regresii sa naučíte o logistickej regresii na určovanie kategórií.
🏆 Výborne! Vytvorili ste štyri regresné modely v jednej lekcii a vylepšili kvalitu modelu na 97 %. V záverečnej časti o regresii sa naučíte o logistickej regresii na určenie kategórií.
---
## 🚀Výzva
Otestujte niekoľko rôznych premenných v tomto notebooku a zistite, ako korelácia súvisí s presnosťou modelu.
Otestujte niekoľko rôznych premenných v tomto notebooku, aby ste videli, ako korelácia súvisí s presnosťou modelu.
## [Kvíz po prednáške](https://ff-quizzes.netlify.app/en/ml/)
## Opakovanie a samostatné štúdium
## Prehľad a samostatné štúdium
V tejto lekcii sme sa naučili o lineárnej regresii. Existujú aj iné dôležité typy regresie. Prečítajte si o metódach Stepwise, Ridge, Lasso a Elasticnet. Dobrou študijnou pomôckou na osvojenie je kurz [Stanford Statistical Learning](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
V tejto lekcii sme sa naučili o lineárnej regresii. Existujú však aj iné dôležité typy regresie. Prečítajte si o technikách Stepwise, Ridge, Lasso a Elasticnet. Dobrou študijnou pomôckou je [Stanfordský kurz štatistického učenia](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
## Zadanie
[Postavte model](assignment.md)
[Vytvorte model](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Zrieknutie sa zodpovednosti**:
Tento dokument bol preložený pomocou AI prekladateľskej služby [Co-op Translator](https://github.com/Azure/co-op-translator). Aj keď sa snažíme o presnosť, vezmite prosím na vedomie, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho rodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za akékoľvek nedorozumenia alebo nesprávne výklady vyplývajúce z použitia tohto prekladu.
**Vyhlásenie o zodpovednosti**:
Tento dokument bol preložený pomocou automatizovanej prekladateľskej služby AI [Co-op Translator](https://github.com/Azure/co-op-translator). Aj keď usilujeme o presnosť, buďte prosím informovaní, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Originálny dokument v jeho pôvodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nepreberáme zodpovednosť za akékoľvek nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -4,14 +4,14 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## Lineárna a polynomiálna regresia pre stanovenie cien tekvíc - Lekcia 3\n",
"## Lineárna a polynomiálna regresia pre ceny tekvíc - Lekcia 3\n",
"\n",
"Načítajte potrebné knižnice a dataset. Konvertujte údaje na dataframe obsahujúci podmnožinu údajov:\n",
"Načítajte potrebné knižnice a dátovú sadu. Preveďte dáta na dataframe obsahujúci podmnožinu údajov:\n",
"\n",
"- Získajte iba tekvice ocenené na základe ceny za koš\n",
"- Konvertujte dátum na mesiac\n",
"- Vypočítajte cenu ako priemer vysokých a nízkych cien\n",
"- Konvertujte cenu tak, aby odrážala cenu za množstvo v koši\n"
"- Získajte len tekvice oceňované za korcom\n",
"- Preveďte dátum na mesiac\n",
"- Vypočítajte cenu ako priemer medzi vysokou a nízkou cenou\n",
"- Preveďte cenu tak, aby odzrkadľovala oceňovanie podľa množstva korcov\n"
]
},
{
@ -377,7 +377,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Bodový graf nám pripomína, že máme údaje iba od augusta do decembra. Pravdepodobne potrebujeme viac údajov, aby sme mohli vyvodiť závery lineárnym spôsobom.\n"
"Bodový graf nám pripomína, že máme údaje iba za mesiace od augusta do decembra. Pravdepodobne budeme potrebovať viac údajov, aby sme mohli vyvodiť závery lineárnym spôsobom.\n"
]
},
{
@ -447,7 +447,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"Pozrime sa, či existuje korelácia:\n"
]
},
{
"cell_type": "code",
@ -472,7 +474,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Zdá sa, že korelácia je dosť malá, ale existuje nejaký iný dôležitejší vzťah - pretože cenové body v grafe vyššie sa zdajú mať niekoľko odlišných klastrov. Poďme vytvoriť graf, ktorý ukáže rôzne odrody tekvíc:\n"
"Zdá sa, že korelácia je pomerne malá, ale existuje nejaký iný dôležitejší vzťah pretože cenové body v grafe vyššie sa zdajú mať niekoľko odlišných zhlukov. Vytvorme graf, ktorý ukáže rôzne odrody tekvíc:\n"
]
},
{
@ -535,7 +537,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"Zatiaľ sa sústreďme len na jednu odrodu - **typ koláča**.\n"
]
},
{
"cell_type": "code",
@ -584,7 +588,7 @@
"source": [
"### Lineárna regresia\n",
"\n",
"Použijeme Scikit Learn na natrénovanie modelu lineárnej regresie:\n"
"Použijeme Scikit Learn na trénovanie modelu lineárnej regresie:\n"
]
},
{
@ -688,7 +692,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"Môžeme použiť natrénovaný model na predikciu ceny:\n"
]
},
{
"cell_type": "code",
@ -716,11 +722,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### Polynomická regresia\n",
"### Polynomiálna regresia\n",
"\n",
"Niekedy je vzťah medzi vlastnosťami a výsledkami prirodzene nelineárny. Napríklad ceny tekvíc môžu byť vysoké v zime (mesiace=1,2), potom klesnúť počas leta (mesiace=5-7) a následne opäť stúpnuť. Lineárna regresia nedokáže tento vzťah presne zachytiť.\n",
"Niekedy je vzťah medzi vlastnosťami a výsledkami vrodene nelineárny. Napríklad ceny tekvíc môžu byť vysoké v zime (mesiace=1,2), potom počas leta (mesiace=5-7) klesnú a následne opäť vzrastú. Lineárna regresia tento vzťah nedokáže presne nájsť.\n",
"\n",
"V takom prípade môžeme zvážiť pridanie ďalších vlastností. Jednoduchým spôsobom je použiť polynómy z vstupných vlastností, čo by viedlo k **polynomickej regresii**. V knižnici Scikit Learn môžeme automaticky predpočítať polynomiálne vlastnosti pomocou pipeline:\n"
"V takom prípade môžeme zvážiť pridané ďalších vlastností. Jednoduchým spôsobom je použiť polynómy z vstupných vlastností, čo vedie k **polynomiálnej regresii**. V Scikit Learn môžeme automaticky predpočítať polynomiálne vlastnosti pomocou pipeline: \n"
]
},
{
@ -775,22 +781,25 @@
"score = pipeline.score(X_train,y_train)\n",
"print('Model determination: ', score)\n",
"\n",
"plt.scatter(X_test,y_test)\n",
"plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))"
"X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n",
"y_range = pipeline.predict(X_range)\n",
"\n",
"plt.scatter(X_test, y_test)\n",
"plt.plot(X_range, y_range)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Kódovanie odrôd\n",
"### Rôzne spôsoby kódovania\n",
"\n",
"V ideálnom svete by sme chceli byť schopní predpovedať ceny pre rôzne odrody tekvíc pomocou toho istého modelu. Aby sme zohľadnili odrodu, musíme ju najprv previesť do číselnej podoby, alebo ju **zakódovať**. Existuje niekoľko spôsobov, ako to môžeme urobiť:\n",
"V ideálnom svete chceme byť schopní predpovedať ceny rôznych odrôd tekvíc pomocou rovnakého modelu. Aby sme mohli zohľadniť odrodu, najskôr ju musíme previesť do číselnej formy, teda **zakódovať**. Existuje niekoľko spôsobov, ako to môžeme urobiť:\n",
"\n",
"* Jednoduché číselné kódovanie, ktoré vytvorí tabuľku rôznych odrôd a potom nahradí názov odrody indexom v tejto tabuľke. Toto nie je najlepší nápad pre lineárnu regresiu, pretože lineárna regresia berie do úvahy číselnú hodnotu indexu, a tá pravdepodobne nebude číselne korelovať s cenou.\n",
"* One-hot kódovanie, ktoré nahradí stĺpec `Variety` štyrmi rôznymi stĺpcami, každý pre jednu odrodu, pričom obsahuje hodnotu 1, ak daný riadok patrí danej odrode, a 0 v opačnom prípade.\n",
"* Jednoduché číselné kódovanie, ktoré vytvorí tabuľku rôznych odrôd a potom nahradí názov odrody indexom v tejto tabuľke. To nie je najlepšia voľba pre lineárnu regresiu, pretože lineárna regresia berie do úvahy číselnú hodnotu indexu a tá pravdepodobne nebude numericky korelovať s cenou.\n",
"* One-hot kódovanie, ktoré nahradí stĺpec `Variety` 4 rôznymi stĺpcami, po jednom pre každú odrodu, kde bude 1, ak príslušný riadok patrí danej odrode, a 0 inak.\n",
"\n",
"Kód nižšie ukazuje, ako môžeme zakódovať odrodu pomocou one-hot kódovania:\n"
"Nižšie uvedený kód ukazuje, ako môžeme one-hot kódovať odrodu:\n"
]
},
{
@ -938,9 +947,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### Lineárna regresia na odrode\n",
"### Lineárna regresia podľa odrody\n",
"\n",
"Teraz použijeme ten istý kód ako vyššie, ale namiesto `DayOfYear` použijeme našu one-hot-enkódovanú odrodu ako vstup:\n"
"Teraz použijeme ten istý kód ako vyššie, ale namiesto `DayOfYear` použijeme ako vstup našu one-hot-encoded odrodu:\n"
]
},
{
@ -988,7 +997,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Môžeme tiež skúsiť použiť ďalšie funkcie rovnakým spôsobom a skombinovať ich s číselnými funkciami, ako sú `Month` alebo `DayOfYear`:\n"
"Môžeme tiež skúsiť použiť iné vlastnosti rovnakým spôsobom a kombinovať ich s číselnými vlastnosťami, ako napríklad `Month` alebo `DayOfYear`:\n"
]
},
{
@ -1021,7 +1030,7 @@
"source": [
"### Polynomická regresia\n",
"\n",
"Polynomická regresia môže byť použitá aj s kategóriálnymi črtami, ktoré sú zakódované pomocou one-hot-encoding. Kód na trénovanie polynomickej regresie by bol v podstate rovnaký, ako sme videli vyššie.\n"
"Polynomická regresia môže byť použitá aj s kategorickými vlastnosťami, ktoré sú zakódované metódou one-hot. Kód na trénovanie polynomickej regresie by v podstate bol rovnaký, ako sme videli vyššie.\n"
]
},
{
@ -1068,7 +1077,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Upozornenie**: \nTento dokument bol preložený pomocou služby na automatický preklad [Co-op Translator](https://github.com/Azure/co-op-translator). Hoci sa snažíme o presnosť, upozorňujeme, že automatické preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho pôvodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre dôležité informácie odporúčame profesionálny ľudský preklad. Nezodpovedáme za akékoľvek nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Vyhlásenie o vylúčení zodpovednosti**: \nTento dokument bol preložený pomocou AI prekladateľskej služby [Co-op Translator](https://github.com/Azure/co-op-translator). Aj keď sa snažíme o presnosť, buďte si vedomí, že automatické preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho rodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za akékoľvek nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -1098,13 +1107,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "d77bd89ae7e79780c68c58bab91f13f8",
"translation_date": "2025-09-06T13:09:45+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "sk"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

Loading…
Cancel
Save