Предварительная обработка очень важна для реального машинного обучения, и часто мы видим набор данных с большим количеством Н / Д, что является проблемой для всех инженеров по машинному обучению. Здесь мы представляем три нескольких метода, которые часто используются в соревнованиях по науке о данных, особенно с помощью мощи 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, чтобы компенсировать ошибку вменения, жертвуя при этом давлением вычислений и зависимостью между данными.