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

Популярный (наименее затратный с точки зрения вычислений) способ, который пытаются использовать многие специалисты по данным, - это использовать mean / median / mode или, если это временной ряд, то lead или lag запись.

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

V0.22 scikit-learn изначально поддерживает KNN Imputer, который теперь официально является самым простым и лучшим (наименее затратным с точки зрения вычислений) способом вменения отсутствующего значения. Это трехэтапный процесс для вменения / заполнения NaN (отсутствующих значений). Этот пост представляет собой очень короткое руководство, в котором объясняется, как вычислить пропущенные значения с помощью KNNImputer.

Обязательно обновите свой scikit-learn

pip3 install -U scikit-learn

1. Загрузить KNNImputer

from sklearn.impute import KNNImputer

Как это работает?

Согласно scikit-learn документам:

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

Создание фрейма данных с отсутствующими значениями

Это та часть, где у вас есть фрейм данных df с пропущенными значениями.

2. Инициализировать KNNImputer.

Вы можете определить собственное значение n_neighbors (как типичное для алгоритма KNN)

imputer = KNNImputer(n_neighbors=2)

3. Внести / заполнить отсутствующие значения

df_filled = imputer.fit_transform(df)

Отображение заполненных данных

Ниже приведен снимок экрана полной записной книжки:

Заключение

Как видно выше, это весь процесс вменения отсутствующих значений. Это так же просто, как использовать mean или median, но более эффективно и точно, чем использование простого среднего. Благодаря новой встроенной поддержке в scikit-learn, это вменение хорошо вписывается в наш конвейер предварительной обработки.

Ссылки: https://scikit-learn.org/stable/modules/impute.html#knnimpute