首页 > 解决方案 > 为什么欠拟合?使用 LGBM 回归模型建模时间序列数据

问题描述

问题陈述

最近我一直在尝试为时间序列数据训练回归模型。当我对每小时数据点(大约 7,000 个数据点)进行训练时,两个模型都显示了 OKey 结果。

我对每个功能都进行了标准化。然后将数据管道输入模型。

下图是按小时数据训练的。

每小时数据

此外,当我对每小时数据平均的每日数据点(大约 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)

参数和型号

    # 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)

我的问题是

为什么我得到了一个欠拟合的结果?是因为数据点太少吗?

任何想法?提前致谢!

标签: pythontensorflowkeraslightgbm

解决方案


推荐阅读