{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "source": [ "# Phystech@DataScience\n", "## Домашнее задание 13\n", "\n", "**Правила, прочитайте внимательно:**\n", "\n", "* Выполненную работу нужно отправить телеграм-боту `@miptstats_pds_bot`. Для начала работы с ботом каждый раз отправляйте `/start`. **Работы, присланные иным способом, не принимаются.**\n", "* Дедлайн см. в боте. После дедлайна работы не принимаются кроме случаев наличия уважительной причины.\n", "* Прислать нужно ноутбук в формате `ipynb`.\n", "* Выполнять задание необходимо полностью самостоятельно. **При обнаружении списывания все участники списывания будут сдавать устный зачет.**\n", "* Решения, размещенные на каких-либо интернет-ресурсах, не принимаются. Кроме того, публикация решения в открытом доступе может быть приравнена к предоставлении возможности списать.\n", "* Для выполнения задания используйте этот ноутбук в качестве основы, ничего не удаляя из него. Можно добавлять необходимое количество ячеек.\n", "* Комментарии к решению пишите в markdown-ячейках.\n", "* Выполнение задания (ход решения, выводы и пр.) должно быть осуществлено на русском языке.\n", "* Если код будет не понятен проверяющему, оценка может быть снижена.\n", "* Никакой код из данного задания при проверке запускаться не будет. *Если код студента не выполнен, недописан и т.д., то он не оценивается.*\n", "* **Код из рассказанных на занятиях ноутбуков можно использовать без ограничений.**\n", "\n", "**Правила оформления теоретических задач:**\n", "\n", "* Решения необходимо прислать одним из следующих способов:\n", " * фотографией в правильной ориентации, где все четко видно, а почерк разборчив,\n", " * отправив ее как файл боту вместе с ноутбуком *или*\n", " * вставив ее в ноутбук посредством `Edit -> Insert Image` (фото, вставленные ссылкой, не принимаются);\n", " * в виде $\\LaTeX$ в markdown-ячейках.\n", "* Решения не проверяются, если какое-то требование не выполнено. Особенно внимательно все проверьте в случае выбора второго пункта (вставки фото в ноутбук). Неправильно вставленные фотографии могут не передаться при отправке. Для проверки попробуйте переместить `ipynb` в другую папку и открыть его там.\n", "* В решениях поясняйте, чем вы пользуетесь, хотя бы кратко. Например, если пользуетесь независимостью, то достаточно подписи вида \"*X и Y незав.*\"\n", "* Решение, в котором есть только ответ, и отсутствуют вычисления, оценивается в 0 баллов.\n", "\n", "**Баллы за задание:**\n", "\n", "Легкая часть (достаточно на \"хор\"):\n", "* 75 баллов\n", "\n", "\n", "Cложная часть (необходимо на \"отл\"):\n", "* 75 баллов\n", "\n", "\n", "\n", "\n", "\n", "\n", "-----" ], "metadata": { "id": "vRqD6ZuMEpkX" } }, { "cell_type": "markdown", "source": [ "### *Профиль физика*\n", "Набор данных суперсимметрии поддерживает двоичную классификацию событий столкновений в физике элементарных частиц на основе собранных особенностей столкновений. Вам будет необходимо научиться предсказывать вид события в зависимости от физических параметров частиц после столкновения.\n", "\n", "Данные состоят из следующих функций:\n", "\n", "* `target class` : метки классов, где 0 - фоновое событие, 1 - суперсимметричное событие.\n", "* `L1pT` : импульс, поперечный лучу лептона 1\n", "* `L1eta` : псевдобыстрота лептона 1\n", "* `L1phi` : азимутальный угол лептона 1\n", "* `L2pT` : импульс, поперечный лучу лептона 2\n", "* `L2eta` : псевдобыстрота лептона 2\n", "* `L2phi` : азимутальный угол лептона 2\n", "* `missing energy magnitude` : количество недостающего поперечного импульса\n", "* `missing energy phi` : азимутальный угол недостающего поперечного импульса\n", "\n", "Остальные 10 признаков получены из первых 8 непосредственно измеренных признаков. Эти последние 10 функций — это функции, которые физики элементарных частиц разработали для улучшения своей задачи по обнаружению событий. Подробнее про оригинальное исследование можете посмотреть в прикрепленной статье.\n" ], "metadata": { "id": "LRBWEQOxxwle" } }, { "cell_type": "markdown", "source": [ "*Суперсимметрия — это теоретическая основа физики элементарных частиц, которая предлагает принцип симметрии, связывающий фермионы (частицы с полуцелым спином) и бозоны (частицы с целым спином). Эта инновационная теория вводит концепцию суперсимметричного партнера для каждой известной элементарной частицы, которая отличается по спину на 1/2, но имеет другие фундаментальные свойства, такие как заряд и масса.*\n" ], "metadata": { "id": "MCcxzKCaFMr_" } }, { "cell_type": "markdown", "source": [ "### *Профиль биология*\n", "\n", "Набор данных включает 171 молекулу, предназначенную для функциональных доменов белка CRY1, ответственного за формирование циркадного ритма. 56 молекул токсичны, а остальные нетоксичны.\n", "\n", "Полученные данные представляют собой полный набор из 1203 молекулярных дескрипторов." ], "metadata": { "id": "779-UxHp3h8R" } }, { "cell_type": "markdown", "source": [ "Данное домашнее задание имеет свободную форму, то есть вашей задачей будет для каждого класса моделей получить лучший результат и после выбрать наилучшую модель. Метрика для задачи - `from sklearn.metrics import f1_score`. Работа будет оцениваться по следующим ключевым пунктам:\n", "\n", "\n", "1. Предвартельный анализ данных\n", "2. Предобработка данных\n", " 1. Обработка пропусков\n", " 2. Обработка выбросов\n", "\n", "3. Реализация моделей\n", " 1. Дерево\n", " 2. Лес\n", " 3. Логистическая регрессия\n", " 4. KNN\n", " 5. MLP\n", "\n" ], "metadata": { "id": "Zy-x7atXGekR" } }, { "cell_type": "markdown", "source": [ "## Предварительный анализ данных" ], "metadata": { "id": "xHPwwPcdJ_5g" } }, { "cell_type": "code", "source": [ "import numpy as np\n", "import pandas as pd\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "from sklearn.impute import SimpleImputer\n", "from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.linear_model import LogisticRegression, LinearRegression, Ridge, Lasso, ElasticNet\n", "from sklearn import tree\n", "from sklearn.neighbors import KNeighborsClassifier\n", "\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.metrics import accuracy_score, classification_report, f1_score, mean_absolute_percentage_error\n", "\n", "import torch\n", "import torch.nn as nn\n", "import torch.optim as optim\n", "from torch.utils.data import DataLoader, TensorDataset\n", "plt.style.use('classic')\n", "\n", "import warnings\n", "warnings.filterwarnings(\"ignore\")" ], "metadata": { "id": "XqsS6q2_QZA_" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "В этом разделе ожидается, что вы посмотрите на распределение признаков и классов, изучите их связь, проанализируете признаки на наличие в них пропусков или выбросов." ], "metadata": { "id": "iioJPx-HKleJ" } }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "rIbR09AdEXML" }, "outputs": [], "source": [ "df = pd.read_csv(<...>)\n" ] }, { "cell_type": "markdown", "source": [ "**Выводы:**" ], "metadata": { "id": "UDHS6jCRUk_4" } }, { "cell_type": "markdown", "source": [ "## Предобработка данных" ], "metadata": { "id": "vvcRb5NKMF_a" } }, { "cell_type": "markdown", "source": [ "В этом разделе ожидается, что вы обработаете пропуски (если они есть) с помощью линейной регрессии, а выбросы (если они есть) обработайте способом на ваше усмотрение. Для оценки качества обработки пропусков используйте метрику MAPE." ], "metadata": { "id": "D6o21LUtMPDI" } }, { "cell_type": "code", "source": [ "<...>" ], "metadata": { "id": "1SHm3npKM-1w" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "## Обучение моделей" ], "metadata": { "id": "PIvTjeLIPLRS" } }, { "cell_type": "code", "source": [ "#Для предварительного обучения выберите первые N <= 100000 строк, обучение лучшей модели можете произвести на всем датасете\n", "\n", "#для теста используйте 30% выборки, размер валидационной выборки выберите на ваше усмотрение\n", "<...>" ], "metadata": { "id": "t7iCTDXDPOAV" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "### DecisionTreeClassifier" ], "metadata": { "id": "Lm_2Vo95QqHt" } }, { "cell_type": "code", "source": [ "<...>" ], "metadata": { "id": "x7FpQ17cRV6A" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "**Выводы:**" ], "metadata": { "id": "BlXOd25cRwhB" } }, { "cell_type": "markdown", "source": [ "### RandomForestClassifier" ], "metadata": { "id": "l9--zmnfRTl_" } }, { "cell_type": "code", "source": [ "<...>" ], "metadata": { "id": "mvSDNyRwR6sm" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "**Выводы:**" ], "metadata": { "id": "aBV_Tv1aSSNu" } }, { "cell_type": "markdown", "source": [ "### LogisticRegression" ], "metadata": { "id": "Ucz276CrSV1L" } }, { "cell_type": "code", "source": [ "<...>" ], "metadata": { "id": "fzmlg6liSb2z" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "**Выводы:**" ], "metadata": { "id": "Dccrkag9UWWU" } }, { "cell_type": "markdown", "source": [ "### KNeighborsClassifier" ], "metadata": { "id": "Mm--URZhTGQQ" } }, { "cell_type": "code", "source": [ "<...>" ], "metadata": { "id": "J0tm9o6RTHf-" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "**Выводы:**" ], "metadata": { "id": "k3OQEDnIUhie" } }, { "cell_type": "markdown", "source": [ "### Нейронная сеть" ], "metadata": { "id": "atU1_H6HUy0a" } }, { "cell_type": "markdown", "source": [ "В этом разделе предлагается самостоятельно создать и обучить нейронную сеть, про интересные структуры вы можете посмотреть на последней странице статьи." ], "metadata": { "id": "S4aemZb9Xzy0" } }, { "cell_type": "code", "source": [ "<...>" ], "metadata": { "id": "ypeum7sGQPin" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "## (Для физиков) Обучение лучшей модели на всем датасете\n", "\n" ], "metadata": { "id": "RvaCRfptajHj" } }, { "cell_type": "code", "source": [ "<...>" ], "metadata": { "id": "_VwKFGd_arZm" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "## Анализ полученных результатов и выводы по задаче" ], "metadata": { "id": "S94Q6wk8avIP" } }, { "cell_type": "markdown", "source": [ "**Выводы:**" ], "metadata": { "id": "BiCgAxm8a0Ax" } } ] }