Как предполагает Франсуа Шоле (создатель Keras) в своей книге , один из способов обработки пропущенных значений - заменить их на ноль:
В общем, на нейронныеВ сетях пропущенные значения безопасно вводить как 0, при условии, что 0 уже не является значимым значением.По данным, полученным из сети, сеть узнает, что значение 0 означает отсутствие данных, и начнет игнорировать это значение.Обратите внимание, что если вы ожидаете пропущенные значения в тестовых данных, но сеть была обучена работе с данными без пропущенных значений, сеть не научится игнорировать пропущенные значения!В этой ситуации вы должны искусственно создать обучающие образцы с пропущенными записями: скопируйте несколько обучающих образцов несколько раз и отбросьте некоторые функции, которые, как вы ожидаете, могут отсутствовать в данных теста.
ИтакВы можете присвоить ноль элементам NaN
, учитывая, что ноль не используется в ваших данных (вы можете нормализовать данные в диапазоне, скажем, [1,2], а затем присвоить ноль элементам NaN
; или, наоборот, вы можетеможно нормализовать все значения в диапазоне [0,1] и затем использовать -1 вместо нуля для замены NaN
элементов.)
Другой альтернативный способ - использовать Masking
слой в керасе.Вы даете ему значение маски, скажем, 0, и оно отбрасывает любой временной шаг (т. Е. Строку), где все его функции равны значению маски.Тем не менее, все последующие слои должны поддерживать маскирование, и вам также необходимо предварительно обработать данные и назначить значение маски всем функциям временного шага, который включает в себя одну или несколько NaN
функций.Пример из документа Keras:
Рассмотрим массив данных Numpy x
формы (samples, timesteps,features)
, который будет подан на слой LSTM.Вы хотите замаскировать временные шаги № 3 и № 5, потому что у вас нет данных для этих временных шагов.Вы можете:
установить x[:, 3, :] = 0.
и x[:, 5, :] = 0.
вставить маскирующий слой с mask_value=0.
перед слоем LSTM
:
model = Sequential()
model.add(Masking(mask_value=0., input_shape=(timesteps, features)))
model.add(LSTM(32))