Оценка истории с помощью шума в глубоком обучении в воде

Я использую h2o Deep Learning с Python. Моя проблема - это проблема прогнозирования временных рядов, поскольку я хочу предсказать эволюцию количества солнечных пятен. Вот все значения солнечных пятен с 1749 года: http://www.sidc.be/silso/DATA/SN_ms_tot_V2.0.txt.

Я хочу использовать скользящее окно на 43 месяца, поэтому мой набор данных теперь состоит из 44 столбцов и 3170 строк (значение, которое я хочу предсказать, является 44-м, исходя из 43-го числа в предыдущем месяце).

Мои данные выглядят так:

135.90, 137.90, 140.20, 143.80, 146.40 ... 68.10, 63.60, 60.40

137.90, 140.20, 143.80, 146.40, 147.90, ... 63.60, 60.40, 61.10

140.20, 143.80, 146.40, 147.90, 148.40, ... 60.40, 61.10, 59.70

...

99.0, 104.6, 107.0, 106.9, 107.6, ... 27.80, 26.50, 25.70

Я разделил свой набор данных на обучение (первые 80% строк) и проверку (последние 20%). Смотрите мой код ниже:

import h2o
from h2o.estimators.deeplearning import H2ODeepLearningEstimator

h2o.init()

test=h2o.import_file("validationSet_43month.txt")
train=h2o.import_file("trainingSet_43month.txt")
l=train.shape[1] 
x=train.names[0:l-1] 
y=train.names[l-1]

Factiv="Tanh"
HiddenLayer=[100,100]
Nepochs=2000

model=H2ODeepLearningEstimator(
    activation=Factiv,
    hidden=HiddenLayer,
    epochs=Nepochs,
    reproducible=True,
    stopping_rounds=0, #I want to see an eventual overfitting on scoring history
    seed=123456789)
model.train(x=x,y=y,training_frame=train,validation_frame=test)

Я хочу нарисовать историю подсчета очков, чтобы узнать оптимальное количество периодов для использования, но в моей истории подсчета очков, похоже, много шума с пиками (см. Рисунки). История подсчета очков за 10 000 эпох

увеличьте масштаб до 2000 эпох для отклонения проверки

Я думал, что вместо этого получу такой тип истории оценок: Обычная история оценок

  • 1) Я попытался использовать Tanh вместо Rectifier со скрытыми нейронами [8], но шум все еще присутствует, так что это, вероятно, не из-за числовой нестабильности.

История подсчета очков 43-8-1; Активация = Танх; эпох = 2600

  • 2) Затем я попытался добавить несколько скрытых нейронов ([100,100]) и по-прежнему использовать Tanh. У меня еще много шума:

История подсчета очков 43-100-100-1 Tanh

  • 3) Я пробовал использовать случайный лес и усиление градиента с параметрами по умолчанию, scoring_history выглядит хорошо:

История подсчета очков Случайный лес

История подсчета очков GBM

Есть ли у кого-нибудь объяснения того, как выглядит моя история очков?


person T. RB    schedule 27.03.2018    source источник
comment
Было бы хорошо показать полностью воспроизводимый пример того, что вы делаете (общедоступны ли данные?). Я все еще думаю, что самая интересная часть вашего вопроса заключается в том, что сеть [100,100] получает гораздо более высокие отклонения, чем все другие модели. Это больше похоже на то, что ему дали неправильные данные для обучения или что-то еще было другим, просто при создании этой модели. (Кстати, ваш главный вопрос, о шуме в вашей истории подсчета двух нейронов, я бы все равно отклонил как из-за использования слишком малого количества нейронов.)   -  person Darren Cook    schedule 29.03.2018
comment
@Darren Cook, спасибо за ответы. Вы были правы, я допустил ошибку, пытаясь построить историю подсчета очков для модели 100-100 Tanh. Однако график все равно зашумлен (обновил картинку в своем посте). Мои данные общедоступны, но я реорганизовал их, как я объясняю в своем сообщении. Я новичок в StackOverflow, я не могу загрузить файл, чтобы передать вам свой набор данных, не так ли?   -  person T. RB    schedule 29.03.2018


Ответы (1)


Обучение сужается к лучшему набору весов, а иногда и выходит за рамки допустимого. Хотя, как вы говорите, у вас довольно шумный график.

Когда вы говорите, что ваша сеть - 43-8-1, вы имеете в виду, что дали hidden как [43,8,1] или вы дали скрытый как [8]?

Если первое, помните, что H2O пытается быть полезной, поэтому выходной слой (1 нейрон, когда вы выполняете регрессию) и входной слой (43 нейрона, если все данные числовые, в противном случае больше) создаются для вас.

Если последнее, [2] и [8] - очень низкие числа, возможно, слишком мало (и слишком мало слоев), чтобы оно было эффективным (в зависимости от ваших данных, конечно).

Пробовали ли вы больше нейронов, первое или второе? Например. по умолчанию [200,200]? Очевидно, что на каждую эпоху уйдет больше времени, но стала ли история подсчета очков более плавной?

Я могу представить, как наличие всего лишь нескольких нейронов может привести к скачкообразным результатам обучения.

Но если это не так, я видел зашумленные диаграммы истории оценок при достижении числовой нестабильности. Так что вы можете попробовать переключиться с Rectifier на Tanh.

В более общем плане, сначала стоит построить модель всех значений по умолчанию в качестве основы для сравнения; в частности, я бы избегал касаться rho, скорости обучения, импульса и т. д. H2O хорошо справляется с выбором для них значений по умолчанию.

person Darren Cook    schedule 27.03.2018
comment
Да, 43 и 1 - это количество нейронов на входном и выходном уровнях, заданное по умолчанию h2o. [2] и [8] - мои скрытые нейроны. Я пробовал [30,20] с выпрямителем и [8] с tanh. Я собираюсь попробовать больше скрытых нейронов с Tanh - person T. RB; 27.03.2018
comment
@ T.RB Похоже, что ваша диаграмма 100-100 танков ничему не учит. Лично моим следующим шагом было бы попробовать случайный лес и GBM на одних и тех же данных (с использованием всех настроек по умолчанию) и посмотреть, плохи ли они тоже. Если да, то может проблема в отсутствии сигнала в данных? - person Darren Cook; 27.03.2018
comment
Я пробовал случайный лес и GBM с параметрами по умолчанию, история подсчета очков более плавная (см. Мой пост обновлен). - person T. RB; 27.03.2018