Перейти к содержимому

Knn imputer как работает

  • автор:

5- Импутация с использованием многомерного вменения с помощью цепного уравнения (MICE)

Этот тип вменения работает, заполняя недостающие данные несколько раз. Многочисленные вменения (МИ) намного лучше, чем одно вменение, так как они лучше измеряют неопределенность отсутствующих значений Подход цепных уравнений также очень гибок и может обрабатывать различные переменные разных типов данных (т. Е. Непрерывные или двоичные), а также такие сложности, как границы или схемы пропуска при опросе. Для получения дополнительной информации о механике алгоритма, вы можете обратиться к R электронная бумага

6- Вменение с использованием глубокого обучения (Datawig):

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

Вменение с использованием Datawig

Pros:

  • Довольно точный по сравнению с другими методами.
  • Он имеет некоторые функции, которые могут обрабатывать категориальные данные (Feature Encoder).
  • Он поддерживает процессоры и графические процессоры.

Минусы:

  • Одноколонное вменение.
  • Может быть довольно медленным с большими наборами данных.
  • Вы должны указать столбцы, которые содержат информацию о целевом столбце, который будет вменяться.

Другие методы вменения:

Стохастическая регрессия вменения:

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

Экстраполяция и интерполяция:

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

Горячее вложение:

Работает путем случайного выбора отсутствующего значения из набора связанных и похожих переменных.

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

Ссылки:

  • [1] Buuren, S.V. & Groothuis-Oudshoorn, K. (2011). Мыши: многовариантное вложение с помощью цепных уравнений в R. Journal of Statistical Software
  • https://impyute.readthedocs.io/en/master/index.html

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

По разным причинам многие наборы данных реального мира содержат пропущенные значения, часто закодированные как пробелы, NaN или другие заполнители. Однако такие наборы данных несовместимы с оценщиками scikit-learn, которые предполагают, что все значения в массиве являются числовыми, и что все они имеют и имеют значение. Основная стратегия использования неполных наборов данных — отбрасывать целые строки и / или столбцы, содержащие пропущенные значения. Однако это происходит ценой потери данных, которые могут быть ценными (хотя и неполными). Лучшая стратегия — это вменять недостающие значения, т. Е. Вывести их из известной части данных. См. Статью о восстановлении в Глоссарии общих терминов и элементов API .

6.4.1. Одномерное и многомерное восстановление

Одним из типов алгоритма восстановления является одномерный, который вменяет значения в i-м измерении признака, используя только не пропущенные значения в этом измерении признака (например, impute.SimpleImputer ). Напротив, многомерные алгоритмы восстановления используют весь набор доступных измерений характеристик для оценки недостающих значений (например, impute.IterativeImputer ).

6.4.2. Одномерное восстановление признаков

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

Следующий фрагмент демонстрирует, как заменить отсутствующие значения, закодированные как np.nan , с использованием среднего значения столбцов (ось 0), содержащих отсутствующие значения:

>>> import numpy as np >>> from sklearn.impute import SimpleImputer >>> imp = SimpleImputer(missing_values=np.nan, strategy='mean') >>> imp.fit([[1, 2], [np.nan, 3], [7, 6]]) SimpleImputer() >>> X = [[np.nan, 2], [6, np.nan], [7, 6]] >>> print(imp.transform(X)) [[4. 2. ] [6. 3.666. ] [7. 6. ]]

Класс SimpleImputer также поддерживает разреженные матрицы:

>>> import scipy.sparse as sp >>> X = sp.csc_matrix([[1, 2], [0, -1], [8, 4]]) >>> imp = SimpleImputer(missing_values=-1, strategy='mean') >>> imp.fit(X) SimpleImputer(missing_values=-1) >>> X_test = sp.csc_matrix([[-1, 2], [6, -1], [7, 6]]) >>> print(imp.transform(X_test).toarray()) [[3. 2.] [6. 3.] [7. 6.]]

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

Класс SimpleImputer также поддерживает категорические данные , представленные в виде строковых значений или панд categoricals при использовании ‘most_frequent’ или ‘constant’ стратегии:

>>> import pandas as pd >>> df = pd.DataFrame([["a", "x"], . [np.nan, "y"], . ["a", np.nan], . ["b", "y"]], dtype="category") . >>> imp = SimpleImputer(strategy="most_frequent") >>> print(imp.fit_transform(df)) [['a' 'x'] ['a' 'y'] ['a' 'y'] ['b' 'y']]

