Отсутствующие значения в наборе данных - это серьезная проблема, прежде чем мы сможем перейти к моделированию. Многие алгоритмы машинного обучения требуют, чтобы эти пропущенные значения были вменены, прежде чем продолжить.
Популярный (наименее затратный с точки зрения вычислений) способ, который пытаются использовать многие специалисты по данным, - это использовать 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