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

  1. MICE или множественное исчисление цепным уравнением
  2. Вменение KNN или K-ближайшего соседа

Сначала мы поговорим о множественном исчислении цепным уравнением.

Множественный расчет по цепочному уравнению предполагает, что данные являются MAR, то есть отсутствуют случайным образом.

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

Его нельзя приписать общим способам использования среднего значения, режима или медианы.

Например, если для человека отсутствует значение веса, он / она может иметь или не иметь диабет, но заполнение этого значения требует оценки с использованием других характеристик, таких как рост, ИМТ, избыточный вес, для прогнозирования правильного набора значений.

Для этого применяется линейная регрессия, и шаги следующие:

Шаг 1:

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

Теперь мы ясно видим здесь проблему, человек с избыточной массой 2, ростом 173,8 см и ИМТ 25,7 не может иметь вес 67,82 кг.

Шаг 2:

Значение веса удаляется, а остальные значения сохраняются.

Шаг 3:

Затем линейная регрессия обучается на серых ячейках с Весом в качестве целевой функции.

Затем белые клетки обрабатываются как тестовые данные, и прогнозируется их значение. Предположим, что значение «а» соответствует весу.

Шаг 4:

Мы поместим значение «a» в элемент веса и удалим значение в элементе высоты.

Затем линейная регрессия обучается на серых ячейках с высотой в качестве целевой функции.

Затем белые клетки обрабатываются как тестовые данные и прогнозируется значение роста. Предположим, что значение «b» соответствует высоте.

Шаг 5:

Далее мы поместим значение «b» в функцию высоты и удалим значение из функции BMI.

Затем проводится обучение линейной регрессии на серых клетках с ИМТ в качестве целевой характеристики.

Затем белые клетки обрабатываются как тестовые данные и прогнозируется значение ИМТ. Предположим, что значение «c» соответствует ИМТ.

Шаг 6:

Теперь мы вычитаем базовые значения на шаге 5 и шаге 1.

все значения равны 0, за исключением того, что мы вычислили, что составляет (a-67,82) по весу, (b-165,13) по росту и (c-25,81) по ИМТ.

Цель состоит в том, чтобы минимизировать эти значения почти до нуля на каждой итерации.

Для следующей итерации значения шага 5 сохраняются в шаге 1, а шаги повторяются от 2 до 6.

В Python это делается так:

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

import numpy as np
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
from sklearn.linear_model import LinearRegression

lr = LinearRegression()
imp = IterativeImputer(estimator=lr,missing_values=np.nan, max_iter=10, verbose=2, imputation_order='roman',random_state=0)
X=imp.fit_transform(X)

Вменение KNN или K-ближайшего соседа

K-Nearest Neighbor - один из самых простых и легких методов вменения в машинном обучении. Он работает на евклидовом расстоянии между соседними координатами X и y, чтобы узнать, насколько похожи данные.

Это вменение объясняется очень простым примером, приведенным ниже:

Предположим, нам нужно спрогнозировать вес строки 3, которая отсутствует в наборе данных.

Во всех других строках есть данные и некоторые отсутствующие столбцы.

Чтобы узнать вес, необходимо предпринять следующие шаги:

1) Выберите пропущенное значение для заполнения данных.

2) Выберите значения в строке

3) Выберите количество соседей, с которыми вы хотите работать (в идеале 2–5).

4) Рассчитайте евклидово расстояние от всех других точек данных, соответствующих друг другу в строке.

5) Выберите 2 наименьших и усредните.

Расчет евклидова расстояния:

расстояние = sqrt (вес * расстояние от текущих координат)

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

расстояние координат рассчитывается как квадрат следующих значений:

для роста = 164,7–154,9, 164,7–157,8 164,7–169,9 164,7–154,9

для ИМТ = 24,7363331759203–29,2156250664228, пусто, 24,7363331759203–23,3839037677878,24.7363331759203–28,5071149007606

пробел - для значения ИМТ, отсутствующего в строке 2.

для избыточного веса = 1–2,1–2,1–1, пусто

Для вышеуказанных значений это делается, как показано ниже: (Квадрат значений с весами)

Для строк 2 и 5, поскольку 1 объект имел пропущенное значение, каждый вес равен 3/2, а остаточный вес равен 3/3.

Расстояние рассчитывается по формуле.

Итак, мы выбираем 2 ближайших значения: 8,5390280477347 и 5,37299404429225 в приведенном выше случае. Вес этих строк равен 64,9 и 67,5.

Таким образом, для отсутствующего значения вес будет средним из этих 2.

вес = (64,9 + 67,5) / 2 = 132,4 / 2 = 66,2 кг.

Для остальных значений недостающих характеристик используется аналогичный подход.

В Python класс KNNImputer обеспечивает вменение для заполнения отсутствующих значений с использованием подхода k-ближайших соседей. По умолчанию для поиска ближайших соседей используется nan_euclidean_distances, это евклидова метрика расстояния, поддерживающая пропущенные значения. Каждая отсутствующая функция вменяется с использованием значений из n_neighbors ближайших соседей, которые имеют значение ближайших соседей, которые необходимо учитывать. Характеристики соседей усредняются равномерно или взвешиваются по расстоянию до каждого соседа. Если в выборке отсутствует более одного признака, то соседи для этой выборки могут отличаться в зависимости от конкретного вменяемого признака. Нет определенных расстояний до обучающего набора, обучающего набора, используемого при вменении. Если есть хотя бы один сосед с определенным расстоянием, во время вменения будет использоваться взвешенное или невзвешенное среднее значение остальных соседей.

Вывод:

И MICE, и KNN вменения рассчитываются в соответствии с логическим обоснованием данных и их связи с другими функциями.

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

Я надеюсь, что после прочтения этого блога вменения MICE и KNN должны быть легкими для понимания.

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

Первоначально опубликовано на https://www.numpyninja.com 6 ноября 2020 г.