Phystech@DataScience¶
Домашнее задание 5¶
Правила, прочитайте внимательно:
- Выполненную работу нужно отправить телеграм-боту
@miptstats_st_bot
. Для начала работы с ботом каждый раз отправляйте/start
. Дождитесь подтверждения от бота, что он принял файл. Если подтверждения нет, то что-то не так. Работы, присланные иным способом, не принимаются. - Дедлайн см. в боте. После дедлайна работы не принимаются кроме случаев наличия уважительной причины.
- Прислать нужно ноутбук в формате
ipynb
. Если вы строите интерактивные графики, их стоит прислать в формате html. - Следите за размером файлов. Бот не может принимать файлы весом более 20 Мб. Если файл получается больше, заранее разделите его на несколько.
- Выполнять задание необходимо полностью самостоятельно. При обнаружении списывания всем участникам списывания дается штраф -2 балла к итоговой оценке за семестр.
- Решения, размещенные на каких-либо интернет-ресурсах, не принимаются. Кроме того, публикация решения в открытом доступе может быть приравнена к предоставлении возможности списать.
- Обратите внимание на правила использования ИИ-инструментов при решении домашнего задания.
- Код из рассказанных на занятиях ноутбуков можно использовать без ограничений.
- Для выполнения задания используйте этот ноутбук в качестве основы, ничего не удаляя из него. Можно добавлять необходимое количество ячеек.
- Комментарии к решению пишите в markdown-ячейках.
- Выполнение задания (ход решения, выводы и пр.) должно быть осуществлено на русском языке.
- Решение проверяется системой ИИ-проверки
ThetaGrader. Результат проверки валидируется и исправляется человеком, после чего комментарии отправляются студентам.
- Если код будет не понятен проверяющему, оценка может быть снижена.
- Никакой код из данного задания при проверке запускаться не будет. Если код студента не выполнен, недописан и т.д., то он не оценивается.
Важно!!! Правила заполнения ноутбука:
- Запрещается удалять имеющиеся в ноутбуке ячейки, менять местами положения задач.
- Сохраняйте естественный линейный порядок повествования в ноутбуке сверху-вниз.
- Отвечайте на вопросы, а также добавляйте новые ячейки в предложенных местах, которые обозначены
<...>
. - В markdown-ячейка, содержащих описание задачи, находятся специальные отметки, которые запрещается модифицировать.
- При нарушении данных правил работа может получить 0 баллов.
Баллы за задание:
Легкая часть (достаточно на "хор"):
- Задача 1 — 80 баллов
Cложная часть (необходимо на "отл"):
- Задача 2 — 20 баллов
# Bot check
# HW_ID: phds_hw5
# Бот проверит этот ID и предупредит, если случайно сдать что-то не то.
# Status: not final
# Перед отправкой в финальном решении удали "not" в строчке выше.
# Так бот проверит, что ты отправляешь финальную версию, а не промежуточную.
# Никакие значения в этой ячейке не влияют на факт сдачи работы.
import numpy as np
import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.linear_model import LogisticRegression, LinearRegression, Ridge, Lasso, ElasticNet
from sklearn import tree
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report, f1_score, mean_absolute_percentage_error, roc_auc_score
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
plt.style.use('classic')
import warnings
warnings.filterwarnings("ignore")
Задача 1¶
Профиль физика¶
Набор данных суперсимметрии поддерживает двоичную классификацию событий столкновений в физике элементарных частиц на основе собранных особенностей столкновений. Вам будет необходимо научиться предсказывать вид события в зависимости от физических параметров частиц после столкновения.
Данные состоят из следующих функций:
target class
: метки классов, где 0 - фоновое событие, 1 - суперсимметричное событие.L1pT
: импульс, поперечный лучу лептона 1L1eta
: псевдобыстрота лептона 1L1phi
: азимутальный угол лептона 1L2pT
: импульс, поперечный лучу лептона 2L2eta
: псевдобыстрота лептона 2L2phi
: азимутальный угол лептона 2missing energy magnitude
: количество недостающего поперечного импульсаmissing energy phi
: азимутальный угол недостающего поперечного импульса Остальные 10 признаков получены из первых 8 непосредственно измеренных признаков. Эти последние 10 функций — это функции, которые физики элементарных частиц разработали для улучшения своей задачи по обнаружению событий. Подробнее про оригинальное исследование можете посмотреть в прикрепленной статье.
Суперсимметрия — это теоретическая основа физики элементарных частиц, которая предлагает принцип симметрии, связывающий фермионы (частицы с полуцелым спином) и бозоны (частицы с целым спином). Эта инновационная теория вводит концепцию суперсимметричного партнера для каждой известной элементарной частицы, которая отличается по спину на 1/2, но имеет другие фундаментальные свойства, такие как заряд и масса.
Профиль биология¶
Набор данных включает 171 молекулу, предназначенную для функциональных доменов белка CRY1, ответственного за формирование циркадного ритма. 56 молекул токсичны, а остальные нетоксичны.
Полученные данные представляют собой полный набор из 1203 молекулярных дескрипторов.
Данное домашнее задание имеет свободную форму, то есть вашей задачей будет для каждого класса моделей получить лучший результат и после выбрать наилучшую модель. Метрика для задачи - from sklearn.metrics import f1_score
. Работа будет оцениваться по следующим ключевым пунктам:
Предвартельный анализ данных
Предобработка данных
- Обработка пропусков
- Обработка выбросов
Реализация моделей
- Дерево
- Логистическая регрессия
- KNN
1. Предварительный анализ данных¶
В этом разделе ожидается, что вы посмотрите на распределение признаков и классов, изучите их связь, проанализируете признаки на наличие в них пропусков или выбросов.
df = pd.read_csv(<...>)
Выводы:
2. Предобработка данных¶
В этом разделе ожидается, что вы обработаете пропуски (если они есть) с помощью линейной регрессии, а выбросы (если они есть) обработайте способом на ваше усмотрение. Для оценки качества обработки пропусков используйте метрику MAPE.
<...>
3. Обучение моделей¶
#для теста используйте 30% выборки, размер валидационной выборки выберите на ваше усмотрение
<...>
DecisionTreeClassifier¶
<...>
Выводы:
LogisticRegression¶
<...>
Выводы:
KNeighborsClassifier¶
<...>
Выводы:
4. Анализ полученных результатов и выводы по задаче¶
Выводы:
Задача 2¶
В этой задаче вам нужно будет реализовать оптимальный подсчет метрики ROC-AUC. Вспомним, что ROC — кривая в координатах True Positive Rate (TPR) и False Positive Rate (FPR), а ROC-AUC — площадь под этой кривой.
TPR (True Positive Rate, полнота) показывает какую долю объектов положительного класса модель классифицировала правильно:
$$TPR = \dfrac{TP}{TP + FN}$$
FPR (False Positive Rate) показывает, какую долю из объектов негативного класса модель предсказала неверно:
$$FPR = \dfrac{FP}{FP + TN}$$
Предложите алгоритм расчета метрики за $\mathcal{O} \left(n \log n\right)$, где $n$ — размер выборки.
Подсказка. Подумайте сколько всего различных пар $\left(FPR, TPR\right)$ существует.<...>
Реализуйте предложенный алгоритм.
def roc_auc(y_true, y_score):
'''
Вычисляет ROC-AUC за O(n log(n))
:param y_true: истинные бинарные метки
:param y_score: предсказанная вероятность положительного класса
'''
<...>
return auc
Для самопроверки:
assert roc_auc([1, 0, 1, 1, 1], [0, 0.3, 0.2, 0, 0.5]) == 0.25