6.4.3. Многовариантное восстановление признаков

Более сложный подход заключается в использовании IterativeImputer класса, который моделирует каждую функцию с пропущенными значениями в зависимости от других функций и использует эту оценку для восстановления. Это происходит в итеративном циклическом режиме: на каждом шаге столбец функций обозначается как выходные, y а другие столбцы функций обрабатываются как входные X . Регрессор подходит на (X, y) для известного y. Затем регрессор используется для прогнозирования недостающих значений y. Это выполняется для каждой функции итеративно, а затем повторяется для max_iter раундов восстановления. Возвращаются результаты последнего раунда восстановления.

Эта оценка пока еще является экспериментальной : параметры по умолчанию или детали поведения могут измениться без какого-либо цикла устаревания. Решение следующих проблем поможет стабилизировать IterativeImputer : критерии сходимости ( # 14338 ), оценки по умолчанию ( # 13286 ) и использование случайного состояния ( # 15611 ). Чтобы использовать его, вам необходимо явно импортировать enable_iterative_imputer .

>>> import numpy as np >>> from sklearn.experimental import enable_iterative_imputer >>> from sklearn.impute import IterativeImputer >>> imp = IterativeImputer(max_iter=10, random_state=0) >>> imp.fit([[1, 2], [3, 6], [4, 8], [np.nan, 3], [7, np.nan]]) IterativeImputer(random_state=0) >>> X_test = [[np.nan, 2], [6, np.nan], [np.nan, 6]] >>> # the model learns that the second feature is double the first >>> print(np.round(imp.transform(X_test))) [[ 1. 2.] [ 6. 12.] [ 3. 6.]]

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

6.4.3.1. Гибкость IterativeImputer

В экосистеме науки о данных R есть множество хорошо зарекомендовавших себя пакетов восстановления: Amelia, mi, mice, missForest и т. Д. MissForest популярен и оказывается частным экземпляром различных алгоритмов последовательного восстановления, которые можно реализовать IterativeImputer путем передачи в различных регрессорах, которые будут использоваться для прогнозирования недостающих значений признаков. В случае с missForest этим регрессором является случайный лес. См. Вложение пропущенных значений с вариантами IterativeImputer .

6.4.3.2. Множественное или одиночное восстановление

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

Наша реализация IterativeImputer была вдохновлена ​​пакетом R MICE (многомерное вычисление с помощью цепных уравнений) 1 , но отличается от него тем, что возвращает одно восстановление вместо нескольких восстановлений. Однако IterativeImputer его также можно использовать для нескольких восстановлений путем многократного применения к одному и тому же набору данных с разными случайными начальными числами, когда sample_posterior=True . См. 2 , главу 4 для более подробного обсуждения множественного и единственного восстановления.

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

Обратите внимание, что вызов transform метода IterativeImputer не позволяет изменять количество выборок. Следовательно, несколько восстановлений не могут быть выполнены одним вызовом transform .

6.4.4. Ссылки

Стеф ван Бюрен, Карин Гротуис-Оудсхорн (2011). «Мыши: многомерное вычисление цепными уравнениями в R». Журнал статистического программного обеспечения 45: 1-67.

Родерик Дж. А. Литтл и Дональд Б. Рубин (1986). «Статистический анализ с отсутствующими данными». John Wiley & Sons, Inc., Нью-Йорк, Нью-Йорк, США.

6.4.5. Расчет ближайших соседей

Класс KNNImputer обеспечивает восстановления для заполнения пропущенных значений с использованием подхода к-ближайших соседей. По умолчанию nan_euclidean_distances для поиска ближайших соседей используется евклидова метрика расстояния, поддерживающая пропущенные значения . Каждый отсутствующий объект рассчитывается с использованием значений от n_neighbors ближайших соседей, у которых есть значение для данного объекта. Характеристики соседей усредняются равномерно или взвешиваются по расстоянию до каждого соседа. Если в выборке отсутствует более одного признака, то соседи для этой выборки могут отличаться в зависимости от конкретного вменяемого признака. Когда количество доступных соседей меньше, чем n_neighbors и нет определенных расстояний до обучающей выборки, среднее значение обучающей выборки для этой функции используется во время восстановления. Если есть хотя бы один сосед с определенным расстоянием, во время восстановления будет использоваться взвешенное или невзвешенное среднее значение остальных соседей. Если функция всегда отсутствует в обучении, она удаляется во время transform . Для получения дополнительной информации о методологии см. Исх. [OL2001] .

Следующий фрагмент демонстрирует, как заменить отсутствующие значения, закодированные как np.nan , с использованием среднего значения функции двух ближайших соседей выборок с пропущенными значениями:

>>> import numpy as np >>> 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, weights="uniform") >>> imputer.fit_transform(X) array([[1. , 2. , 4. ], [3. , 4. , 3. ], [5.5, 6. , 5. ], [8. , 8. , 7. ]])

