Первоначально опубликовано здесь: http://blog.contactsunny.com/data-science/handle-missing-data-in-your-training-dataset-with-scikit-imputer

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

В таком случае очень важный вопрос, на который нужно ответить, - как заполнить пробелы? Есть много подходов к решению этой проблемы, и один из них - использование класса Imputer SciKit. Если вас интересует документация, вы можете найти ее здесь.

Как видно из документации, конструктор класса Imputer принимает несколько параметров. Давайте разберемся, что это:

  • отсутствующие_значения - это значение, которое необходимо заменить в наборе данных. Это может быть целое число или NaN. Если вы не передадите это значение, значением по умолчанию будет NaN. Таким образом, везде, где у нас есть NaN в нашем наборе данных, объект Imputer заменит его новым значением.
  • стратегия - это стратегия, которую мы будем использовать для вычисления значения, которое должно заменить вхождения NaN в наборе данных. Мы можем использовать три разные стратегии:
  • значит
  • медиана
  • most_frequent

«Среднее» является здесь значением по умолчанию. Во всех трех случаях будет вычислено необходимое значение, а старое значение будет заменено.

  • ось - может принимать одно из двух значений - 0 и 1. Это определяет, будет ли Импьютер применять стратегию по строкам или по столбцам. 0 для столбцов и 1 для строк.
  • подробный - это просто определит многословность Imputer. По умолчанию установлено значение 0.
  • копия. Этот параметр определяет, нужно ли делать копию исходного объекта или Импьютер должен изменять набор данных на месте. По умолчанию установлено значение True.

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

Data from SuperDataScience

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

from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = 'NaN', strategy = 'mean', axis = 0)
imputer = imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])

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

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