Заполнение пропусков в конвейере
Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 47 из 58.
В реальных журналах есть пропуски, и большинство моделей не может с ними работать. SimpleImputer заполняет каждый пропуск средним, медианным или наиболее часто встречающимся значением в столбце.
Заполнить до разделения, и тестовые строки помогают выбрать это значение: утечка. Семь глубин погружения и один пропуск:
В конвейере fit вычисляет значения для заполнения только по обучающим строкам:
from sklearn.impute import SimpleImputer
pipe = make_pipeline(SimpleImputer(strategy="median"), StandardScaler(), model)
pipe.fit(X_train, y_train)
print(pipe[0].statistics_) # значения для заполнения пропусков на первом этапеДля журнала погружений (глубина, минуты, температура воды) это выводит:
[19. 44. 21.]Для слов шаги чисел тоже становятся одной веткой ColumnTransformer:
lane = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())
("numbers", lane, ["depth_m", "minutes"])Задание
СреднеЛесная служба предсказывает, какие удары молнии вызывают пожары, но некоторые измерения отсутствуют. В стартовом коде разделяется wildfire.csv и считывается стратегия: mean или median.
- Обучи конвейер, состоящий из заполнителя с этой стратегией, масштабировщика и логистической регрессии. Выведи точность на тестовой выборке.
- Для каждого столбца выведи значение заполнения в конвейере и значение, которое получилось бы для всех строк
X, с точностью до 1 знака после запятой.
Другой лес, со стратегией median:
Test accuracy: 0.840
humidity_pct: fill 46.0, all rows would give 46.0
wind_kmh: fill 29.0, all rows would give 32.0
temp_c: fill 25.0, all rows would give 26.0
days_without_rain: fill 23.0, all rows would give 23.0Там, где значения различаются, заполнение перед разделением позволило бы тестовым строкам повлиять на обучающие данные.
Попробуйте сами
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
# Удары молнии в сухом лесу: вызвал ли удар пожар (1) или нет (0)?
# Некоторые метеорологические данные отсутствуют.
strikes = pd.read_csv("wildfire.csv")
columns = ["humidity_pct", "wind_kmh", "temp_c", "days_without_rain"]
X = strikes[columns]
y = strikes["fire"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
strategy = input()
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение с учителем
1Ваша первая модель
Обучение на примерахОбучающая и тестовая выборкиОбучение и предсказаниеОценка моделиПовторение: сортировщик семян4Логистическая регрессия
Предсказания «да» или «нет»Порог принятия решенияВеса как свидетельстваНесколько классовПовторение: спам-фильтр7Переобучение
Недообучение и переобучениеКривые обученияРегуляризацияПроверочные выборкиПовторение: настройка дерева10Конвейеры
КонвейерыСмешанные столбцыЗаполнение пропусков в конвейереНастройка конвейераПовторение: очистка данных и прогнозирование2Метод ближайших соседей
Как работает k-NNВыбор kГраницы принятия решенийМасштабирование признаков для поиска соседейПовторение: соседи для вин5Оценка классификаторов
Матрица ошибокТочность и полнотаF1-мераНесбалансированные классыROC-кривыеПовторение: скрининговый тест8Кросс-валидация
K-блочная проверкаСправедливое сравнение моделейПоиск по сеткеПовторение: ремонт скейтбордов11Проект: виды пингвинов
Знакомство с пингвинамиПодготовка данныхВыбор моделиНастройка лучшей моделиЗапуск моделиПотренируйтесь самостоятельно: Онлайн-компилятор Python