OL2001 Ольга Троянская, Майкл Кантор, Гэвин Шерлок, Пэт Браун, Тревор Хасти, Роберт Тибширани, Дэвид Ботштейн и Расс Б. Альтман, Методы оценки недостающих значений для микрочипов ДНК, БИОИНФОРМАТИКА Vol. 17 нет. 6, 2001 Страницы 520-525.

6.4.6. Маркировка вмененных значений

Трансформатор MissingIndicator является полезным для преобразования набора данных в соответствующем бинарную матрицу , указывающую на наличие пропущенных значений в наборе данных. Это преобразование полезно в сочетании с восстановлением. При использовании восстановления сохранение информации о пропущенных значениях может быть информативным. Обратите внимание, что оба параметра SimpleImputer и IterativeImputer имеют логический параметр add_indicator ( False по умолчанию), который, если установлен в, True обеспечивает удобный способ объединения выхода MissingIndicator трансформатора с выходом импьютера.

NaN обычно используется в качестве заполнителя для пропущенных значений. Однако он заставляет тип данных быть плавающим. Параметр missing_values позволяет указать другой заполнитель, например целое число. В следующем примере мы будем использовать в -1 качестве пропущенных значений:

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

Параметр features используется для выбора функции, для которых строится маска. По умолчанию именно он ‘missing-only’ возвращает маску импутера функций, содержащих пропущенные значения во fit время:

>>> indicator.features_ array([0, 1, 3])

Параметр features может быть установлен , ‘all’ чтобы вернуть все функции ли они или не содержат пропущенные значения:

>>> indicator = MissingIndicator(missing_values=-1, features="all") >>> mask_all = indicator.fit_transform(X) >>> mask_all array([[ True, True, False, False], [False, True, False, True], [False, True, False, False]]) >>> indicator.features_ array([0, 1, 2, 3])

При использовании MissingIndicator в a Pipeline обязательно используйте FeatureUnion или, ColumnTransformer чтобы добавить функции индикатора к обычным функциям. Сначала мы получаем iris набор данных и добавляем в него недостающие значения.

>>> from sklearn.datasets import load_iris >>> from sklearn.impute import SimpleImputer, MissingIndicator >>> from sklearn.model_selection import train_test_split >>> from sklearn.pipeline import FeatureUnion, make_pipeline >>> from sklearn.tree import DecisionTreeClassifier >>> X, y = load_iris(return_X_y=True) >>> mask = np.random.randint(0, 2, size=X.shape).astype(bool) >>> X[mask] = np.nan >>> X_train, X_test, y_train, _ = train_test_split(X, y, test_size=100, . random_state=0)

Теперь мы создаем FeatureUnion . Все функции будут импулированы с использованием SimpleImputer , чтобы классификаторы могли работать с этими данными. Кроме того, он добавляет индикаторные переменные из MissingIndicator .

>>> transformer = FeatureUnion( . transformer_list=[ . ('features', SimpleImputer(strategy='mean')), . ('indicators', MissingIndicator())]) >>> transformer = transformer.fit(X_train, y_train) >>> results = transformer.transform(X_test) >>> results.shape (100, 8)

Конечно, мы не можем использовать трансформатор для каких-либо прогнозов. Мы должны заключить это в Pipeline классификатор (например, a DecisionTreeClassifier ), чтобы иметь возможность делать прогнозы.

>>> clf = make_pipeline(transformer, DecisionTreeClassifier()) >>> clf = clf.fit(X_train, y_train) >>> results = clf.predict(X_test) >>> results.shape (100,)

Если вы хотите помочь проекту с переводом, то можно обращаться по следующему адресу support@scikit-learn.ru
© 2007 — 2020, scikit-learn developers (BSD License).

Что делать, если в датасете пропущены данные? — 6 способов импутации данных с примерами

Если в датасете пропущены данные, результаты работы с ним могут быть непредсказуемы. Разбираем способы импутации данных, их плюсы и минусы.

