Восстановление пропущенных значений

Machine LearningMachine LearningBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Многие реальные датасеты содержат пропущенные значения, что может вызывать проблемы при использовании алгоритмов машинного обучения, которые предполагают полные и числовые данные. В таких случаях важно правильно обрабатывать пропущенные значения, чтобы максимизировать использование доступных данных. Одна из распространенных стратегий - это импуттация, которая заключается в заполнении пропущенных значений на основе известной части данных.

В этом руководстве мы рассмотрим различные стратегии для импуттации пропущенных значений с использованием scikit-learn, популярной библиотеки машинного обучения на Python.

Советы по работе с ВМ

После запуска ВМ нажмите в верхнем левом углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/impute("Impute") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/impute -.-> lab-71131{{"Восстановление пропущенных значений"}} ml/sklearn -.-> lab-71131{{"Восстановление пропущенных значений"}} end

Импортируем необходимые модули

Сначала нам нужно импортировать необходимые модули из библиотеки scikit-learn. Мы будем использовать класс SimpleImputer для одномерной (унивариатной) импуттации признаков и класс IterativeImputer для многомерной (мультивариатной) импуттации признаков.

import numpy as np
from sklearn.impute import SimpleImputer, IterativeImputer

Одномерная (унивариатная) импуттация признаков с использованием SimpleImputer

Класс SimpleImputer предоставляет базовые стратегии для импуттации пропущенных значений в одномерном (унивариатном) режиме. Мы можем выбрать из различных стратегий, таких как замена пропущенных значений константным значением или использование среднего, медианы или наиболее часто встречающегося значения каждой колонки для заполнения пропущенных значений.

Прежде всего рассмотрим стратегию среднего значения. Создадим экземпляр SimpleImputer и подгоним его под наши данные, чтобы изучить стратегию импуттации. Затем мы сможем использовать метод transform для заполнения пропущенных значений на основе изученной стратегии.

imp = SimpleImputer(strategy='mean')
X = [[1, 2], [np.nan, 3], [7, 6]]
imp.fit(X)
X_test = [[np.nan, 2], [6, np.nan], [7, 6]]
imputed_X_test = imp.transform(X_test)

Многомерная (мультивариатная) импуттация признаков с использованием IterativeImputer

Класс IterativeImputer представляет собой более продвинутый подход к импуттации пропущенных значений. Он моделирует каждый признак с пропущенными значениями как функцию других признаков и использует эти оценки для импуттации. Он итеративно обучает зависимости между признаками и заполняет пропущенные значения на основе этих зависимостей.

imp = IterativeImputer()
X = [[1, 2], [3, 6], [4, 8], [np.nan, 3], [7, np.nan]]
imp.fit(X)
X_test = [[np.nan, 2], [6, np.nan], [np.nan, 6]]
imputed_X_test = imp.transform(X_test)

Импуттация значений с использованием ближайших соседей с помощью KNNImputer

Класс KNNImputer обеспечивает импуттацию для заполнения пропущенных значений с использованием метода k-ближайших соседей. Он находит ближайших соседей для каждой выборки с пропущенными значениями и заполняет пропущенные значения признаков на основе значений соседей.

from sklearn.impute import KNNImputer
nan = np.nan
X = [[1, 2, nan], [3, 4, 3], [nan, 6, 5], [8, 8, 7]]
imputer = KNNImputer(n_neighbors=2)
imputed_X = imputer.fit_transform(X)

Сохранение постоянного числа признаков

По умолчанию, импутаторы scikit-learn удаляют столбцы, содержащие только пропущенные значения. Однако, в некоторых случаях необходимо сохранить пустые признаки, чтобы сохранить форму данных. Мы можем это сделать, установив параметр keep_empty_features в значение True.

imputer = SimpleImputer(keep_empty_features=True)
X = np.array([[np.nan, 1], [np.nan, 2], [np.nan, 3]])
imputed_X = imputer.fit_transform(X)

Отметка заполненных значений с использованием MissingIndicator

Трансформер MissingIndicator полезен для индикации наличия пропущенных значений в наборе данных. Его можно использовать совместно с импуттацией, чтобы сохранить информацию о том, какие значения были заполнены. Этот трансформер возвращает бинарную матрицу, указывающую на наличие пропущенных значений в наборе данных.

from sklearn.impute import MissingIndicator
X = np.array([[-1, -1, 1, 3], [4, -1, 0, -1], [8, -1, 1, 0]])
indicator = MissingIndicator()
mask_missing_values_only = indicator.fit_transform(X)

Обзор

В этом руководстве мы изучили различные стратегии для заполнения пропущенных значений с использованием scikit-learn. Мы рассмотрели одномерную (унивариатную) импуттацию признаков с использованием SimpleImputer, многомерную (мультивариатную) импуттацию признаков с использованием IterativeImputer, импуттацию с использованием ближайших соседей с помощью KNNImputer, сохранение постоянного числа признаков и отметку заполненных значений с использованием MissingIndicator. Эти методы могут быть ценными инструментами для обработки пропущенных данных и обеспечения возможности применения алгоритмов машинного обучения к неполным наборам данных.