# Начало работы с Python и Scikit-learn для моделей регрессии ![Сводка регрессий в виде скетчноута](../../../../sketchnotes/ml-regression.png) > Скетчноут от [Tomomi Imura](https://www.twitter.com/girlie_mac) ## [Тест перед лекцией](https://ff-quizzes.netlify.app/en/ml/) > ### [Этот урок доступен на R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) ## Введение В этих четырех уроках вы узнаете, как создавать модели регрессии. Мы скоро обсудим, для чего они нужны. Но прежде чем начать, убедитесь, что у вас есть все необходимые инструменты для работы! В этом уроке вы научитесь: - Настраивать ваш компьютер для локальных задач машинного обучения. - Работать с Jupyter Notebook. - Использовать Scikit-learn, включая установку. - Исследовать линейную регрессию через практическое упражнение. ## Установки и настройки [![ML для начинающих - Настройте инструменты для создания моделей машинного обучения](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML для начинающих - Настройте инструменты для создания моделей машинного обучения") > 🎥 Нажмите на изображение выше, чтобы посмотреть короткое видео о настройке вашего компьютера для ML. 1. **Установите Python**. Убедитесь, что [Python](https://www.python.org/downloads/) установлен на вашем компьютере. Вы будете использовать Python для многих задач в области науки о данных и машинного обучения. На большинстве компьютеров Python уже установлен. Также доступны полезные [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott), которые облегчают настройку для некоторых пользователей. Однако для некоторых задач требуется одна версия Python, а для других — другая. Поэтому полезно работать в [виртуальной среде](https://docs.python.org/3/library/venv.html). 2. **Установите Visual Studio Code**. Убедитесь, что Visual Studio Code установлен на вашем компьютере. Следуйте этим инструкциям для [установки Visual Studio Code](https://code.visualstudio.com/) для базовой настройки. В этом курсе вы будете использовать Python в Visual Studio Code, поэтому вам может быть полезно ознакомиться с [настройкой Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) для разработки на Python. > Ознакомьтесь с Python, пройдя эту коллекцию [модулей Learn](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) > > [![Настройка Python в Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Настройка Python в Visual Studio Code") > > 🎥 Нажмите на изображение выше, чтобы посмотреть видео: использование Python в VS Code. 3. **Установите Scikit-learn**, следуя [этим инструкциям](https://scikit-learn.org/stable/install.html). Поскольку вам нужно использовать Python 3, рекомендуется использовать виртуальную среду. Обратите внимание, если вы устанавливаете эту библиотеку на Mac с процессором M1, на указанной странице есть специальные инструкции. 4. **Установите Jupyter Notebook**. Вам нужно [установить пакет Jupyter](https://pypi.org/project/jupyter/). ## Ваша среда разработки ML Вы будете использовать **ноутбуки** для разработки кода на Python и создания моделей машинного обучения. Этот тип файлов является распространенным инструментом для специалистов по данным, и их можно идентифицировать по суффиксу или расширению `.ipynb`. Ноутбуки представляют собой интерактивную среду, которая позволяет разработчику одновременно писать код, добавлять заметки и документацию вокруг кода, что очень полезно для экспериментальных или исследовательских проектов. [![ML для начинающих - Настройка Jupyter Notebook для создания моделей регрессии](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML для начинающих - Настройка Jupyter Notebook для создания моделей регрессии") > 🎥 Нажмите на изображение выше, чтобы посмотреть короткое видео о выполнении этого упражнения. ### Упражнение - работа с ноутбуком В этой папке вы найдете файл _notebook.ipynb_. 1. Откройте _notebook.ipynb_ в Visual Studio Code. Jupyter сервер запустится с Python 3+. Вы найдете области ноутбука, которые можно `запустить`, куски кода. Вы можете запустить блок кода, выбрав значок, похожий на кнопку воспроизведения. 2. Выберите значок `md` и добавьте немного markdown, а также следующий текст **# Добро пожаловать в ваш ноутбук**. Затем добавьте немного кода на Python. 3. Введите **print('hello notebook')** в блоке кода. 4. Выберите стрелку, чтобы запустить код. Вы должны увидеть напечатанное сообщение: ```output hello notebook ``` ![VS Code с открытым ноутбуком](../../../../2-Regression/1-Tools/images/notebook.jpg) Вы можете чередовать ваш код с комментариями, чтобы документировать ноутбук. ✅ Подумайте минуту, насколько отличается рабочая среда веб-разработчика от среды специалиста по данным. ## Начало работы с Scikit-learn Теперь, когда Python настроен в вашей локальной среде, и вы освоились с Jupyter Notebook, давайте также освоимся с Scikit-learn (произносится как `sci`, как в `science`). Scikit-learn предоставляет [обширный API](https://scikit-learn.org/stable/modules/classes.html#api-ref), который поможет вам выполнять задачи машинного обучения. Согласно их [веб-сайту](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn — это библиотека машинного обучения с открытым исходным кодом, которая поддерживает обучение с учителем и без учителя. Она также предоставляет различные инструменты для подгонки моделей, предварительной обработки данных, выбора и оценки моделей, а также множество других утилит." В этом курсе вы будете использовать Scikit-learn и другие инструменты для создания моделей машинного обучения для выполнения задач, которые мы называем "традиционным машинным обучением". Мы намеренно избегали нейронных сетей и глубокого обучения, так как они лучше освещены в нашей предстоящей учебной программе "AI для начинающих". Scikit-learn делает процесс создания моделей и их оценки простым и удобным. Она в основном ориентирована на использование числовых данных и содержит несколько готовых наборов данных для обучения. Также она включает предварительно созданные модели, которые студенты могут попробовать. Давайте изучим процесс загрузки готовых данных и использования встроенного оценщика для первой модели машинного обучения с Scikit-learn на основе базовых данных. ## Упражнение - ваш первый ноутбук с Scikit-learn > Этот учебник был вдохновлен [примером линейной регрессии](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) на веб-сайте Scikit-learn. [![ML для начинающих - Ваш первый проект линейной регрессии на Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML для начинающих - Ваш первый проект линейной регрессии на Python") > 🎥 Нажмите на изображение выше, чтобы посмотреть короткое видео о выполнении этого упражнения. В файле _notebook.ipynb_, связанном с этим уроком, очистите все ячейки, нажав на значок "мусорной корзины". В этом разделе вы будете работать с небольшим набором данных о диабете, который встроен в Scikit-learn для учебных целей. Представьте, что вы хотите протестировать лечение для пациентов с диабетом. Модели машинного обучения могут помочь вам определить, какие пациенты лучше отреагируют на лечение, основываясь на комбинациях переменных. Даже очень базовая модель регрессии, при визуализации, может показать информацию о переменных, которые помогут вам организовать ваши теоретические клинические испытания. ✅ Существует множество методов регрессии, и выбор метода зависит от вопроса, на который вы хотите получить ответ. Если вы хотите предсказать вероятный рост человека определенного возраста, вы бы использовали линейную регрессию, так как вы ищете **числовое значение**. Если вас интересует, следует ли считать определенную кухню веганской или нет, вы ищете **категориальное назначение**, поэтому вы бы использовали логистическую регрессию. Позже вы узнаете больше о логистической регрессии. Подумайте немного о вопросах, которые можно задать данным, и о том, какой из этих методов будет более подходящим. Давайте начнем выполнение задачи. ### Импорт библиотек Для этой задачи мы импортируем несколько библиотек: - **matplotlib**. Это полезный [инструмент для построения графиков](https://matplotlib.org/), который мы будем использовать для создания линейного графика. - **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) — это полезная библиотека для работы с числовыми данными в Python. - **sklearn**. Это библиотека [Scikit-learn](https://scikit-learn.org/stable/user_guide.html). Импортируйте несколько библиотек для выполнения задач. 1. Добавьте импорты, введя следующий код: ```python import matplotlib.pyplot as plt import numpy as np from sklearn import datasets, linear_model, model_selection ``` Здесь вы импортируете `matplotlib`, `numpy`, а также `datasets`, `linear_model` и `model_selection` из `sklearn`. `model_selection` используется для разделения данных на обучающие и тестовые наборы. ### Набор данных о диабете Встроенный [набор данных о диабете](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) включает 442 образца данных о диабете с 10 переменными, некоторые из которых включают: - возраст: возраст в годах - 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-й столбец набора данных. Вы можете сделать это, используя оператор `:` для выбора всех строк, а затем выбрав 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() ``` ![диаграмма рассеяния, показывающая точки данных о диабете](../../../../2-Regression/1-Tools/images/scatterplot.png) ✅ Подумайте, что здесь происходит. Прямая линия проходит через множество маленьких точек данных, но что именно она делает? Можете ли вы понять, как с помощью этой линии можно предсказать, где новый, ранее не виденный точечный элемент должен находиться относительно оси y графика? Попробуйте сформулировать практическое применение этой модели. Поздравляем, вы создали свою первую модель линейной регрессии, сделали предсказание с её помощью и отобразили его на графике! --- ## 🚀Задание Постройте график для другой переменной из этого набора данных. Подсказка: измените эту строку: `X = X[:,2]`. Учитывая целевую переменную этого набора данных, что вы можете узнать о прогрессировании диабета как заболевания? ## [Тест после лекции](https://ff-quizzes.netlify.app/en/ml/) ## Обзор и самостоятельное изучение В этом уроке вы работали с простой линейной регрессией, а не с унивариантной или множественной линейной регрессией. Почитайте немного о различиях между этими методами или посмотрите [это видео](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef). Узнайте больше о концепции регрессии и подумайте, на какие вопросы можно ответить с помощью этой техники. Пройдите [этот учебный курс](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott), чтобы углубить свои знания. ## Задание [Другой набор данных](assignment.md) --- **Отказ от ответственности**: Этот документ был переведен с помощью сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия обеспечить точность, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.