Автор перевода Алексей Морозов

Реальные наборы данных могут быть неполными. Не в том смысле, что в анализ не вошли какие-то важные точки или неудачно были выбраны параметры, а просто отсутствуют некоторые данные, которые в принципе должны были там быть.

Это может случиться из-за технических проблем, или если датасет собран из нескольких источников с разными наборами параметров; важно то, что в таблице присутствуют пустые ячейки. Вместо значений в них ставится какая-нибудь заглушка — NaN, просто пустая ячейка или ещё что-нибудь в этом роде. Если их много — тренировка на таких данных сильно ухудшит качество модели, а то и окажется вовсе невозможной. Многие алгоритмы того же scikit-learn не только требуют массив чисел (а не NaN или «missing»), но и ожидают, что этот массив будет состоять из валидных данных.

Что делать? Можно, конечно, просто выкинуть все неполные наблюдения, но так можно потерять ценную информацию. Лучше попытаться восстановить недостающие значения на основании остальных данных в наборе, или хотя бы вставить в пустые ячейки что-нибудь более-менее осмысленное. Этот процесс называется импутацией данных.

В этой статье будет описано 6 популярных способов импутации для наборов однородных точек. Для временных серий они непригодны, там всё делается совсем иначе.

Способ первый: не делать ничего

Тут всё просто: отдаём алгоритму датасет в исходном виде и надеемся, что он с ним как-нибудь разберётся. Некоторые алгоритмы умеют принимать во внимание и даже восстанавливать пропущенные значения в данных. Например, XGBoost делает это за счёт уменьшения функции потерь при обучении. У алгоритма может быть параметр, позволяющий их проигнорировать (пример — LightGBM с параметром use_missing=False ). Но таких опций может и не быть: линейная регрессия в scikit-learn просто объявит массив некорректным и выбросит исключение. Так что в её случае (как и в случае многих других алгоритмов) готовить данные к анализу всё-таки придётся пользователю.

  • Не надо думать об алгоритмах импутации — выставил соответствующие параметры и всё работает.
  • Нужно понимать, как именно алгоритм обойдётся с недостающими данными. В противном случае есть риск получить какие-нибудь артефакты и даже не узнать, какие именно.

Способ второй: импутация данных средним/медианой

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

В коде это выглядит примерно так:

from sklearn.datasets import fetch_california_housing from sklearn.linear_model import LinearRegression from sklearn.model_selection import StratifiedKFold from sklearn.metrics import mean_squared_error from math import sqrt import random import numpy as np random.seed(0) # Скачиваем данные: import pandas as pd dataset = fetch_california_housing() train, target = pd.DataFrame(dataset.data), pd.DataFrame(dataset.target) train.columns = ['0','1','2','3','4','5','6','7'] train.insert(loc=len(train.columns), column='target', value=target) # Случайным образом заменяем 40% значений на NaN column = train['0'] print(column.size) missing_pct = int(column.size * 0.4) i = [random.choice(range(column.shape[0])) for _ in range(missing_pct)] column[i] = np.NaN print(column.shape[0]) # восстанавливаем удалённое с помощью класса SimpleImputer из scikit-learn from sklearn.impute import SimpleImputer imp_mean = SimpleImputer( strategy='mean') # для импутации медианой замените 'mean' на 'median' imp_mean.fit(train) imputed_train_df = imp_mean.transform(train) 
  • Просто и быстро.
  • Хорошо работает на небольших наборах численных данных.
  • Значения вычисляются независимо для каждого столбца, так что корреляции между параметрами не учитываются.
  • Не работает с качественными переменными.
  • Метод не особенно точный.
  • Никак не оценивается погрешность импутации.

Способ третий: импутация данных самым частым значением или константой

Импутация самым часто встречающимся значением — ещё одна простая стратегия для компенсации пропущенных значений, не учитывающая корреляций между параметрами. Плюсы и минусы те же, что и в предыдущем пункте, но этот метод предназначен для качественных переменных.

# Импутация классом SimpleImputer из scikit-learn from sklearn.impute import SimpleImputer imp_mean = SimpleImputer( strategy='most_frequent') imp_mean.fit(train) imputed_train_df = imp_mean.transform(train) 

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

Способ четвёртый: импутация данных с помощью k-NN

