LogisticRegression-Naranchesko
Домашнее задание 4: Логистическая регрессия
Постановка задачи
В этом задании предстоит разработать модель машинного обучения для диагностики диабета на основе медицинских показателей пациентов
Мы будем использовать классический датасет Pima Indians Diabetes
Ваша задача - не просто обучить модель (), а построить полноценный пайплайн, который включает:
- Грамотную предобработку данных (чистка, заполнение пропусков, масштабирование).
- Обучение Логистической регрессии.
- Комплексную оценку качества с использованием метрик классификации.
Структура проекта
Как начать
Мы используем менеджер пакетов .
- Инициализация:
- Запуск тестов:
Сразу после скачивания тесты будут падать. Ваша задача - сделать их зелеными.
Задание
Необходимо реализовать методы класса в файле .
Этап 1: Предобработка данных (preprocess_data)
Данные содержат "скрытые" пропуски. Например, у человека не может быть или . В этом датасете нули используются как заглушка для отсутствующих данных.
Что нужно сделать:
- В колонках
заменить значения['Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI']на0.NaN - Разделить данные на матрицу признаков и вектор ответов (колонка
).Outcome - Заполнение пропусков (Imputation): Используйте
(медиана), чтобы заполнитьSimpleImputer.NaN - Масштабирование (Scaling): Используйте
, чтобы привести признаки к нормальному виду (среднее 0, дисперсия 1).StandardScaler
Это критически важно для Логистической регрессии
Важно про Data Leakage:
Метод принимает флаг .
- Если
: Вы должны обучить (is_training=True) импьютер и скейлер на данных, а потом применить их (fit).transform - Если
: Вы должны только применить (is_training=False) уже обученные инструменты.transform
Нельзя пересчитывать среднее на тестовой выборке
Этап 2: Обучение (train)
- Вызвать
с флагомpreprocess_data.is_training=True - Обучить модель
(этоself.modelиз sklearn) на полученных данных.LogisticRegression
Этап 3: Предсказание (predict и predict_proba)
- Вызвать
с флагомpreprocess_data.is_training=False : Вернуть классы (0 или 1).predict: Вернуть вероятность класса 1 (вам нужна вторая колонка результата метода sklearn).predict_proba
Этап 4: Оценка (evaluate)
Метод должен возвращать словарь с ключевыми метриками:
(Доля правильных ответов)Accuracy(Точность)Precision(Полнота)Recall(Гармоническое среднее)F1 Score(Площадь под ROC-кривой)ROC-AUC
Подсказки
- Pandas: Для замены нулей удобно использовать
.df[cols] = df[cols].replace(0, np.nan) - Sklearn:
- для трейна.scaler.fit_transform(X)- для теста.scaler.transform(X)
- Логистическая регрессия: Убедитесь, что вы возвращаете
именно для класса 1 (положительного класса), а не матрицу для обоих классов.predict_proba
Критерии успеха
- Все тесты (
) проходят успешно.pytest - В коде нет Data Leakage (скалер не обучается на тесте).
- Метрика ROC-AUC на тестовых данных должна быть адекватной (выше 0.7).