You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/ru/2-Regression/1-Tools/README.md

233 lines
22 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Начало работы с Python и Scikit-learn для регрессионных моделей
![Краткое содержание регрессий в скетчноте](../../../../translated_images/ru/ml-regression.4e4f70e3b3ed446e.webp)
> Скетчнот от [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [Викторина перед лекцией](https://ff-quizzes.netlify.app/en/ml/)
> ### [Этот урок доступен на R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
## Введение
В этих четырёх уроках вы узнаете, как строить регрессионные модели. Мы скоро обсудим, для чего они нужны. Но прежде чем начать, убедитесь, что у вас есть все необходимые инструменты для запуска процесса!
В этом уроке вы научитесь:
- Настраивать компьютер для локальных задач машинного обучения.
- Работать с Jupyter Notebooks.
- Использовать Scikit-learn, включая установку.
- Исследовать линейную регрессию в практическом упражнении.
## Установка и настройка
[![ML для начинающих - Настройте свои инструменты для создания моделей машинного обучения](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML для начинающих - Настройте свои инструменты для создания моделей машинного обучения")
> 🎥 Нажмите на изображение выше для короткого видео о настройке компьютера для машинного обучения.
1. **Установите Python**. Убедитесь, что [Python](https://www.python.org/downloads/) установлен на вашем компьютере. Вы будете использовать Python для многих задач в области науки о данных и машинного обучения. Большинство систем уже имеют установленный Python. Также доступны полезные [наборы для программирования на Python](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott), чтобы упростить настройку для некоторых пользователей.
Некоторые случаи использования Python требуют одной версии ПО, а другие — другой. Поэтому полезно работать в [виртуальной среде](https://docs.python.org/3/library/venv.html).
2. **Установите Visual Studio Code**. Убедитесь, что у вас установлен Visual Studio Code. Следуйте инструкциям по [установке Visual Studio Code](https://code.visualstudio.com/) для базовой установки. Вы будете использовать Python в Visual Studio Code на этом курсе, поэтому стоит ознакомиться с тем, как [настроить Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) для разработки на Python.
> Освойте Python, выполнив этот набор [учебных модулей](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)
>
> [![Настройка Python с Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Настройка Python с Visual Studio Code")
>
> 🎥 Нажмите на изображение выше для видео: использование Python в VS Code.
3. **Установите Scikit-learn**, следуя [инструкциям](https://scikit-learn.org/stable/install.html). Поскольку нужно использовать Python 3, рекомендуется виртуальная среда. Если вы устанавливаете библиотеку на M1 Mac, есть специальные инструкции по ссылке выше.
1. **Установите Jupyter Notebook**. Вам нужно [установить пакет Jupyter](https://pypi.org/project/jupyter/).
## Ваша среда для машинного обучения
Вы будете использовать **notebooks** для разработки кода на Python и создания моделей машинного обучения. Такие файлы часто применяются учёными данных и имеют расширение `.ipynb`.
Notebooks – это интерактивная среда, позволяющая как писать код, так и добавлять заметки и документацию, что очень удобно для экспериментальных или исследовательских проектов.
[![ML для начинающих - Настройка Jupyter Notebooks для создания регрессионных моделей](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML для начинающих - Настройка Jupyter Notebooks для создания регрессионных моделей")
> 🎥 Нажмите на изображение выше для короткого видео с разбором упражнения.
### Упражнение - работа с notebook
В этой папке вы найдете файл _notebook.ipynb_.
1. Откройте файл _notebook.ipynb_ в Visual Studio Code.
Запустится сервер Jupyter с Python 3+. Вы увидите области notebook, которые можно `запустить` — это блоки кода. Запустить блок кода можно, нажав значок кнопки воспроизведения.
1. Выберите значок `md` и добавьте немного markdown с текстом **# Добро пожаловать в ваш notebook**.
Затем добавьте фрагмент кода на Python.
1. Введите **print('hello notebook')** в блоке кода.
1. Нажмите стрелку, чтобы запустить код.
Вы должны увидеть напечатанную строчку:
```output
hello notebook
```
![VS Code с открытым notebook](../../../../translated_images/ru/notebook.4a3ee31f396b8832.webp)
Вы можете чередовать код с комментариями для самодокументирования notebook.
✅ Подумайте минуту, насколько отличается рабочая среда веб-разработчика от среды учёного данных.
## Работа с Scikit-learn
Теперь, когда Python настроен в вашей локальной среде и вы уверенно работаете с Jupyter Notebooks, познакомимся с Scikit-learn (произносится «сай» как «сайанс»). Scikit-learn предоставляет [обширный API](https://scikit-learn.org/stable/modules/classes.html#api-ref) для выполнения задач машинного обучения.
Согласно их [сайту](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn — библиотека машинного обучения с открытым исходным кодом, поддерживающая контролируемое и неконтролируемое обучение. Также она предоставляет различные инструменты для подгонки моделей, предобработки данных, выбора моделей и оценки, а также множество других утилит."
В этом курсе вы будете использовать Scikit-learn и другие инструменты для построения моделей машинного обучения, выполняющих так называемые «традиционные задачи машинного обучения». Мы сознательно избегаем нейронных сетей и глубокого обучения, поскольку они лучше раскрыты в нашем будущем курсе «ИИ для начинающих».
Scikit-learn упрощает построение и оценку моделей. Основной акцент сделан на работе с числовыми данными, в библиотеке есть несколько готовых наборов данных для обучения, а также предустановленные модели для экспериментов. Давайте изучим процесс загрузки подготовленных данных и использования встроенного оценщика для создания вашей первой модели машинного обучения в Scikit-learn на простых данных.
## Упражнение - ваш первый notebook с Scikit-learn
> Этот учебник вдохновлен [примером линейной регрессии](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) на сайте Scikit-learn.
[![ML для начинающих - Ваш первый проект линейной регрессии на Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML для начинающих - Ваш первый проект линейной регрессии на Python")
> 🎥 Нажмите на изображение выше для короткого видео с разбором упражнения.
В файле _notebook.ipynb_, связанном с этим уроком, очистите все ячейки, нажав на значок корзины.
В этом разделе вы поработаете с небольшим набором данных о диабете, встроенным в Scikit-learn для учебных целей. Представьте, что вы хотите протестировать лечение пациентов с диабетом. Модели машинного обучения могут помочь определить, какие пациенты лучше отреагируют на лечение, основываясь на комбинациях переменных. Даже базовая регрессионная модель при визуализации может показать информацию о переменных, полезную для организации теоретических клинических исследований.
✅ Существует множество методов регрессии, и выбор зависит от задачи. Если нужно предсказать вероятный рост человека определённого возраста, используется линейная регрессия, поскольку требуется **числовое значение**. Если нужно определить, относится ли тип кухни к веганской или нет, это **категориальное распределение**, и применяют логистическую регрессию. Вы познакомитесь с ней позже. Подумайте о вопросах, которые можно задать данным, и о том, какой метод будет уместнее.
Давайте приступим.
### Импорт библиотек
Для задачи импортируем несколько библиотек:
- **matplotlib**. Это полезный [инструмент для графиков](https://matplotlib.org/), который мы используем для построения линейного графика.
- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) — полезная библиотека для работы с числовыми данными в Python.
- **sklearn**. Это библиотека [Scikit-learn](https://scikit-learn.org/stable/user_guide.html).
Импортируйте необходимые библиотеки для своих задач.
1. Добавьте импорт, набрав следующий код:
```python
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model, model_selection
```
Здесь вы импортируете `matplotlib`, `numpy` и импортируете `datasets`, `linear_model` и `model_selection` из `sklearn`. `model_selection` используется для разделения данных на обучающие и тестовые наборы.
### Набор данных диабета
Встроенный [набор данных о диабете](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) содержит 442 образца с 10 признаками, такими как:
- age: возраст в годах
- bmi: индекс массы тела
- bp: среднее артериальное давление
- s1 tc: Т-клетки (тип лейкоцитов)
✅ Этот набор данных включает признак «пол», важный для исследований диабета. Многие медицинские наборы содержат такие бинарные классификации. Подумайте, как такие категории могут исключать части населения из лечения.
Теперь загрузите данные X и y.
> 🎓 Помните, это контролируемое обучение, нам нужен целевой показатель с именем 'y'.
В новой ячейке кода загрузите данные диабета вызовом `load_diabetes()`. Параметр `return_X_y=True` указывает, что `X` будет матрицей данных, а `y` - целевой переменной регрессии.
1. Добавьте команды print, чтобы вывести форму матрицы данных и первый элемент:
```python
X, y = datasets.load_diabetes(return_X_y=True)
print(X.shape)
print(X[0])
```
Результатом является кортеж, где первые два значения присваиваются `X` и `y` соответственно. Подробнее о [кортежах](https://wikipedia.org/wiki/Tuple).
Вы увидите, что данные содержат 442 записи с 10 элементами в массиве:
```text
(442, 10)
[ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076
-0.04340085 -0.00259226 0.01990842 -0.01764613]
```
✅ Подумайте о связи между данными и целевой переменной регрессии. Линейная регрессия предсказывает связь между функцией X и целевой переменной y. Найдите [целевую переменную](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) набора данных диабета в документации. Что демонстрирует этот набор?
2. Затем выберите часть данных для построения графика, взяв 3-й столбец (индекс 2). Используйте оператор `:` для выбора всех строк, а затем индекс для колонки. При необходимости преобразуйте данные в 2D-массив с помощью `reshape(n_rows, n_columns)`. Если один из параметров -1, размер рассчитывается автоматически.
```python
X = X[:, 2]
X = X.reshape((-1,1))
```
✅ В любой момент выводите данные для проверки их формы.
3. Теперь, когда данные готовы к построению графика, можно проверить, поможет ли машина определить логическую границу между группами данных. Для этого нужно разделить данные (X) и целевую переменную (y) на тренировочные и тестовые наборы. Scikit-learn предоставляет простой способ сделать это, разделив данные относительно указанной точки.
```python
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
```
4. Теперь готовьтесь обучить модель! Загрузите модель линейной регрессии и обучите её на тренировочных наборах X и y с помощью `model.fit()`:
```python
model = linear_model.LinearRegression()
model.fit(X_train, y_train)
```
✅ `model.fit()` — функция, часто встречающаяся во многих ML-библиотеках, таких как TensorFlow.
5. Затем создайте прогноз на тестовых данных с помощью функции `predict()`. Это позволит построить линию между группами данных.
```python
y_pred = model.predict(X_test)
```
6. Теперь покажем данные на графике. Matplotlib — очень полезный инструмент для этого. Постройте диаграмму рассеяния для всех тестовых данных X и y и используйте предсказание, чтобы провести линию в наиболее подходящем месте между группами данных модели.
```python
plt.scatter(X_test, y_test, color='black')
plt.plot(X_test, y_pred, color='blue', linewidth=3)
plt.xlabel('Scaled BMIs')
plt.ylabel('Disease Progression')
plt.title('A Graph Plot Showing Diabetes Progression Against BMI')
plt.show()
```
![Диаграмма рассеяния с данными о диабете](../../../../translated_images/ru/scatterplot.ad8b356bcbb33be6.webp)
✅ Подумайте, что происходит на этом графике. Прямая линия проходит через множество маленьких точек данных, но что она делает именно? Видите ли вы, как по линии можно предсказать, где должна находиться новая, невидимая точка данных относительно оси y графика? Попробуйте сформулировать практическое применение этой модели.
Поздравляем, вы создали свою первую модель линейной регрессии, сделали прогноз и отобразили его на графике!
---
## 🚀Вызов
Постройте график для другой переменной из набора данных. Подсказка: отредактируйте строку `X = X[:,2]`. Что можно узнать о развитии диабета, учитывая целевую переменную этого набора данных?
## [Викторина после лекции](https://ff-quizzes.netlify.app/en/ml/)
## Обзор и самостоятельное изучение
В этом уроке вы работали с простой линейной регрессией, а не с унитарной или множественной линейной регрессией. Прочитайте немного о различиях между этими методами или посмотрите [это видео](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef)
Подробнее о концепции регрессии и подумайте, на какие вопросы можно ответить с помощью этой техники. Пройдите этот [учебник](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott), чтобы углубить свои знания.
## Задание
[Другой набор данных](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Отказ от ответственности**:
Этот документ был переведен с использованием сервиса машинного перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия по обеспечению точности, имейте в виду, что автоматический перевод может содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется обратиться к профессиональному человеческому переводу. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования этого перевода.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->