k-Nearest Neighbour (k ближайших соседей) — простой алгоритм классификации, который можно модифицировать для импутации недостающих значений. Он использует сходство точек, чтобы предсказать недостающие значения на основании k ближайших точек, у которых это значение есть. Иными словами, выбирается k точек, которые больше всего похожи на рассматриваемую, и уже на их основании выбирается значение для пустой ячейки. Это можно сделать с помощью библиотеки Impyute:

import sys from impyute.imputation.cs import fast_knn # Увеличиваем максимальную глубину рекурсии sys.setrecursionlimit(100000) # начинаем тренировку KNN imputed_training=fast_knn(train.values, k=30) 

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

  • На некоторых датасетах может быть точнее среднего/медианы или константы.
  • Учитывает корреляцию между параметрами.
  • Вычислительно дороже, так как требует держать весь набор данных в памяти.
  • Важно понимать, какая метрика дистанции используется для поиска соседей. Имплементация в impyute поддерживает только манхэттенскую и евклидову дистанцию, так что анализ соотношений (скажем, количества входов на сайты людей разных возрастов) может потребовать предварительной нормализации.
  • Чувствителен к выбросам в данных (в отличие от SVM).

Способ пятый: импутация данных с помощью MICE

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

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

Способ шестой: импутация данных с помощью глубокого обучения

Показано, что глубокое обучение хорошо работает с дискретными и другими не-численными значениями. Библиотека datawig позволяет восстанавливать недостающие значения за счёт тренировки нейросети на тех точках, для которых есть все параметры. Поддерживается тренировка на CPU и GPU.

import datawig df_train, df_test = datawig.utils.random_split(train) # Инициализируем модель SimpleImputer imputer = datawig.SimpleImputer( input_columns=['1','2','3','4','5','6','7', 'target'], # из каких столбцов брать информацию для импутации output_column= '0', # какой столбец восстанавливаем output_path = 'imputer_model' # куда записывать модель и её метрики ) # Тренируем модель imputer.fit(train_df=df_train, num_epochs=50) # Проводим импутацию и возвращаем восстановленный набор данных imputed = imputer.predict(df_test) 
  • Точнее других методов.
  • Может работать с качественными параметрами.
  • Поддерживает CPU и GPU.
  • Восстанавливает только один столбец.
  • На больших наборах данных может быть вычислительно дорого.
  • Нужно заранее решить, какие столбцы будут использоваться для предсказания недостающего значения.

Другие методы импутации данных

Стохастическая регрессия

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

Экстраполяция и интерполяция

Пытается восстановить значения на основании ограниченного набора известных точек.

Hot-deck

Значение берётся из другой точки, похожей по имеющимся параметрам на восстанавливаемую. Грубо говоря, это похоже на k-NN, но используется только один «сосед».

Как мы видим, универсального метода импутации не существует. Одни стратегии работают лучше на одних наборах данных или типах недостающих переменных, другие на других. Если не считать очевидных правил насчёт типов данных (например, у качественных переменных просто не может быть среднего), то можно только посоветовать экспериментировать и смотреть, какой метод сработает лучше на данном конкретном датасете.

sklearn.impute .KNNImputer¶

class sklearn.impute. KNNImputer ( * , missing_values = nan , n_neighbors = 5 , weights = ‘uniform’ , metric = ‘nan_euclidean’ , copy = True , add_indicator = False , keep_empty_features = False ) [source] ¶

Imputation for completing missing values using k-Nearest Neighbors.

Each sample’s missing values are imputed using the mean value from n_neighbors nearest neighbors found in the training set. Two samples are close if the features that neither is missing are close.

Read more in the User Guide .

New in version 0.22.

Parameters : missing_values int, float, str, np.nan or None, default=np.nan

The placeholder for the missing values. All occurrences of missing_values will be imputed. For pandas’ dataframes with nullable integer dtypes with missing values, missing_values should be set to np.nan, since pd.NA will be converted to np.nan.

n_neighbors int, default=5

Number of neighboring samples to use for imputation.

weights or callable, default=’uniform’

Weight function used in prediction. Possible values:

  • ‘uniform’ : uniform weights. All points in each neighborhood are weighted equally.
  • ‘distance’ : weight points by the inverse of their distance. in this case, closer neighbors of a query point will have a greater influence than neighbors which are further away.
  • callable : a user-defined function which accepts an array of distances, and returns an array of the same shape containing the weights.

