{
"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"
}
}
]
}