Предварительная обработка очень важна для реального машинного обучения, и часто мы видим набор данных с большим количеством Н / Д, что является проблемой для всех инженеров по машинному обучению. Здесь мы представляем три нескольких метода, которые часто используются в соревнованиях по науке о данных, особенно с помощью мощи Pandas и Numpy, для борьбы с этими непослушными «НЕТ» ЦЕННОСТИ

Несколько полезных API-интерфейсов Pandas для обнаружения Н / Д:

  • isnull(): создать логическую маску, указывающую на пропущенные значения.
  • notnull(): противоположно isnull()
  • dropna(): вернуть отфильтрованную версию данных.
  • fillna(): вернуть копию данных с заполненными или вмененными пропущенными значениями.

Это наш фрейм данных df:

month    year  sale
0      1  2012.0  55.0
1      4     NaN   NaN
2      7  2013.0  84.0
3     10  2014.0   NaN
4     12  2019.0  45.0

и отчет об отсутствующих значениях:

year    1
sale    2
dtype: int64

Подход 1: удаление столбцов с отсутствующими значениями

Этот подход просто удаляет все столбцы, содержащие пропущенные значения.

Отсутствующий столбец:

['year', 'sale']

Новый df:

month
0      1
1      4
2      7
3     10
4     12

Подход 2: вменение

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

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

Мы используем SimpleImputer () в SKlearn для управления данными, просто заполняем N / A средним значением в каждом столбце, и тогда мы получаем:

0       1          2
0   1.0  2012.0  55.000000
1   4.0  2014.5  61.333333
2   7.0  2013.0  84.000000
3  10.0  2014.0  61.333333
4  12.0  2019.0  45.000000

Подход 3: расширение импутации

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

df_plus копирует исходные данные, а затем назначает два столбца для записи, если значение установлено.

month    year  sale  year_was_missing  sale_was_missing
0      1  2012.0  55.0             False             False
1      4     NaN   NaN              True              True
2      7  2013.0  84.0             False             False
3     10  2014.0   NaN             False              True
4     12  2019.0  45.0             False             False

Затем мы используем вменение, как в подходе 2,

0       1          2    3    4
0   1.0  2012.0  55.000000  0.0  0.0
1   4.0  2014.5  61.333333  1.0  1.0
2   7.0  2013.0  84.000000  0.0  0.0
3  10.0  2014.0  61.333333  0.0  1.0
4  12.0  2019.0  45.000000  0.0  0.0

Подводя итог. Подход 1 обычно полезен в том случае, когда более 70% элементов в столбце являются Н / Д, и эта функция не имеет значения. Подход 2 работает лучше всего, когда только несколько данных в столбце не соответствуют данным, обычно около 0 ~ 40%. Между тем, где имеется 40 ~ 70% записей N / A, мы используем подход 3, чтобы компенсировать ошибку вменения, жертвуя при этом давлением вычислений и зависимостью между данными.