Почему недостаточная подгонка? Использование модели регрессии ЛГБМ, моделирующей данные временных рядов

#python #tensorflow #keras #lightgbm

#python #tensorflow #keras #lightgbm

Вопрос:

Постановка задачи

Недавно я пытался обучить регрессионную модель для данных временных рядов. Когда я тренировался на почасовой точке данных (около 7000 точек данных), обе модели показали хорошие результаты.

Я выполнил нормализацию для каждой функции. затем конвейер данных подается в модели.

Следующая картина подготовлена на основе почасовых данных.

Почасовые данные

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

Следующая картина подготовлена на основе ежедневных данных.

Ежедневные данные

Текущая системная информация

параметры и модель

     params = {
        'boosting_type': 'gbdt',
        'objective': 'regression',
        'metric': {'l2', 'l1'},
        'num_leaves': 40,
        'learning_rate': 0.01,
        'feature_fraction': 0.9,
        'bagging_fraction': 0.8,
        'bagging_freq': 5,
        'verbose': 0
    }

    gbm = lgb.train(params, lgb_train,
                    num_boost_round=300, # 300 num_iterations is not enough?
                    valid_sets=lgb_eval,
                    early_stopping_rounds=5)
  
  • RNN

параметры и модель

     # design network            
    model = Sequential()
    # X_train_rnn is the input dataframe
    model.add(LSTM(rnn_hidden_neurons, activation='relu', kernel_initializer='glorot_uniform', input_shape=(X_train_rnn.shape[1], X_train_rnn.shape[2])))
    model.add(Dense(1))
    model.compile(loss='mae', optimizer='adam')
    history = model.fit(X_train_rnn, y_train_walk[labelY].values, 
                        epochs=50, 
                        batch_size=32, 
                        validation_data=(X_test_rnn, y_test_walk[labelY].values), 
                        callbacks=callbacks, # Early stopping
                        verbose=2, 
                        shuffle=False)

  

Мой вопрос

Почему я получил результат недостаточной подгонки? Это из-за слишком малого количества точек данных?

Есть идеи? Заранее спасибо!

Комментарии:

1. Как вы сформулировали вопрос, т. Е. что вы пытались предсказать, используя какие данные? Какие функции вы использовали? Как вы разделили наборы данных для обучения и проверки (т. Е. ранней остановки)? идентичны ли два графика, кроме почасовой и ежедневной модели? Если это так, то, похоже, что в ежедневном случае это вообще не недостаточная подгонка, но вы получаете постоянное предсказание 0 для ежедневной модели

2. Привет @MykhailoLisovyi, я попытался предсказать значение временного ряда определенного признака (например, концентрации бензола). Я использовал пошаговую проверку (обучение: 2 месяца, тест: 1 месяц). Изображения отличаются (почасовые данные от ежедневных данных)

3. Вам нужно будет выяснить, почему в ежедневном случае результат равен 0. Это не недостаточная подгонка в целом, а частный случай, когда кажется, что в обучении ничего не изучено