{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "2PQW7OXEoWEZ" }, "source": [ "# Введение в анализ данных\n", "## Домашнее задание 3, легкая часть. Линейная и логистическая регрессии.\n" ] }, { "cell_type": "markdown", "metadata": { "id": "aRt8VO2EoWEa" }, "source": [ "**Правила, прочитайте внимательно:**\n", "\n", "* Выполненную работу нужно отправить телеграм-боту `@thetahat_ds25_bot`. Для начала работы с ботом каждый раз отправляйте `/start`. Дождитесь подтверждения от бота, что он принял файл. Если подтверждения нет, то что-то не так. **Работы, присланные иным способом, не принимаются.**\n", "* Дедлайн см. в боте. После дедлайна работы не принимаются кроме случаев наличия уважительной причины.\n", "* Прислать нужно **ноутбук в формате `ipynb`**. Если вы строите интерактивные графики, их стоит прислать в формате html.\n", "* Следите за размером файлов. **Бот не может принимать файлы весом более 20 Мб.** Если файл получается больше, заранее разделите его на несколько.\n", "* Выполнять задание необходимо полностью самостоятельно. **При обнаружении списывания всем участникам списывания дается штраф -2 балла к итоговой оценке за семестр.**\n", "* Решения, размещенные на каких-либо интернет-ресурсах, не принимаются. Кроме того, публикация решения в открытом доступе может быть приравнена к предоставлении возможности списать.\n", "* Обратите внимание на правила использования ИИ-инструментов при решении домашнего задания.\n", "* **Код из рассказанных на занятиях ноутбуков** можно использовать без ограничений.\n", "* Для выполнения задания используйте этот ноутбук в качестве основы, ничего не удаляя из него. Можно добавлять необходимое количество ячеек.\n", "* Комментарии к решению пишите в markdown-ячейках.\n", "* Выполнение задания (ход решения, выводы и пр.) должно быть осуществлено на русском языке.\n", "* Решение проверяется системой ИИ-проверки **ThetaGrader**. Результат проверки валидируется и исправляется человеком, после чего комментарии отправляются студентам.\n", "* Если код будет не понятен проверяющему, оценка может быть снижена.\n", "* Никакой код из данного задания при проверке запускаться не будет. *Если код студента не выполнен, недописан и т.д., то он не оценивается.*\n", "* **Код из рассказанных на занятиях ноутбуков** можно использовать без ограничений.\n", "\n", "**Правила оформления теоретических задач:**\n", "\n", "* Решения необходимо оформить в виде $\\LaTeX$ в markdown-ячейках. Иные способы (в т.ч. фотографии) не принимаются.\n", "* Если вы не знаете $\\LaTeX$, используйте ИИ-инструменты для оформления черновика решения. Примеры были показаны на лекции 2 по ИИ-инструментам.\n", "* **В решениях поясняйте, чем вы пользуетесь**, хотя бы кратко. \n", "* Решение, в котором есть только ответ, и отсутствуют вычисления, оценивается в 0 баллов.\n", "\n", "\n", "Важно!!! Правила заполнения ноутбука:\n", "* Запрещается удалять имеющиеся в ноутбуке ячейки, менять местами положения задач.\n", "* Сохраняйте естественный линейный порядок повествования в ноутбуке сверху-вниз.\n", "* Отвечайте на вопросы, а также добавляйте новые ячейки в предложенных местах, которые обозначены `<...>`.\n", "* В markdown-ячейка, содержащих описание задачи, находятся специальные отметки, которые запрещается модифицировать.\n", "* При нарушении данных правил работа может получить 0 баллов.\n", "\n", "\n", "**Баллы за задание:**\n", "\n", "Легкая часть (достаточно на \"хор\"):\n", "\n", "* Задача 1 — 20 баллов\n", "* Задача 2 — 80 баллов\n", "* Задача 3 — 30 баллов;\n", "* Задача 4 — 20 баллов;\n", "\n", "Сложная часть (необходимо на \"отл\"):\n", "\n", "* Задачи 5-7: скачайте второй ноутбук с условием задания со страницы курса.\n", "\n", "Баллы учитываются в обязательной части курса и не влияют на оценку по факультативной части." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "TLUn-L0HoWEb" }, "outputs": [], "source": [ "# Bot check\n", "\n", "# HW_ID: fpmi_ad3_part1\n", "# Бот проверит этот ID и предупредит, если случайно сдать что-то не то.\n", "\n", "# Status: not final\n", "# Перед отправкой в финальном решении удали \"not\" в строчке выше.\n", "# Так бот проверит, что ты отправляешь финальную версию, а не промежуточную.\n", "# Никакие значения в этой ячейке не влияют на факт сдачи работы." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "LjG63iFWoWEb" }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "sns.set(style=\"whitegrid\", palette=\"Set2\")" ] }, { "cell_type": "markdown", "metadata": { "id": "4TDjFMbboWEc" }, "source": [ "При решении задания используйте `sklearn`. Пропишите сюда необходимые импорты" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "j19vAJp2oWEc" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "id": "N5pKs47noWEc" }, "source": [ "---\n", "### Легкая часть" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "### Задача 1." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "146d04157c07b08ee58d3eafdcf82c32", "snippet_label": "start" }, "id": "5s4mqy-HoWEc" }, "source": [ "\n", "\n", "Рассмотрим модель одномерной линейной регрессии *без свободного параметра* $y(x) = \\theta x$, где $x\\in \\mathbb{R}$ и $\\theta \\in \\mathbb{R}$. Предполагаем, что данные получены по правилу\n", "$$Y_i = \\theta x_i + \\varepsilon_i,$$\n", "где $i \\in \\{1, ..., n\\}$, числа $x_i \\in \\mathbb{R}$ неслучайны, а $\\varepsilon_i$ — случайные ошибки.\n", "\n", "**1.** Посчитайте оценку $\\widehat{\\theta}$ методом наименьших квадратов по явной формуле.\n", "\n", "**2.** Выпишите формулы итераций градиентного спуска (GD) и стохастического градиентного спуска (SGD) для поиска $\\widehat{\\theta}$. Не забудьте указать, как в SGD математически определяется батч (набор объектов на каждой итерации).\n", "\n", "**3.** Опишите, что произойдет, если для некоторого $i$ ошибка $\\varepsilon_i$ будет очень большой.\n", "\n", "\n", "*Замечания.*\n", "1. Это теоретическая задача, не перепутайте 😄\n", "2. В ответе во всех пунктах могут оставаться суммы $n$ слагаемых, но не должно быть операций с векторами или матрицами.\n", "3. **Прочитайте требования к формату решения в правилах сдачи задания.**" ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "146d04157c07b08ee58d3eafdcf82c32", "snippet_label": "end" } }, "source": [ "**Решение:**\n", "\n", "..." ] }, { "cell_type": "markdown", "metadata": { "id": "zaNoiiavoWEd" }, "source": [ "\n", "\n", "---\n", "### Задача 2.\n", "\n", "*Перед выполнением задачи ознакомтесь с ноутбуком по линейной регрессии с занятия.*\n", "\n", "Скоро весна и лето — идеальное время года для путешествий и прогулок на велосипедах. В крупных городах обычно развиты сети проката велосипедов или самокатов, предоставляющие удобный сервис. Одной из важных задач таких компаний является прогнозирование количества арендованных велосипедов в зависимости от времени года и погодных условий.\n", "\n", "Рассмотрим датасет Bike Sharing Dataset от компании Capital Bikeshare, располагающей автоматизированными пунктами проката велосипедов. В датасете по дням записаны календарная информация и погодные условия, а также число прокатов в этот день. Цель — предсказать количество арендованных велосипедов по остальным характеристикам.\n", "\n", "\n", "\n", "Будем работать только со следующими признаками:\n", "* `season`: время года: 1 — зима, 2 — весна, 3 — лето, 4 — осень;\n", "* `mnth`: месяц от 1 до 12;\n", "* `holiday`: является ли текущий день праздничным;\n", "* `weekday`: день недели от 0 до 6;\n", "* `workingday`: является ли текущий день рабочим или выходным;\n", "* `weathersit`: оценка благоприятности погоды от 1 (чистый, ясный день) до 4 (ливень, туман);\n", "* `temp`: температура в Цельсиях;\n", "* `atemp`: температура по ощущениям в Цельсиях;\n", "* `hum`: влажность воздуха;\n", "* `windspeed`: скорость ветра;\n", "* `cnt`: количество арендованных велосипедов в текущий день.\n", "\n", "---\n", "\n", "Скачайте данные, загрузите их с помощью `pandas` и разделите на обучающую и тестовую части в соотношении 4:1. Далее всю аналитику необходимо проводить только на обучающей части данных." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "MVqDzpcRoWEd" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "7e2346d718d374e3f957928b573e2a30", "snippet_label": "start" }, "id": "Rlbq9wRloWEd" }, "source": [ "\n", "\n", "#### 1. Визуальный анализ\n", "\n", "Посмотрите по графикам, как *целевой признак зависит от остальных* и поймите характер этой зависимости. Старайтесь строить информативные графики, а из финального решения убирать те, которые не пригодились.\n", "\n", "Какие признаки категориальные, а какие — вещественные? Учтите это при построении информативных графиков.\n", "\n", "*Указание*. Среди признаков есть такие, значения которых как-то упорядочены, и их относительно небольшое количество. Чтобы понять, являются ли они категориальными, попробуйте понять, как с их значениями будут работать линейные модели. Иначе говоря, допустимо ли с точки зрения природы данных выполнять арифметические операции между *любыми* значениями этого признака, согласуется ли это со смыслом, который несет в себе данный признак?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ai_eval_tool": { "snippet_hash": "7e2346d718d374e3f957928b573e2a30", "snippet_label": "end" }, "id": "6ElRHZvBoWEd" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "4c1edb365b02e434e38deeb52b2096fa", "snippet_label": "start" }, "id": "W0utO6FLoWEe" }, "source": [ "\n", "\n", "Сделайте выводы по графикам. В частности, ответьте на следующие вопросы.\n", "* Есть ли в данных явные выбросы, то есть точки, далеко находящиеся от основной массы точек?\n", "* Стоит ли рассматривать какие-либо нелинейные функции от признаков? Не стоит придумывать сложные функции, достаточно рассмотреть $x^2$, $\\log x$ и $I\\{x > c\\}$.\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "4c1edb365b02e434e38deeb52b2096fa", "snippet_label": "end" }, "id": "rmf5JAaZoWEe" }, "source": [ "**Выводы по графикам:** ..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "e5fcb54a72af33e2c09b66124e63e5fc", "snippet_label": "start" }, "id": "3yFmlFFroWEe" }, "source": [ "\n", "\n", "#### 2. Подготовка данных\n", "\n", "Опишите по шагам процедуру предобработки данных, которая будет включать работу с выбросами, преобразования вещественных и категориальных признаков, возможно, создание каких-либо новых признаков (посмотрите пример с занятия). То, как именно выполнять подготовку данных, является целым исскуством. Здесь нет \"правильного\" подхода, здесь есть метрика качества на тестовом множестве, которая в последствии оценит качество вашей модели.\n", "\n", "*Обратите внимание, от того, насколько качественно вы проведете визуальный анализ и подготовку данных, будет зависеть качество ваших моделей на следующих шагах.*\n", "\n", "**Процедура предобработки данных:**" ] }, { "cell_type": "markdown", "metadata": { "id": "tMYAiMjWoWEe" }, "source": [ "**a).** ..." ] }, { "cell_type": "markdown", "metadata": { "id": "sdpU3rZHoWEf" }, "source": [ "Реализуйте данную процедуру." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ai_eval_tool": { "snippet_hash": "e5fcb54a72af33e2c09b66124e63e5fc", "snippet_label": "end" }, "id": "zwkRgNImoWEf" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "c5124704b109dacbd9cf5647f50eb72c", "snippet_label": "start" }, "id": "lTS2CoiIoWEf" }, "source": [ "\n", "\n", "#### 3. Обучение модели и ее анализ\n", "\n", "Обучите линейную регрессию из `sklearn` на полученных данных и посмотрите на полученные оценки коэффициентов (в т.ч. свободный коэффициент)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ai_eval_tool": { "snippet_hash": "c5124704b109dacbd9cf5647f50eb72c", "snippet_label": "end" }, "id": "MrPj9XfeoWEf" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "0e8e860f57fc7df75f236442f7206c78", "snippet_label": "start" }, "id": "Ovm4yjiGoWEf" }, "source": [ "\n", "\n", "Посчитайте ошибку предсказания на тестовой выборке по метрикам RMSE, MAE, MAPE. Подробнее можно почитать в ноутбуке с занятия.\n", "\n", "*Замечание.* Если в тестовой части тоже есть \"большие\" выбросы, их стоит убрать. Наша модель не должна пытаться их предсказать (например, сбои в работе сервиса) но в то же время выбросы вносят существенный вклад в значение метрики. Особенно стоит обратить на это внимание в случае высоких значений метрик." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ai_eval_tool": { "snippet_hash": "0e8e860f57fc7df75f236442f7206c78", "snippet_label": "end" }, "id": "_qsXMDU7oWEf" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "82920a034ed2865f8a7e2f03eaabceb6", "snippet_label": "start" }, "id": "_Bz_2sX5oWEf" }, "source": [ "\n", "\n", "Попробуйте посчитать оценку коэффициентов с помощью формулы, полученной на занятии. Не забудьте про константный признак. В чем заключается проблема?\n", "\n", "*Подсказка.* Подумайте о зависимостях между признаками. Причем, возможно, вы уже могли решить эту проблему на предыдущих этапах. В таком случае посмотрите, что будет, если \"вернуть\" проблему." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "82920a034ed2865f8a7e2f03eaabceb6", "snippet_label": "end" }, "id": "fooG35mpoWEf" }, "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "56aff27d604dbe90dda7b28a8da4e2e9", "snippet_label": "start" }, "id": "8zXL8x-JoWEg" }, "source": [ "\n", "\n", "Исправьте эту проблему, посчитайте оценки коэффициентов, а также ошибку предсказания." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ai_eval_tool": { "snippet_hash": "56aff27d604dbe90dda7b28a8da4e2e9", "snippet_label": "end" }, "id": "muQCyj8XoWEg" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "52266029600cdfda3b1cfce9e68f5c99", "snippet_label": "start" }, "id": "P9N3n2GAoWEg" }, "source": [ "\n", "\n", "Сделайте выводы." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "52266029600cdfda3b1cfce9e68f5c99", "snippet_label": "end" }, "id": "Sx5n7fdNoWEg" }, "source": [ "**Выводы:**\n", "\n", "..." ] }, { "cell_type": "markdown", "metadata": { "id": "eDX7nVIuoWEg" }, "source": [ "\n", "\n", "*Замечание.* Не расстраивайтесь, если у вас получится не очень хорошее качество, это нормально. Вы провели только небольшую предобработку данных и обучили *простую* модель. Более сложные методы обработки данных и обучения ждут вас впереди. Главное — с чего-то начать!\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "2c0205cf5ab3ec02c6ea667faa01e48b", "snippet_label": "start" }, "id": "-jym5lqSqxha" }, "source": [ "\n", "\n", "---\n", "### Задача 3." ] }, { "cell_type": "markdown", "metadata": { "id": "iI8OJHhiqRhk" }, "source": [ "*Перед выполнением задачи ознакомтесь с ноутбуком по логистической регрессии с занятия.*\n", "\n", "> Одно из интересных свойств модели логистической регрессии — *при соблюдении её предположений* она дает возможность получать **несмещенные оценки вероятностей** принадлежности объекта к определенному классу. \n", "> Для пояснения рассмотрим объект $x$ и соответствующее предсказание вероятности $\\widehat{p}(x)$ для класса 1. Если взять небольшую окрестность объекта $x$, то доля объектов класса 1 в этой окрестности будет приблизительно равна $\\widehat{p}(x)$. \n", "\n", "Далее проверим это свойство на конкретных примерах.\n", "\n", "С помощью кода ниже сгенерируйте данные, состоящие из одного вещественного признака и бинарного таргета." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "JwYNbh68qKFx" }, "outputs": [], "source": [ "sample_size = 3000 # Размер выборки\n", "\n", "# Признаки\n", "X = np.random.uniform(low=-4, high=4, size=(sample_size, 1))\n", "\n", "# Таргет\n", "y_mean_true = 1 / (1 + np.exp(1 - 2 * X.ravel()))\n", "y = np.random.binomial(n=1, p=y_mean_true)\n", "\n", "plt.figure(figsize=(10, 3))\n", "plt.scatter(X, y_mean_true, marker=\".\", s=1, label=\"Реальные вероятности\\n(мы их не знаем)\")\n", "plt.scatter(X, y, marker=\"|\", alpha=0.1, label=\"Данные\")\n", "plt.xlabel(\"Признак\")\n", "plt.ylabel(\"Класс объекта\")\n", "plt.legend();" ] }, { "cell_type": "markdown", "metadata": { "id": "SuGffKQWqTgP" }, "source": [ "Обучите логистическую регрессию, используя реализацию из `sklearn`, при этом свободный коэффициент должен присутствовать в модели. Укажите также `penalty='none'`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "bYEdWOT2qW2J" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "id": "H80yPQ1cqY7P" }, "source": [ "Напечатайте оценку коэффициентов" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "VZ4itf7UqapC" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "id": "7lZwMvaNqbvL" }, "source": [ "Ниже объявлена сетка значений признака. По этой сетке постройте\n", "* предсказания классов,\n", "* предсказания вероятностей класса 1.\n", "\n", "Визуализируйте эти предсказания. На график стоит нанести также обучающую выборку." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "-689880DqdON" }, "outputs": [], "source": [ "X_grid = np.linspace(-4, 4, 10000).reshape((-1, 1))\n", "..." ] }, { "cell_type": "markdown", "metadata": { "id": "iMJx4bblqevG" }, "source": [ "Разбейте отрезок $[-4, 4]$ на одинаковые бины длины длины 0.2 и посчитайте в каждом бине долю объектов класса 1. Полученные значения добавьте на график предсказаний вероятностей и сравните эти графики. Проинтерпретируйте полученные результаты.\n", "\n", "*Подсказка:* может помочь `np.digitize` и метод `groupby` для таблиц `pandas`. Рекомендуем посмотреть обучающие ноутбуки по библиотекам." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "hSKK8i7cqnpR" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "id": "uo-f83HMqn4y" }, "source": [ "Повторите проведенное исследование для следующих данных и сравните результаты." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "5ajXblBRqgpJ" }, "outputs": [], "source": [ "# Признаки\n", "X = np.random.uniform(low=-4, high=4, size=(sample_size, 1))\n", "\n", "# Таргет\n", "y_mean_true = 1 / (1 + np.exp(-100 * X.ravel()))\n", "y = np.random.binomial(n=1, p=y_mean_true)\n", "\n", "plt.figure(figsize=(10, 3))\n", "plt.scatter(X, y_mean_true, marker=\".\", s=1, label=\"Реальные вероятности\")\n", "plt.scatter(X, y, marker=\"|\", alpha=0.1, label=\"Данные\")\n", "plt.xlabel(\"Признак\")\n", "plt.ylabel(\"Класс объекта\")\n", "plt.legend();" ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "2c0205cf5ab3ec02c6ea667faa01e48b", "snippet_label": "end" }, "id": "BN1dDhhtqq-j" }, "source": [ "**Выводы:**\n", "\n", "..." ] }, { "cell_type": "markdown", "metadata": { "id": "lnh_fbggq0db" }, "source": [ "---\n", "### Задача 4." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "f92a2876d3f2b0d01fc396776be023a9", "snippet_label": "start" }, "id": "ZojQJLc8q9D9" }, "source": [ "\n", "\n", "Продолжим исследовать модель логистической регрессии. Сгенерируем данные, состоящие из двух бинарных признаков и бинарного таргета" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "5-NC9xytq2kR" }, "outputs": [], "source": [ "probs = np.random.uniform(size=8)\n", "probs /= probs.sum()\n", "probs\n", "\n", "x = np.random.choice(np.arange(8), p=probs, size=10000)\n", "data = pd.DataFrame(\n", " np.unpackbits(np.array(x.reshape(-1, 1), dtype=\">i8\").view(np.uint8), axis=1)[:, -3:],\n", " columns=[\"feature_1\", \"feature_2\", \"target\"],\n", ")\n", "data.head()" ] }, { "cell_type": "markdown", "metadata": { "id": "cZe7L0Quq_Aa" }, "source": [ "Особенность таких данных — конечное число *возможных различных* объектов. В данном случае их всего 4, по количеству всех возможных комбинаций значений признака. Соответственно, любой моделью мы можем сделать только 4 *различных* предсказания. Исследуем, как с этим справляется логистическая регрессия.\n", "\n", "Сначала для сравнения посчитайте долю класса 1 для каждой категории объектов.\n", "\n", "*Подсказка:* используйте `pd.pivot_table`. Рекомендуем посмотреть обучающие ноутбуки по библиотекам." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ai_eval_tool": { "snippet_hash": "f92a2876d3f2b0d01fc396776be023a9", "snippet_label": "end" }, "id": "cG1DiCRkrAUR" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "14e68d57d58f901b3350e63f76b9f8db", "snippet_label": "start" }, "id": "7zN9tKwxrB9E" }, "source": [ "\n", "\n", "Обучите логистическую регрессию с `penalty='none'` и получите предсказания вероятностей для этих четырех типов объектов. Представьте результаты в таком виде, чтобы их удобно было сравнивать с частотами, посчитанными ранее." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ai_eval_tool": { "snippet_hash": "14e68d57d58f901b3350e63f76b9f8db", "snippet_label": "end" }, "id": "jeOIdQZtrCLA" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "1b868a951c9dec0be47540d5316f7e9f", "snippet_label": "start" }, "id": "8D8fNLDprDrK" }, "source": [ "\n", "\n", "Почему результаты не совпадают?\n", "\n", "Для ответа на этот вопрос распишите формулу, которая задает модель логистической регрессии, указав все параметры. Какое предположение о данных при этом делает логистическая регрессия?" ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "1b868a951c9dec0be47540d5316f7e9f", "snippet_label": "end" } }, "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "1180c36f8ac39574c944b19ddee07271", "snippet_label": "start" }, "id": "SEzIE7sprFlH" }, "source": [ "\n", "\n", "Предложите и реализуйте способ построения модели логистической регрессии так, чтобы она точнее предсказывала частоты, посчитанные ранее." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Опишите ваше предложение:\n", "\n", "..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Реализация:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ai_eval_tool": { "snippet_hash": "1180c36f8ac39574c944b19ddee07271", "snippet_label": "end" }, "id": "nDyfSHDirD-w" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "3f951c224a4ac471c658ed7755ff9521", "snippet_label": "end" }, "id": "0Tth43N9rGHF" }, "source": [ "\n", "\n", "**Выводы:**\n", "\n", "..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "---\n", "### Сложная часть" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Задачи 5-7: скачайте второй ноутбук с условием задания со страницы курса." ] } ], "metadata": { "colab": { "provenance": [], "toc_visible": true }, "hide_input": false, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 1 }