Найти в Дзене

Заполнение пропусков методом К-ближайших соседей.

from sklearn.impute import KNNImputer

imputer=KNNImputer(n_neighbors=5, weights='uniform')

imputer.fit(df)

imputer.transform(df)

Простой код, но к сожалению его нельзя применить на неподготовленном датасете. Метод не работает со строковыми значениями. А еще он основан на "расстоянии" между ближайшими соседями. Значит данные нужно нормализовать перед использованием.

Простой способ избавиться от текстовых категорий - "One Hot Encoding"

cat_variables = df[['Geography', 'Gender']]

cat_dummies = pd.get_dummies(cat_variables, drop_first=True)

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

df_knn = df.drop(['Geography', 'Gender'], axis=1)

df_knn = pd.concat([df_knn, cat_dummies], axis=1)

Для нормализации можно использовать StandardScaler или MinMaxScaler.

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()

df_knn = pd.DataFrame(scaler.fit_transform(df_knn), columns = df_knn.columns)

Ну вот теперь то уже можно использовать метод заполнения пропусков К-ближайшими соседями.

df_knn = pd.DataFrame(imputer.fit_transform(df_knn), columns = df_knn.columns)

А все заполненные значения перекинуть в оригинальный датасет для дальнейшего использования.