Distance metric for searching neighbors. Possible values:

  • ‘nan_euclidean’
  • callable : a user-defined function which conforms to the definition of _pairwise_callable(X, Y, metric, **kwds) . The function accepts two arrays, X and Y, and a missing_values keyword in kwds and returns a scalar distance value.

If True, a copy of X will be created. If False, imputation will be done in-place whenever possible.

add_indicator bool, default=False

If True, a MissingIndicator transform will stack onto the output of the imputer’s transform. This allows a predictive estimator to account for missingness despite imputation. If a feature has no missing values at fit/train time, the feature won’t appear on the missing indicator even if there are missing values at transform/test time.

keep_empty_features bool, default=False

If True, features that consist exclusively of missing values when fit is called are returned in results when transform is called. The imputed value is always 0 .

New in version 1.2.

Attributes : indicator_ MissingIndicator

Indicator used to add binary indicators for missing values. None if add_indicator is False.

n_features_in_ int

Number of features seen during fit .

New in version 0.24.

feature_names_in_ ndarray of shape ( n_features_in_ ,)

Names of features seen during fit . Defined only when X has feature names that are all strings.

New in version 1.0.

Univariate imputer for completing missing values with simple strategies.

Multivariate imputer that estimates values to impute for each feature with missing values from all the others.

  • Olga Troyanskaya, Michael Cantor, Gavin Sherlock, Pat Brown, Trevor Hastie, Robert Tibshirani, David Botstein and Russ B. Altman, Missing value estimation methods for DNA microarrays, BIOINFORMATICS Vol. 17 no. 6, 2001 Pages 520-525.
>>> import numpy as np >>> from sklearn.impute import KNNImputer >>> X = [[1, 2, np.nan], [3, 4, 3], [np.nan, 6, 5], [8, 8, 7]] >>> imputer = KNNImputer(n_neighbors=2) >>> imputer.fit_transform(X) array([[1. , 2. , 4. ], [3. , 4. , 3. ], [5.5, 6. , 5. ], [8. , 8. , 7. ]]) 

Fit the imputer on X.

Fit to data, then transform it.

Get output feature names for transformation.

Get metadata routing of this object.

Get parameters for this estimator.

Set output container.

Set the parameters of this estimator.

Impute all missing values in X.

fit ( X , y = None ) [source] ¶

Fit the imputer on X.

Parameters : X array-like shape of (n_samples, n_features)

Input data, where n_samples is the number of samples and n_features is the number of features.

y Ignored

Not used, present here for API consistency by convention.

Returns : self object

The fitted KNNImputer class instance.

Fit to data, then transform it.

Fits transformer to X and y with optional parameters fit_params and returns a transformed version of X .

Parameters : X array-like of shape (n_samples, n_features)

y array-like of shape (n_samples,) or (n_samples, n_outputs), default=None

Target values (None for unsupervised transformations).

**fit_params dict

Additional fit parameters.

Returns : X_new ndarray array of shape (n_samples, n_features_new)

get_feature_names_out ( input_features = None ) [source] ¶

Get output feature names for transformation.

Parameters : input_features array-like of str or None, default=None

  • If input_features is None , then feature_names_in_ is used as feature names in. If feature_names_in_ is not defined, then the following input feature names are generated: [«x0», «x1», . «x(n_features_in_ — 1)»] .
  • If input_features is an array-like, then input_features must match feature_names_in_ if feature_names_in_ is defined.

Transformed feature names.

Get metadata routing of this object.

Please check User Guide on how the routing mechanism works.

Returns : routing MetadataRequest

A MetadataRequest encapsulating routing information.

Get parameters for this estimator.

Parameters : deep bool, default=True

If True, will return the parameters for this estimator and contained subobjects that are estimators.

Returns : params dict

Parameter names mapped to their values.

Set output container.

See Introducing the set_output API for an example on how to use the API.

Parameters : transform , default=None

Configure output of transform and fit_transform .

  • «default» : Default output format of a transformer
  • «pandas» : DataFrame output
  • None : Transform configuration is unchanged

Set the parameters of this estimator.

The method works on simple estimators as well as on nested objects (such as Pipeline ). The latter have parameters of the form __ so that it’s possible to update each component of a nested object.

Parameters : **params dict

Returns : self estimator instance

Impute all missing values in X.

Parameters : X array-like of shape (n_samples, n_features)

The input data to complete.

Returns : X array-like of shape (n_samples, n_output_features)

The imputed dataset. n_output_features is the number of features that is not always missing during fit .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *