Импутация данных с помощью KNN, SoftImpute

1

Я хотел выполнить сравнение значений вменения из пакета fancyimpute, используя MICE, KNN и Soft Impute, однако, когда я запускал свой код, KNN и SoftImpute ввели только 0 для моих значений по сравнению с более чувствительными значениями, вмененными MICE.

imputed_numerical=train[['Age']].select_dtypes(include='number']).as_matrix()

Age_MICE=MICE().complete(imputed_numerical)
Age_KNN=KNN(k=3).complete(imputed_numerical)
Age_SoftImpute=SoftImpute().complete(imputed_numerical)

Я помещаю результаты в фреймворк данных, который выглядит так:

Not_Imputed MICE    KNN SoftImpute
   22.0    [22.0]  [22.0]  [22.0]
   38.0    [38.0]  [38.0]  [38.0]
   26.0    [26.0]  [26.0]  [26.0]
   35.0    [35.0]  [35.0]  [35.0]
   35.0    [35.0]  [35.0]  [35.0]
   NaN     [29]    [0.0]   [0.0]
   54.0    [54.0]  [54.0]  [54.0]
   2.0     [2.0]   [2.0]   [2.0]
   27.0    [27.0]  [27.0]  [27.0]
   14.0    [14.0]  [14.0]  [14.0]
   4.0     [4.0]   [4.0]   [4.0]
   58.0    [58.0]  [58.0]  [58.0]
   20.0    [20.0]  [20.0]  [20.0]
   39.0    [39.0]  [39.0]  [39.0]
   14.0    [14.0]  [14.0]  [14.0]
   55.0    [55.0]  [55.0]  [55.0]
   2.0     [2.0]   [2.0]   [2.0]
   NaN     [27.6]  [0.0]   [0.0]
   31.0    [31.0]  [31.0]  [31.0]
   NaN     [30]    [0.0]   [0.0]

Вопрос: Почему KNN и SoftImpute вводят только 0 в качестве завершенного значения?

  • 0
    Вы реализовали эти функции вручную? Я не могу найти библиотеку в Python.
  • 0
    pip install fancyimpute должен работать
Теги:
pandas
fancyimpute

1 ответ

0

Проблема в том, что это многомерные процедуры, но вы используете только одну переменную (столбец). MICE выполняет многомерную регрессию, KNN принимает среднее число N соседей, которые ближе всего к отсутствующему значению в многомерном пространстве (каждое измерение является переменной), и я не уверен в softImpute, но, вероятно, это также многомерная процедура,

Например, см. Это предупреждающее сообщение из процедуры knn:

[KNN] Warning: 3/20 still missing after imputation, replacing with 0

или это предупреждение от SoftImpute:

RuntimeWarning: invalid value encountered in double_scalars
  return (np.sqrt(ssd) / old_norm) < self.convergence_threshold
  • 0
    Итак, как мне заставить KNN вменять, используя многомерную процедуру?
  • 0
    используйте фрейм данных / матрицу с более чем одной переменной. Прямо сейчас вы используете только возраст. Включите некоторые другие.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню